diff --git a/.web-server-pid b/.web-server-pid new file mode 100644 index 0000000..03dbf99 --- /dev/null +++ b/.web-server-pid @@ -0,0 +1 @@ +127.0.0.1:8000 \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3f0a582 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +dev: + @docker-compose down && \ + docker-compose build --pull --no-cache && \ + docker-compose \ + -f docker-compose.yml \ + up -d --remove-orphans \ No newline at end of file diff --git a/app/AppKernel.php b/app/AppKernel.php index dfa28a0..30e3abc 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -21,7 +21,7 @@ public function registerBundles() new Nelmio\ApiDocBundle\NelmioApiDocBundle(), new JMS\SerializerBundle\JMSSerializerBundle(), new FOS\UserBundle\FOSUserBundle(), - new Csa\Bundle\GuzzleBundle\CsaGuzzleBundle(), + new EightPoints\Bundle\GuzzleBundle\EightPointsGuzzleBundle(), new Oneup\FlysystemBundle\OneupFlysystemBundle(), new Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle(), @@ -31,6 +31,7 @@ public function registerBundles() if (in_array($this->getEnvironment(), ['dev', 'test', 'acceptance'], true)) { $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); + $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); } diff --git a/app/config/config.yml b/app/config/config.yml index 5b6f994..fd8bd53 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -33,6 +33,10 @@ framework: http_method_override: true assets: ~ +sensio_framework_extra: + view: + annotations: true + # Twig Configuration twig: debug: "%kernel.debug%" @@ -81,14 +85,8 @@ nelmio_cors: # Nelmio API Doc nelmio_api_doc: - sandbox: - accept_type: "application/json" - body_format: - formats: [ "json" ] - default_format: "json" - request_format: - formats: - json: "application/json" + documentation: + title: "Symfony 3 REST API Example" # FOS User Bundle @@ -104,11 +102,9 @@ fos_user: # FOS REST Bundle fos_rest: body_listener: true - format_listener: true param_fetcher_listener: true view: view_response_listener: 'force' - exception_wrapper_handler: null formats: jsonp: true json: true @@ -116,17 +112,21 @@ fos_rest: rss: false mime_types: json: ['application/json', 'application/x-json'] - jpg: 'image/jpeg' - png: 'image/png' + jpg: ['image/jpeg'] + png: ['image/png'] jsonp_handler: ~ routing_loader: default_format: json include_format: false format_listener: rules: - - { path: ^/, priorities: [ json, jsonp ], fallback_format: ~, prefer_extension: true } - exception: - enabled: true + - { path: ^/, fallback_format: json, attributes: { _controller: 'fos_rest.exception.twig_controller:showAction' } } + - { path: ^/, fallback_format: html } + access_denied_listener: true + exception: true + serializer: + serialize_null: true + # Lexik JWT Auth @@ -137,9 +137,9 @@ lexik_jwt_authentication: token_ttl: %jwt_token_ttl% -# CSA Guzzle -csa_guzzle: - profiler: %kernel.debug% +# Guzzle +eight_points_guzzle: + logging: %kernel.debug% # JMS Serializer diff --git a/app/config/config_acceptance.yml b/app/config/config_acceptance.yml index fc51426..2c3b74b 100644 --- a/app/config/config_acceptance.yml +++ b/app/config/config_acceptance.yml @@ -9,20 +9,17 @@ framework: web_profiler: toolbar: true -doctrine: - dbal: - dbname: "%database_name%_acceptance" - -csa_guzzle: - logger: true +eight_points_guzzle: + logging: true clients: local_test_api: - config: - base_url: http://symfony-rest-example.dev/app_acceptance.php/ + base_url: http://127.0.0.1:8000/app_dev.php/ # Oneup Flysystem oneup_flysystem: adapters: local_adapter: local: - directory: %kernel.root_dir%/../features/uploadTemp \ No newline at end of file + directory: %kernel.root_dir%/../features/uploadTemp + + diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml index e6fb76d..3532f0b 100644 --- a/app/config/config_dev.yml +++ b/app/config/config_dev.yml @@ -35,9 +35,9 @@ monolog: # delivery_address: me@example.com -csa_guzzle: - logger: true +eight_points_guzzle: + logging: true clients: local_test_api: - config: - base_url: http://symfony-rest-example.dev/app_dev.php/ + base_url: http://127.0.0.1:8000/app_dev.php/ +# base_url: http://symfony-rest-example.dev/app_dev.php/ diff --git a/app/config/routing.yml b/app/config/routing.yml index e143151..2109bc0 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -1,6 +1,6 @@ NelmioApiDocBundle: - resource: "@NelmioApiDocBundle/Resources/config/routing.yml" - prefix: "/doc" + resource: "@NelmioApiDocBundle/Resources/config/routing/swaggerui.xml" + prefix: /doc api: diff --git a/behat.yml b/behat.yml index a4f4eaf..542232f 100644 --- a/behat.yml +++ b/behat.yml @@ -8,7 +8,7 @@ default: - FeatureContext: doctrine: "@doctrine" - AppBundle\Features\Context\RestApiContext: - client: "@csa_guzzle.client.local_test_api" + client: "@eight_points_guzzle.client.local_test_api" dummyDataPath: "%paths.base%/features/Dummy/" - AppBundle\Features\Context\AccountSetupContext: userManager: "@fos_user.user_manager" diff --git a/composer.json b/composer.json index 8b5b67a..b7f7d37 100644 --- a/composer.json +++ b/composer.json @@ -4,53 +4,50 @@ "type": "project", "autoload": { "psr-4": { - "": "src/" + "AppBundle\\": "src/AppBundle" }, - "classmap": [ - "app/AppKernel.php", - "app/AppCache.php" - ] + "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }, "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } + "psr-4": { "Tests\\": "tests/" }, + "files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ] }, "require": { "php": ">=5.5.9", - "symfony/symfony": "3.0.*", - "doctrine/orm": "^2.5", "doctrine/doctrine-bundle": "^1.6", - "doctrine/doctrine-cache-bundle": "^1.2", - "symfony/swiftmailer-bundle": "^2.3", - "symfony/monolog-bundle": "^2.8", - "sensio/distribution-bundle": "^5.0", - "sensio/framework-extra-bundle": "^3.0.2", + "doctrine/orm": "^2.5", "incenteev/composer-parameter-handler": "^2.0", + "sensio/distribution-bundle": "^5.0.19", + "sensio/framework-extra-bundle": "^3.0.2", + "symfony/monolog-bundle": "^3.1.0", + "symfony/polyfill-apcu": "^1.0", + "symfony/swiftmailer-bundle": "^2.3.10", + "symfony/symfony": "3.3.*", + "twig/twig": "2.4.4", - "nelmio/cors-bundle": "^1.4", - "nelmio/api-doc-bundle": "^2.11", - "friendsofsymfony/rest-bundle": "^1.7", - "csa/guzzle-bundle": "^1.3", + "nelmio/cors-bundle": "^1.5", + "nelmio/api-doc-bundle": "^3.0", + "friendsofsymfony/rest-bundle": "^2.3.1", "jms/serializer-bundle": "^1.1", "oneup/flysystem-bundle": "^1.2", "friendsofsymfony/user-bundle": "dev-master", - "lexik/jwt-authentication-bundle": "dev-master" - + "lexik/jwt-authentication-bundle": "dev-master", + "eightpoints/guzzle-bundle": "^7.3" }, "require-dev": { "sensio/generator-bundle": "^3.0", - "symfony/phpunit-bridge": "^2.7", + "symfony/phpunit-bridge": "^3.0", "phpspec/phpspec": "^2.4", "behat/behat": "dev-master", "behat/symfony2-extension": "^2.1", - "phpunit/phpunit": "^5.1" + "phpunit/phpunit": "^5.1", + "symfony/web-server-bundle": "3.3.16" }, "minimum-stability": "stable", "scripts": { - "post-install-cmd": [ + "symfony-scripts": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", @@ -58,13 +55,11 @@ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" ], + "post-install-cmd": [ + "@symfony-scripts" + ], "post-update-cmd": [ - "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" + "@symfony-scripts" ] }, "extra": { diff --git a/composer.lock b/composer.lock index 6e9ecd3..cb6800f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,50 +4,41 @@ "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": "21205c3218e6e16743247467e86a17e5", + "content-hash": "4a88c10475f6d98930ffd39a29c8a7c3", "packages": [ { - "name": "csa/guzzle-bundle", - "version": "v1.3.11", + "name": "composer/ca-bundle", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/csarrazi/CsaGuzzleBundle.git", - "reference": "0294a55b241504bca179d4db5f82ce62d8bb28ad" + "url": "https://github.com/composer/ca-bundle.git", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/csarrazi/CsaGuzzleBundle/zipball/0294a55b241504bca179d4db5f82ce62d8bb28ad", - "reference": "0294a55b241504bca179d4db5f82ce62d8bb28ad", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~4.0|~5.0", - "guzzlehttp/log-subscriber": "~1.0", - "php": ">=5.4.0", - "symfony/expression-language": "~2.4|~3.0", - "symfony/framework-bundle": "~2.3|~3.0", - "twig/twig": "~1.12" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" }, "require-dev": { - "doctrine/cache": "~1.1", - "guzzlehttp/guzzle-services": "~0.3", - "phpunit/phpunit": "~4.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/web-profiler-bundle": "~2.3" + "phpunit/phpunit": "^4.8.35", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" }, - "suggest": { - "doctrine/cache": "Allows caching of responses", - "guzzlehttp/guzzle-services": "Allow web service description" - }, - "type": "symfony-bundle", + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Csa\\Bundle\\GuzzleBundle\\": "src" + "Composer\\CaBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -56,39 +47,47 @@ ], "authors": [ { - "name": "Charles Sarrazin", - "email": "charles@sarraz.in" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "A bundle integrating GuzzleHttp >= 4.0", - "time": "2015-11-17T00:02:55+00:00" + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2017-11-29T09:37:33+00:00" }, { "name": "doctrine/annotations", - "version": "v1.3.1", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "bd4461328621bde0ae6b1b2675fbc6aca4ceb558" + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/bd4461328621bde0ae6b1b2675fbc6aca4ceb558", - "reference": "bd4461328621bde0ae6b1b2675fbc6aca4ceb558", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" + "php": "^7.1" }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.6.1" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -129,37 +128,41 @@ "docblock", "parser" ], - "time": "2016-12-30T15:59:45+00:00" + "time": "2017-12-06T07:11:42+00:00" }, { "name": "doctrine/cache", - "version": "v1.6.1", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3" + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", - "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a", + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a", "shasum": "" }, "require": { - "php": "~5.5|~7.0" + "php": "~7.1" }, "conflict": { "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" + "alcaeus/mongo-php-adapter": "^1.1", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -199,24 +202,24 @@ "cache", "caching" ], - "time": "2016-10-29T11:16:17+00:00" + "time": "2017-08-25T07:02:50+00:00" }, { "name": "doctrine/collections", - "version": "v1.4.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" }, "require-dev": { "doctrine/coding-standard": "~0.1@dev", @@ -266,20 +269,20 @@ "collections", "iterator" ], - "time": "2017-01-03T10:49:41+00:00" + "time": "2017-07-22T10:37:32+00:00" }, { "name": "doctrine/common", - "version": "v2.7.2", + "version": "v2.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "930297026c8009a567ac051fd545bf6124150347" + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/930297026c8009a567ac051fd545bf6124150347", - "reference": "930297026c8009a567ac051fd545bf6124150347", + "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", "shasum": "" }, "require": { @@ -288,15 +291,15 @@ "doctrine/collections": "1.*", "doctrine/inflector": "1.*", "doctrine/lexer": "1.*", - "php": "~5.6|~7.0" + "php": "~7.1" }, "require-dev": { - "phpunit/phpunit": "^5.4.6" + "phpunit/phpunit": "^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7.x-dev" + "dev-master": "2.8.x-dev" } }, "autoload": { @@ -339,28 +342,30 @@ "persistence", "spl" ], - "time": "2017-01-13T14:02:13+00:00" + "time": "2017-08-31T08:43:38+00:00" }, { "name": "doctrine/dbal", - "version": "v2.5.12", + "version": "v2.6.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "7b9e911f9d8b30d43b96853dab26898c710d8f44" + "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/7b9e911f9d8b30d43b96853dab26898c710d8f44", - "reference": "7b9e911f9d8b30d43b96853dab26898c710d8f44", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/e3eed9b1facbb0ced3a0995244843a189e7d1b13", + "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13", "shasum": "" }, "require": { - "doctrine/common": ">=2.4,<2.8-dev", - "php": ">=5.3.2" + "doctrine/common": "^2.7.1", + "ext-pdo": "*", + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*", + "phpunit/phpunit": "^5.4.6", + "phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5", "symfony/console": "2.*||^3.0" }, "suggest": { @@ -372,7 +377,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5.x-dev" + "dev-master": "2.6.x-dev" } }, "autoload": { @@ -410,41 +415,45 @@ "persistence", "queryobject" ], - "time": "2017-02-08T12:53:47+00:00" + "time": "2017-11-19T13:38:54+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "1.6.7", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "a01d99bc6c9a6c8a8ace0012690099dd957ce9b9" + "reference": "eb6e4fb904a459be28872765ab6e2d246aac7c87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/a01d99bc6c9a6c8a8ace0012690099dd957ce9b9", - "reference": "a01d99bc6c9a6c8a8ace0012690099dd957ce9b9", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/eb6e4fb904a459be28872765ab6e2d246aac7c87", + "reference": "eb6e4fb904a459be28872765ab6e2d246aac7c87", "shasum": "" }, "require": { - "doctrine/dbal": "~2.3", - "doctrine/doctrine-cache-bundle": "~1.0", - "jdorn/sql-formatter": "~1.1", - "php": ">=5.5.9", - "symfony/console": "~2.7|~3.0", - "symfony/dependency-injection": "~2.7|~3.0", - "symfony/doctrine-bridge": "~2.7|~3.0", - "symfony/framework-bundle": "~2.7|~3.0" + "doctrine/dbal": "^2.5.12", + "doctrine/doctrine-cache-bundle": "~1.2", + "jdorn/sql-formatter": "^1.2.16", + "php": "^5.5.9|^7.0", + "symfony/console": "~2.7|~3.0|~4.0", + "symfony/dependency-injection": "~2.7|~3.0|~4.0", + "symfony/doctrine-bridge": "~2.7|~3.0|~4.0", + "symfony/framework-bundle": "~2.7|~3.0|~4.0" + }, + "conflict": { + "symfony/http-foundation": "<2.6" }, "require-dev": { "doctrine/orm": "~2.3", - "phpunit/phpunit": "~4", + "phpunit/phpunit": "^4.8.36|^5.7|^6.4", "satooshi/php-coveralls": "^1.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/property-info": "~2.8|~3.0", - "symfony/validator": "~2.7|~3.0", - "symfony/yaml": "~2.7|~3.0", - "twig/twig": "~1.10|~2.0" + "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", + "symfony/property-info": "~2.8|~3.0|~4.0", + "symfony/validator": "~2.7|~3.0|~4.0", + "symfony/web-profiler-bundle": "~2.7|~3.0|~4.0", + "symfony/yaml": "~2.7|~3.0|~4.0", + "twig/twig": "~1.26|~2.0" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -453,7 +462,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -491,27 +500,27 @@ "orm", "persistence" ], - "time": "2017-01-16T12:01:26+00:00" + "time": "2017-11-24T13:09:19+00:00" }, { "name": "doctrine/doctrine-cache-bundle", - "version": "1.3.0", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineCacheBundle.git", - "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504" + "reference": "9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/18c600a9b82f6454d2e81ca4957cdd56a1cf3504", - "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504", + "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1", + "reference": "9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1", "shasum": "" }, "require": { "doctrine/cache": "^1.4.2", "doctrine/inflector": "~1.0", "php": ">=5.3.2", - "symfony/doctrine-bridge": "~2.2|~3.0" + "symfony/doctrine-bridge": "~2.2|~3.0|~4.0" }, "require-dev": { "instaclick/coding-standard": "~1.1", @@ -519,15 +528,15 @@ "instaclick/symfony2-coding-standard": "dev-remaster", "phpunit/phpunit": "~4", "predis/predis": "~0.8", - "satooshi/php-coveralls": "~0.6.1", + "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "~1.5", - "symfony/console": "~2.2|~3.0", - "symfony/finder": "~2.2|~3.0", - "symfony/framework-bundle": "~2.2|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/console": "~2.2|~3.0|~4.0", + "symfony/finder": "~2.2|~3.0|~4.0", + "symfony/framework-bundle": "~2.2|~3.0|~4.0", + "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", "symfony/security-acl": "~2.3|~3.0", - "symfony/validator": "~2.2|~3.0", - "symfony/yaml": "~2.2|~3.0" + "symfony/validator": "~2.2|~3.0|~4.0", + "symfony/yaml": "~2.2|~3.0|~4.0" }, "suggest": { "symfony/security-acl": "For using this bundle to cache ACLs" @@ -535,7 +544,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -579,37 +588,37 @@ "cache", "caching" ], - "time": "2016-01-26T17:28:51+00:00" + "time": "2017-10-12T17:23:29+00:00" }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -646,36 +655,36 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+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": { @@ -700,7 +709,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2017-07-22T11:58:36+00:00" }, { "name": "doctrine/lexer", @@ -758,38 +767,40 @@ }, { "name": "doctrine/orm", - "version": "v2.5.6", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/doctrine/doctrine2.git", - "reference": "e6c434196c8ef058239aaa0724b4aadb0107940b" + "reference": "87ee409783a4a322b5597ebaae558661404055a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/e6c434196c8ef058239aaa0724b4aadb0107940b", - "reference": "e6c434196c8ef058239aaa0724b4aadb0107940b", + "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.8-dev", - "doctrine/dbal": ">=2.5-dev,<2.6-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": { @@ -798,8 +809,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\ORM\\": "lib/" + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" } }, "notification-url": "https://packagist.org/downloads/", @@ -822,6 +833,10 @@ { "name": "Jonathan Wage", "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], "description": "Object-Relational-Mapper for PHP", @@ -830,68 +845,238 @@ "database", "orm" ], - "time": "2016-12-18T15:42:34+00:00" + "time": "2018-02-27T07:30:56+00:00" + }, + { + "name": "eightpoints/guzzle-bundle", + "version": "7.3.0", + "source": { + "type": "git", + "url": "https://github.com/8p/EightPointsGuzzleBundle.git", + "reference": "1b663153f860214f18a18d8df6bf5f0592689550" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/8p/EightPointsGuzzleBundle/zipball/1b663153f860214f18a18d8df6bf5f0592689550", + "reference": "1b663153f860214f18a18d8df6bf5f0592689550", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.0", + "php": ">=7.0", + "psr/log": "~1.0", + "symfony/expression-language": "~2.7|~3.0|~4.0", + "symfony/framework-bundle": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.1", + "symfony/var-dumper": "~2.7|~3.0|~4.0", + "twig/twig": "~1.5|~2.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "EightPoints\\Bundle\\GuzzleBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Community", + "homepage": "https://github.com/8p/GuzzleBundle/contributors" + }, + { + "name": "Florian Preusner", + "email": "florian.preusner@8points.de", + "homepage": "https://github.com/florianpreusner" + } + ], + "description": "Integrates Guzzle 6.x, a PHP HTTP Client, into Symfony 2/3/4. Comes with easy and powerful configuration options and optional plugins.", + "homepage": "https://github.com/8p/GuzzleBundle", + "keywords": [ + "Guzzle", + "bundle", + "client", + "curl", + "http client", + "rest", + "symfony", + "web service" + ], + "time": "2018-01-14T20:52:44+00:00" + }, + { + "name": "exsyst/swagger", + "version": "v0.4.0", + "source": { + "type": "git", + "url": "https://github.com/GuilhemN/swagger.git", + "reference": "9e3a92833ee8489db899607f72deec7d7995e050" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GuilhemN/swagger/zipball/9e3a92833ee8489db899607f72deec7d7995e050", + "reference": "9e3a92833ee8489db899607f72deec7d7995e050", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "EXSyst\\Component\\Swagger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ener-Getick", + "email": "egetick@gmail.com" + } + ], + "description": "A php library to manipulate Swagger specifications", + "time": "2018-02-03T12:20:03+00:00" + }, + { + "name": "fig/link-util", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link-util.git", + "reference": "1a07821801a148be4add11ab0603e4af55a72fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac", + "reference": "1a07821801a148be4add11ab0603e4af55a72fac", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/link": "~1.0@dev" + }, + "require-dev": { + "phpunit/phpunit": "^5.1", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Fig\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common utility implementations for HTTP links", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "time": "2016-10-17T18:31:11+00:00" }, { "name": "friendsofsymfony/rest-bundle", - "version": "1.7.7", - "target-dir": "FOS/RestBundle", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", - "reference": "c79b7e5df96e5581591ceb6a026bd4e5f9346de0" + "reference": "1abdf3d82502ac67b93c7f84c844fa147f0ec70e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/c79b7e5df96e5581591ceb6a026bd4e5f9346de0", - "reference": "c79b7e5df96e5581591ceb6a026bd4e5f9346de0", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/1abdf3d82502ac67b93c7f84c844fa147f0ec70e", + "reference": "1abdf3d82502ac67b93c7f84c844fa147f0ec70e", "shasum": "" }, "require": { - "doctrine/inflector": "~1.0", - "php": "^5.3.9|~7.0", - "psr/log": "~1.0", - "symfony/framework-bundle": "~2.3|~3.0", - "symfony/http-kernel": "^2.3.24|~3.0", - "willdurand/jsonp-callback-validator": "~1.0", - "willdurand/negotiation": "~1.2" + "doctrine/inflector": "^1.0", + "php": "^5.5.9|~7.0", + "psr/log": "^1.0", + "symfony/config": "^2.7|^3.0|^4.0", + "symfony/debug": "^2.7|^3.0|^4.0", + "symfony/dependency-injection": "^2.7|^3.0|^4.0", + "symfony/event-dispatcher": "^2.7|^3.0|^4.0", + "symfony/finder": "^2.7|^3.0|^4.0", + "symfony/framework-bundle": "^2.7|^3.0|^4.0", + "symfony/http-foundation": "^2.7|^3.0|^4.0", + "symfony/http-kernel": "^2.7|^3.0|^4.0", + "symfony/routing": "^2.7|^3.0|^4.0", + "symfony/security-core": "^2.7|^3.0|^4.0", + "symfony/templating": "^2.7|^3.0|^4.0", + "willdurand/jsonp-callback-validator": "^1.0", + "willdurand/negotiation": "^2.0" }, "conflict": { - "jms/serializer": "<0.12", - "jms/serializer-bundle": "<0.11", - "symfony/validator": ">=2.5.0,<2.5.5" + "jms/serializer": "1.3.0", + "jms/serializer-bundle": "<1.2.0", + "sensio/framework-extra-bundle": "<3.0.13" }, "require-dev": { - "jms/serializer": "~0.13|~1.0", - "jms/serializer-bundle": "~0.12|~1.0", - "phpoption/phpoption": "~1.1.0", - "sensio/framework-extra-bundle": "~2.0|~3.0", - "sllh/php-cs-fixer-styleci-bridge": "^1.3", - "symfony/browser-kit": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/form": "~2.3|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/security": "~2.3|~3.0", - "symfony/serializer": "~2.3|~3.0", - "symfony/validator": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" + "jms/serializer-bundle": "^1.2|^2.0", + "phpoption/phpoption": "^1.1", + "psr/http-message": "^1.0", + "sensio/framework-extra-bundle": "^3.0.13|^4.0|^5.0", + "symfony/asset": "^2.7|^3.0|^4.0", + "symfony/browser-kit": "^2.7|^3.0|^4.0", + "symfony/css-selector": "^2.7|^3.0|^4.0", + "symfony/dependency-injection": "^2.7|^3.0|^4.0", + "symfony/expression-language": "~2.7|^3.0|^4.0", + "symfony/form": "^2.7|^3.0|^4.0", + "symfony/phpunit-bridge": "^3.2|^4.0", + "symfony/security-bundle": "^2.7|^3.0|^4.0", + "symfony/serializer": "^2.7.11|^3.0.4|^4.0", + "symfony/twig-bundle": "^2.7|^3.0|^4.0", + "symfony/validator": "^2.7|^3.0|^4.0", + "symfony/web-profiler-bundle": "^2.7|^3.0|^4.0", + "symfony/yaml": "^2.7|^3.0|^4.0" }, "suggest": { - "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ~0.12||~1.0", - "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener, requires ~3.0", - "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ~2.3", - "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ~2.3" + "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ^1.0", + "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener, requires ^3.0", + "symfony/expression-language": "Add support for using the expression language in the routing, requires ^2.7|^3.0", + "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ^2.7|^3.0", + "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ^2.7|^3.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.3-dev" } }, "autoload": { - "psr-0": { - "FOS\\RestBundle": "" - } + "psr-4": { + "FOS\\RestBundle\\": "" + }, + "exclude-from-classmap": [ + "Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -916,7 +1101,7 @@ "keywords": [ "rest" ], - "time": "2015-12-29T16:02:50+00:00" + "time": "2018-02-28T13:57:04+00:00" }, { "name": "friendsofsymfony/user-bundle", @@ -924,22 +1109,23 @@ "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSUserBundle.git", - "reference": "6a12083d0f6b53ca312021b15277d92be571cbe6" + "reference": "742f22f7d18fd2edb617243b92fed3f1b2bbd87f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/6a12083d0f6b53ca312021b15277d92be571cbe6", - "reference": "6a12083d0f6b53ca312021b15277d92be571cbe6", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/742f22f7d18fd2edb617243b92fed3f1b2bbd87f", + "reference": "742f22f7d18fd2edb617243b92fed3f1b2bbd87f", "shasum": "" }, "require": { "paragonie/random_compat": "^1 || ^2", "php": "^5.5.9 || ^7.0", - "symfony/form": "^2.7 || ^3.0", - "symfony/framework-bundle": "^2.7 || ^3.0", - "symfony/security-bundle": "^2.7 || ^3.0", - "symfony/templating": "^2.7 || ^3.0", - "symfony/twig-bundle": "^2.7 || ^3.0", + "symfony/form": "^2.8 || ^3.0 || ^4.0", + "symfony/framework-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/security-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/templating": "^2.8 || ^3.0 || ^4.0", + "symfony/twig-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/validator": "^2.8 || ^3.0 || ^4.0", "twig/twig": "^1.28 || ^2.0" }, "conflict": { @@ -948,18 +1134,17 @@ }, "require-dev": { "doctrine/doctrine-bundle": "^1.3", - "friendsofphp/php-cs-fixer": "^1.11", - "phpunit/phpunit": "~4.8|~5.0", - "swiftmailer/swiftmailer": "^4.3 || ^5.0", - "symfony/console": "^2.7 || ^3.0", - "symfony/phpunit-bridge": "^2.7 || ^3.0", - "symfony/validator": "^2.7 || ^3.0", - "symfony/yaml": "^2.7 || ^3.0" + "friendsofphp/php-cs-fixer": "^2.2", + "phpunit/phpunit": "^4.8.35|^5.7.11|^6.5", + "swiftmailer/swiftmailer": "^4.3 || ^5.0 || ^6.0", + "symfony/console": "^2.8 || ^3.0 || ^4.0", + "symfony/phpunit-bridge": "^2.8 || ^3.0 || ^4.0", + "symfony/yaml": "^2.8 || ^3.0 || ^4.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -984,8 +1169,7 @@ "homepage": "https://github.com/friendsofsymfony/FOSUserBundle/contributors" }, { - "name": "Thibault Duplessis", - "email": "thibault.duplessis@gmail.com" + "name": "Thibault Duplessis" } ], "description": "Symfony FOSUserBundle", @@ -993,32 +1177,45 @@ "keywords": [ "User management" ], - "time": "2017-02-08 16:08:46" + "time": "2018-03-01 12:39:08" }, { "name": "guzzlehttp/guzzle", - "version": "5.3.1", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "70f1fa53b71c4647bf2762c09068a95f77e12fb8" + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/70f1fa53b71c4647bf2762c09068a95f77e12fb8", - "reference": "70f1fa53b71c4647bf2762c09068a95f77e12fb8", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { - "guzzlehttp/ringphp": "^1.1", - "php": ">=5.4.0" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0" + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { "GuzzleHttp\\": "src/" } @@ -1034,7 +1231,7 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -1045,40 +1242,41 @@ "rest", "web service" ], - "time": "2016-07-15T19:28:39+00:00" + "time": "2017-06-22T18:50:49+00:00" }, { - "name": "guzzlehttp/log-subscriber", - "version": "1.0.1", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/guzzle/log-subscriber.git", - "reference": "99c3c0004165db721d8ef7bbef60c996210e538a" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/log-subscriber/zipball/99c3c0004165db721d8ef7bbef60c996210e538a", - "reference": "99c3c0004165db721d8ef7bbef60c996210e538a", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~4.0 | ~5.0", - "php": ">=5.4.0", - "psr/log": "~1.0" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Subscriber\\Log\\": "src/" - } + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1091,82 +1289,32 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "Logs HTTP requests and responses as they are sent over the wire (Guzzle 4+)", - "homepage": "http://guzzlephp.org/", + "description": "Guzzle promises library", "keywords": [ - "Guzzle", - "log", - "plugin" + "promise" ], - "time": "2014-10-13T03:31:43+00:00" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "guzzlehttp/ringphp", - "version": "1.1.0", + "name": "guzzlehttp/psr7", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/guzzle/RingPHP.git", - "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", - "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "guzzlehttp/streams": "~3.0", "php": ">=5.4.0", - "react/promise": "~2.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "ext-curl": "Guzzle will use specific adapters if cURL is present" + "psr/http-message": "~1.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Ring\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", - "time": "2015-05-20T03:37:09+00:00" - }, - { - "name": "guzzlehttp/streams", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/streams.git", - "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", - "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" + "provide": { + "psr/http-message-implementation": "1.0" }, "require-dev": { "phpunit/phpunit": "~4.0" @@ -1174,13 +1322,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Stream\\": "src/" - } + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1191,38 +1342,46 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Provides a simple abstraction over streams of data", - "homepage": "http://guzzlephp.org/", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "Guzzle", - "stream" - ], - "time": "2014-10-12T19:18:40+00:00" + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" }, { "name": "incenteev/composer-parameter-handler", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/Incenteev/ParameterHandler.git", - "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc" + "reference": "933c45a34814f27f2345c11c37d46b3ca7303550" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", - "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550", + "reference": "933c45a34814f27f2345c11c37d46b3ca7303550", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/yaml": "~2.3|~3.0" + "symfony/yaml": "^2.3 || ^3.0 || ^4.0" }, "require-dev": { - "composer/composer": "1.0.*@dev", - "phpspec/prophecy-phpunit": "~1.0", - "symfony/filesystem": "~2.2" + "composer/composer": "^1.0@dev", + "symfony/filesystem": "^2.3 || ^3 || ^4", + "symfony/phpunit-bridge": "^4.0" }, "type": "library", "extra": { @@ -1250,7 +1409,7 @@ "keywords": [ "parameters management" ], - "time": "2015-11-10T17:04:01+00:00" + "time": "2018-02-13T18:05:56+00:00" }, { "name": "jdorn/sql-formatter", @@ -1390,16 +1549,16 @@ }, { "name": "jms/serializer", - "version": "1.4.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "f39d8b4660d5cef43b0c3265ce642173d9b2c58b" + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/f39d8b4660d5cef43b0c3265ce642173d9b2c58b", - "reference": "f39d8b4660d5cef43b0c3265ce642173d9b2c58b", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/e7c53477ff55c21d1b1db7d062edc050a24f465f", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f", "shasum": "" }, "require": { @@ -1407,7 +1566,7 @@ "doctrine/instantiator": "^1.0.3", "jms/metadata": "~1.1", "jms/parser-lib": "1.*", - "php": ">=5.5.0", + "php": "^5.5|^7.0", "phpcollection/phpcollection": "~0.1", "phpoption/phpoption": "^1.1" }, @@ -1421,20 +1580,25 @@ "jackalope/jackalope-doctrine-dbal": "^1.1.5", "phpunit/phpunit": "^4.8|^5.0", "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", "symfony/filesystem": "^2.1", - "symfony/form": "~2.1", - "symfony/translation": "^2.1", - "symfony/validator": "^2.2", - "symfony/yaml": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0", "twig/twig": "~1.12|~2.0" }, "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", "symfony/yaml": "Required if you'd like to serialize data to YAML format." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -1444,9 +1608,13 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "Apache-2.0" ], "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, { "name": "Johannes M. Schmitt", "email": "schmittjoh@gmail.com" @@ -1461,25 +1629,25 @@ "serialization", "xml" ], - "time": "2016-11-13T10:20:11+00:00" + "time": "2018-02-04T17:48:54+00:00" }, { "name": "jms/serializer-bundle", - "version": "1.1.0", + "version": "1.5.0", "target-dir": "JMS/SerializerBundle", "source": { "type": "git", "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", - "reference": "3e396c980545350c2efb65a50041d2a9f9d6562e" + "reference": "85ee039a2b7f89d77c403e33cee7b43a875c31e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/3e396c980545350c2efb65a50041d2a9f9d6562e", - "reference": "3e396c980545350c2efb65a50041d2a9f9d6562e", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/85ee039a2b7f89d77c403e33cee7b43a875c31e5", + "reference": "85ee039a2b7f89d77c403e33cee7b43a875c31e5", "shasum": "" }, "require": { - "jms/serializer": "^1.0.0", + "jms/serializer": "^1.7", "php": ">=5.4.0", "phpoption/phpoption": "^1.1.0", "symfony/framework-bundle": "~2.3|~3.0" @@ -1487,9 +1655,11 @@ "require-dev": { "doctrine/doctrine-bundle": "*", "doctrine/orm": "*", + "phpunit/phpunit": "^4.2|^5.0", "symfony/browser-kit": "*", "symfony/class-loader": "*", "symfony/css-selector": "*", + "symfony/expression-language": "~2.6|~3.0", "symfony/finder": "*", "symfony/form": "*", "symfony/process": "*", @@ -1504,7 +1674,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -1514,7 +1684,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "Apache-2.0" ], "authors": [ { @@ -1531,20 +1701,20 @@ "serialization", "xml" ], - "time": "2015-11-10T12:26:42+00:00" + "time": "2017-05-10T10:17:17+00:00" }, { "name": "league/flysystem", - "version": "1.0.35", + "version": "1.0.43", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062" + "reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/dda7f3ab94158a002d9846a97dc18ebfb7acc062", - "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1ce7cc142d906ba58dc54c82915d355a9191c8a8", + "reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8", "shasum": "" }, "require": { @@ -1555,23 +1725,24 @@ }, "require-dev": { "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-copy": "Allows you to use Copy.com storage", - "league/flysystem-dropbox": "Allows you to use Dropbox storage", "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" }, "type": "library", "extra": { @@ -1614,7 +1785,7 @@ "sftp", "storage" ], - "time": "2017-02-09T11:33:58+00:00" + "time": "2018-03-01T10:27:04+00:00" }, { "name": "lexik/jwt-authentication-bundle", @@ -1622,29 +1793,28 @@ "source": { "type": "git", "url": "https://github.com/lexik/LexikJWTAuthenticationBundle.git", - "reference": "2e8965d6c5753708eddd66f7e7a84e3259377ead" + "reference": "49f1ba49bab08a0632b275373748445b89de84fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/2e8965d6c5753708eddd66f7e7a84e3259377ead", - "reference": "2e8965d6c5753708eddd66f7e7a84e3259377ead", + "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/49f1ba49bab08a0632b275373748445b89de84fd", + "reference": "49f1ba49bab08a0632b275373748445b89de84fd", "shasum": "" }, "require": { "namshi/jose": "^7.2", "php": "^5.5|^7.0", - "symfony/console": "^2.8|^3.0", - "symfony/framework-bundle": "^2.8|^3.0", - "symfony/security-bundle": "^2.8|^3.0" + "symfony/framework-bundle": "^2.8|^3.0|^4.0", + "symfony/security-bundle": "^2.8|^3.0|^4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.1", + "friendsofphp/php-cs-fixer": "^1.1|^2.8@dev", "lcobucci/jwt": "~3.2", - "phpunit/phpunit": "^4.8|^5.0", - "symfony/browser-kit": "^2.8|^3.0", - "symfony/dom-crawler": "^2.8|^3.0", - "symfony/phpunit-bridge": "^2.8|^3.0", - "symfony/yaml": "^2.8|^3.0" + "symfony/browser-kit": "^2.8|^3.0|^4.0", + "symfony/console": "^2.8|^3.0|^4.0", + "symfony/dom-crawler": "^2.8|^3.0|^4.0", + "symfony/phpunit-bridge": "~3.3", + "symfony/yaml": "^2.8|^3.0|^4.0" }, "suggest": { "gesdinet/jwt-refresh-token-bundle": "Implements a refresh token system over Json Web Tokens in Symfony", @@ -1711,71 +1881,20 @@ "rest", "symfony" ], - "time": "2017-02-02 11:50:57" - }, - { - "name": "michelf/php-markdown", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/michelf/php-markdown.git", - "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220", - "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-lib": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Michelf": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "https://michelf.ca/", - "role": "Developer" - }, - { - "name": "John Gruber", - "homepage": "https://daringfireball.net/" - } - ], - "description": "PHP Markdown", - "homepage": "https://michelf.ca/projects/php-markdown/", - "keywords": [ - "markdown" - ], - "time": "2016-10-29T18:58:20+00:00" + "time": "2018-01-25 08:24:45" }, { "name": "monolog/monolog", - "version": "1.22.0", + "version": "1.23.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "bad29cb8d18ab0315e6c477751418a82c850d558" + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bad29cb8d18ab0315e6c477751418a82c850d558", - "reference": "bad29cb8d18ab0315e6c477751418a82c850d558", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", "shasum": "" }, "require": { @@ -1796,7 +1915,7 @@ "phpunit/phpunit-mock-objects": "2.3.0", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "~5.3" + "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1840,7 +1959,7 @@ "logging", "psr-3" ], - "time": "2016-11-26T00:15:39+00:00" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "namshi/jose", @@ -1907,64 +2026,61 @@ }, { "name": "nelmio/api-doc-bundle", - "version": "2.13.0", - "target-dir": "Nelmio/ApiDocBundle", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "a3a9bb3b700f3ebaed95390292dad23f8141afa0" + "reference": "29ec20bda12c4f0f65dd806ab00f25a9d5b20b9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/a3a9bb3b700f3ebaed95390292dad23f8141afa0", - "reference": "a3a9bb3b700f3ebaed95390292dad23f8141afa0", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/29ec20bda12c4f0f65dd806ab00f25a9d5b20b9c", + "reference": "29ec20bda12c4f0f65dd806ab00f25a9d5b20b9c", "shasum": "" }, "require": { - "michelf/php-markdown": "~1.4", - "php": ">=5.3", - "symfony/console": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0", - "symfony/twig-bundle": "~2.3|~3.0" - }, - "conflict": { - "jms/serializer": "<0.12", - "jms/serializer-bundle": "<0.11", - "symfony/symfony": "~2.7.8", - "twig/twig": "<1.12" + "exsyst/swagger": "~0.3", + "php": "^7.0", + "symfony/framework-bundle": "^3.2.5|^4.0", + "symfony/property-info": "^3.1|^4.0", + "zircote/swagger-php": "^2.0.9" }, "require-dev": { - "doctrine/doctrine-bundle": "~1.5", - "doctrine/orm": "~2.3", - "dunglas/api-bundle": "~1.0@dev", - "friendsofsymfony/rest-bundle": "~1.0|~2.0", - "jms/serializer-bundle": ">=0.11", - "sensio/framework-extra-bundle": "~3.0", - "symfony/browser-kit": "~2.3|~3.0", - "symfony/css-selector": "~2.3|~3.0", - "symfony/finder": "~2.3|~3.0", - "symfony/form": "~2.3|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/serializer": "~2.7|~3.0", - "symfony/validator": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" + "api-platform/core": "^2.0.3", + "doctrine/annotations": "^1.2", + "friendsofsymfony/rest-bundle": "^2.0", + "jms/serializer-bundle": "^2.0", + "phpdocumentor/reflection-docblock": "^3.1", + "sensio/framework-extra-bundle": "^3.0", + "symfony/asset": "^2.8|^3.0|^4.0", + "symfony/browser-kit": "^2.8|^3.0|^4.0", + "symfony/cache": "^3.1|^4.0", + "symfony/config": "^2.8|^3.0|^4.0", + "symfony/console": "^2.8|^3.0|^4.0", + "symfony/dom-crawler": "^2.8|^3.0|^4.0", + "symfony/form": "^3.0.8|^4.0", + "symfony/phpunit-bridge": "^3.3", + "symfony/property-access": "^2.8|^3.0|^4.0", + "symfony/stopwatch": "^2.8|^3.0|^4.0", + "symfony/templating": "^2.8|^3.0|^4.0", + "symfony/twig-bundle": "^3.0|^4.0", + "symfony/validator": "^2.8|^3.0|^4.0", + "symfony/yaml": "^2.8|^3.0|^4.0" }, "suggest": { - "dunglas/api-bundle": "For making use of resources definitions of DunglasApiBundle.", - "friendsofsymfony/rest-bundle": "For making use of REST information in the doc.", - "jms/serializer": "For making use of serializer information in the doc.", - "symfony/form": "For using form definitions as input.", - "symfony/validator": "For making use of validator information in the doc." + "api-platform/core": "For using an API oriented framework.", + "friendsofsymfony/rest-bundle": "For using the parameters annotations.", + "phpdocumentor/reflection-docblock": "For parsing php docs." }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.13-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-0": { - "Nelmio\\ApiDocBundle": "" + "psr-4": { + "Nelmio\\ApiDocBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1988,28 +2104,29 @@ "documentation", "rest" ], - "time": "2016-06-13T09:12:09+00:00" + "time": "2017-12-09T13:31:56+00:00" }, { "name": "nelmio/cors-bundle", - "version": "1.5.1", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "cc9a26517b65769e6e3cea10099d4a40ce11ca29" + "reference": "548dc8ebd3984acd2f6d8787ab1dac2e9aa14254" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/cc9a26517b65769e6e3cea10099d4a40ce11ca29", - "reference": "cc9a26517b65769e6e3cea10099d4a40ce11ca29", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/548dc8ebd3984acd2f6d8787ab1dac2e9aa14254", + "reference": "548dc8ebd3984acd2f6d8787ab1dac2e9aa14254", "shasum": "" }, "require": { - "symfony/framework-bundle": "^2.7 || ^3.0" + "symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0" }, "require-dev": { - "matthiasnoback/symfony-dependency-injection-test": "^0.7.6", - "mockery/mockery": "0.9.*" + "matthiasnoback/symfony-dependency-injection-test": "^1.0 || ^2.0", + "mockery/mockery": "^0.9 || ^1.0", + "symfony/phpunit-bridge": "^2.7 || ^3.0 || ^4.0" }, "type": "symfony-bundle", "extra": { @@ -2045,59 +2162,65 @@ "cors", "crossdomain" ], - "time": "2017-01-22T21:34:09+00:00" + "time": "2017-12-11T18:41:54+00:00" }, { "name": "oneup/flysystem-bundle", - "version": "1.10.0", + "version": "1.14.1", "source": { "type": "git", "url": "https://github.com/1up-lab/OneupFlysystemBundle.git", - "reference": "a8f5ce36b9624e1c8c7b8ccc89f10790e313c705" + "reference": "c3986a7d125324efa811be49ada7177d2ce95a8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/a8f5ce36b9624e1c8c7b8ccc89f10790e313c705", - "reference": "a8f5ce36b9624e1c8c7b8ccc89f10790e313c705", + "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/c3986a7d125324efa811be49ada7177d2ce95a8a", + "reference": "c3986a7d125324efa811be49ada7177d2ce95a8a", "shasum": "" }, "require": { - "league/flysystem": "^1.0.14", + "league/flysystem": "^1.0.26", "php": ">=5.4.0", "symfony/framework-bundle": "~2.0|~3.0" }, "require-dev": { "jenko/flysystem-gaufrette": "^1.0", - "league/flysystem-aws-s3-v2": "~1.0", - "league/flysystem-cached-adapter": "~1.0", - "league/flysystem-copy": "~1.0", - "league/flysystem-dropbox": "~1.0", - "league/flysystem-gridfs": "~1.0", - "league/flysystem-memory": "~1.0", - "league/flysystem-rackspace": "~1.0", - "league/flysystem-sftp": "~1.0", - "league/flysystem-webdav": "~1.0", - "league/flysystem-ziparchive": "~1.0", - "litipk/flysystem-fallback-adapter": "~0.1", - "phpunit/phpunit": "4.4.*", - "symfony/browser-kit": "~2.0|~3.0", - "symfony/finder": "~2.0|~3.0", - "twistor/flysystem-stream-wrapper": "~1.0" + "league/flysystem-aws-s3-v2": "^1.0", + "league/flysystem-cached-adapter": "^1.0", + "league/flysystem-dropbox": "^1.0", + "league/flysystem-gridfs": "^1.0", + "league/flysystem-memory": "^1.0", + "league/flysystem-rackspace": "^1.0", + "league/flysystem-replicate-adapter": "^1.0", + "league/flysystem-sftp": "^1.0", + "league/flysystem-webdav": "^1.0", + "league/flysystem-ziparchive": "^1.0", + "litipk/flysystem-fallback-adapter": "^0.1", + "phpunit/phpunit": "^4.4", + "superbalist/flysystem-google-storage": "^4.0", + "symfony/asset": "^2.0|^3.0", + "symfony/browser-kit": "^2.0|^3.0", + "symfony/finder": "^2.0|^3.0", + "symfony/templating": "^2.0|^3.0", + "symfony/translation": "^2.0|^3.0", + "twistor/flysystem-stream-wrapper": "^1.0" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Required for FTP and SFTP", "jenko/flysystem-gaufrette": "Allows you to use gaufrette adapter", "league/flysystem-aws-s3-v2": "Use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Use S3 storage with AWS SDK v3", "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-copy": "Allows you to use Copy.com storage", "league/flysystem-dropbox": "Use Dropbox storage", "league/flysystem-gridfs": "Allows you to use GridFS adapter", "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-replicate-adapter": "Allows you to use the Replica adapter from Flysystem", "league/flysystem-sftp": "Allows SFTP server storage via phpseclib", "league/flysystem-webdav": "Allows you to use WebDAV storage", "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", "litipk/flysystem-fallback-adapter": "Allows you to use a fallback filesystem", + "superbalist/flysystem-google-storage": "Allows you to use Google Cloud Storage buckets", "twistor/flysystem-stream-wrapper": "Allows you to use stream wrapper" }, "type": "symfony-bundle", @@ -2126,20 +2249,20 @@ "abstraction", "filesystem" ], - "time": "2017-02-03T10:49:25+00:00" + "time": "2017-11-27T15:59:58+00:00" }, { "name": "paragonie/random_compat", - "version": "v2.0.4", + "version": "v2.0.11", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e" + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", - "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", "shasum": "" }, "require": { @@ -2174,7 +2297,7 @@ "pseudorandom", "random" ], - "time": "2016-11-07T23:38:38+00:00" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "phpcollection/phpcollection", @@ -2222,57 +2345,251 @@ "sequence", "set" ], - "time": "2015-05-17T12:39:23+00:00" + "time": "2015-05-17T12:39:23+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25T16:39:46+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.5.0", + "name": "psr/link", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + "url": "https://github.com/php-fig/link.git", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "require-dev": { - "phpunit/phpunit": "4.7.*" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "PhpOption\\": "src/" + "psr-4": { + "Psr\\Link\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "MIT" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Option Type for PHP", + "description": "Common interfaces for HTTP links", "keywords": [ - "language", - "option", - "php", - "type" + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" ], - "time": "2015-07-25T16:39:46+00:00" + "time": "2016-10-28T16:06:13+00:00" }, { "name": "psr/log", @@ -2322,30 +2639,32 @@ "time": "2016-10-10T12:19:37+00:00" }, { - "name": "react/promise", - "version": "v2.5.0", + "name": "psr/simple-cache", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/2760f3898b7e931aa71153852dcd48a75c9b95db", - "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", + "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + "Psr\\SimpleCache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2353,29 +2672,32 @@ ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "description": "Common interfaces for simple caching", "keywords": [ - "promise", - "promises" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], - "time": "2016-12-22T14:09:01+00:00" + "time": "2017-01-02T13:31:39+00:00" }, { "name": "sensio/distribution-bundle", - "version": "v5.0.18", + "version": "v5.0.21", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", - "reference": "17846680901003d26d823c2e3ac9228702837916" + "reference": "eb6266b3b472e4002538610b28a0a04bcf94891a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/17846680901003d26d823c2e3ac9228702837916", - "reference": "17846680901003d26d823c2e3ac9228702837916", + "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a", + "reference": "eb6266b3b472e4002538610b28a0a04bcf94891a", "shasum": "" }, "require": { @@ -2414,41 +2736,43 @@ "configuration", "distribution" ], - "time": "2017-01-10T14:58:45+00:00" + "time": "2017-08-25T16:55:44+00:00" }, { "name": "sensio/framework-extra-bundle", - "version": "v3.0.21", + "version": "v3.0.29", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "ed86f6fb1753e76b39ff8b87f527045ca6b97169" + "reference": "bb907234df776b68922eb4b25bfa061683597b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/ed86f6fb1753e76b39ff8b87f527045ca6b97169", - "reference": "ed86f6fb1753e76b39ff8b87f527045ca6b97169", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a", + "reference": "bb907234df776b68922eb4b25bfa061683597b6a", "shasum": "" }, "require": { "doctrine/common": "~2.2", "symfony/dependency-injection": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0" + "symfony/framework-bundle": "~2.3|~3.0|~4.0" }, "require-dev": { - "symfony/asset": "~2.7|~3.0", - "symfony/browser-kit": "~2.3|~3.0", - "symfony/dom-crawler": "~2.3|~3.0", - "symfony/expression-language": "~2.4|~3.0", - "symfony/finder": "~2.3|~3.0", - "symfony/phpunit-bridge": "~3.2", - "symfony/psr-http-message-bridge": "^0.3", - "symfony/security-bundle": "~2.4|~3.0", - "symfony/templating": "~2.3|~3.0", - "symfony/translation": "~2.3|~3.0", - "symfony/twig-bundle": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0", - "twig/twig": "~1.11|~2.0", + "doctrine/doctrine-bundle": "~1.5", + "doctrine/orm": "~2.4,>=2.4.5", + "symfony/asset": "~2.7|~3.0|~4.0", + "symfony/browser-kit": "~2.3|~3.0|~4.0", + "symfony/dom-crawler": "~2.3|~3.0|~4.0", + "symfony/expression-language": "~2.4|~3.0|~4.0", + "symfony/finder": "~2.3|~3.0|~4.0", + "symfony/phpunit-bridge": "~3.2|~4.0", + "symfony/psr-http-message-bridge": "^0.3|^1.0", + "symfony/security-bundle": "~2.4|~3.0|~4.0", + "symfony/templating": "~2.3|~3.0|~4.0", + "symfony/translation": "~2.3|~3.0|~4.0", + "symfony/twig-bundle": "~2.3|~3.0|~4.0", + "symfony/yaml": "~2.3|~3.0|~4.0", + "twig/twig": "~1.12|~2.0", "zendframework/zend-diactoros": "^1.3" }, "suggest": { @@ -2482,24 +2806,25 @@ "annotations", "controllers" ], - "time": "2017-02-02T15:31:23+00:00" + "time": "2017-12-14T19:03:23+00:00" }, { "name": "sensiolabs/security-checker", - "version": "v4.0.0", + "version": "v4.1.8", "source": { "type": "git", "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "116027b57b568ed61b7b1c80eeb4f6ee9e8c599c" + "reference": "dc270d5fec418cc6ac983671dba5d80ffaffb142" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/116027b57b568ed61b7b1c80eeb4f6ee9e8c599c", - "reference": "116027b57b568ed61b7b1c80eeb4f6ee9e8c599c", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142", + "reference": "dc270d5fec418cc6ac983671dba5d80ffaffb142", "shasum": "" }, "require": { - "symfony/console": "~2.7|~3.0" + "composer/ca-bundle": "^1.0", + "symfony/console": "~2.7|~3.0|~4.0" }, "bin": [ "security-checker" @@ -2507,7 +2832,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -2526,20 +2851,20 @@ } ], "description": "A security checker for your composer.lock", - "time": "2016-09-23T18:09:57+00:00" + "time": "2018-02-28T22:10:01+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.5", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "cd142238a339459b10da3d8234220963f392540c" + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c", - "reference": "cd142238a339459b10da3d8234220963f392540c", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", "shasum": "" }, "require": { @@ -2574,51 +2899,54 @@ } ], "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", + "homepage": "https://swiftmailer.symfony.com", "keywords": [ "email", "mail", "mailer" ], - "time": "2016-12-29T10:02:40+00:00" + "time": "2018-01-23T07:37:21+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v2.12.1", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "b0146bdca7ba2a65f3bbe7010423c7393b29ec3f" + "reference": "2b41b8b6d2c6edb1a5494f02f8e4129be2a44784" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/b0146bdca7ba2a65f3bbe7010423c7393b29ec3f", - "reference": "b0146bdca7ba2a65f3bbe7010423c7393b29ec3f", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/2b41b8b6d2c6edb1a5494f02f8e4129be2a44784", + "reference": "2b41b8b6d2c6edb1a5494f02f8e4129be2a44784", "shasum": "" }, "require": { - "monolog/monolog": "~1.18", + "monolog/monolog": "~1.22", "php": ">=5.3.2", - "symfony/config": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/http-kernel": "~2.3|~3.0", - "symfony/monolog-bridge": "~2.3|~3.0" + "symfony/config": "~2.7|~3.0|~4.0", + "symfony/dependency-injection": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0", + "symfony/monolog-bridge": "~2.7|~3.0|~4.0" }, "require-dev": { - "phpunit/phpunit": "^4.8", - "symfony/console": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" + "symfony/console": "~2.3|~3.0|~4.0", + "symfony/phpunit-bridge": "^3.3|^4.0", + "symfony/yaml": "~2.3|~3.0|~4.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { "Symfony\\Bundle\\MonologBundle\\": "" - } + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2640,25 +2968,81 @@ "log", "logging" ], - "time": "2017-01-02T19:04:26+00:00" + "time": "2017-11-06T16:02:17+00:00" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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 apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4" + "reference": "254919c03761d46c29291616576ed003f10e91c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/2d6e2b20d457603eefb6e614286c22efca30fdb4", - "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/254919c03761d46c29291616576ed003f10e91c1", + "reference": "254919c03761d46c29291616576ed003f10e91c1", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/intl": "~2.3|~3.0" + "symfony/intl": "~2.3|~3.0|~4.0" }, "suggest": { "ext-intl": "For best performance" @@ -2666,7 +3050,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2698,20 +3082,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -2723,7 +3107,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2757,20 +3141,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-php56", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c" + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/1dd42b9b89556f18092f3d1ada22cb05ac85383c", - "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8", "shasum": "" }, "require": { @@ -2780,7 +3164,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2813,20 +3197,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2" + "reference": "3532bfcd8f933a7816f3a0a59682fc404776600f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", - "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3532bfcd8f933a7816f3a0a59682fc404776600f", + "reference": "3532bfcd8f933a7816f3a0a59682fc404776600f", "shasum": "" }, "require": { @@ -2836,7 +3220,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2872,20 +3256,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-util", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-util.git", - "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb" + "reference": "e17c808ec4228026d4f5a8832afa19be85979563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/746bce0fca664ac0a575e465f65c6643faddf7fb", - "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563", "shasum": "" }, "require": { @@ -2894,7 +3278,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2924,25 +3308,25 @@ "polyfill", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-31T18:08:44+00:00" }, { "name": "symfony/swiftmailer-bundle", - "version": "v2.4.2", + "version": "v2.6.7", "source": { "type": "git", "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "ad751095576ce0c12a284e30e3fff80c91f27225" + "reference": "c4808f5169efc05567be983909d00f00521c53ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/ad751095576ce0c12a284e30e3fff80c91f27225", - "reference": "ad751095576ce0c12a284e30e3fff80c91f27225", + "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec", + "reference": "c4808f5169efc05567be983909d00f00521c53ec", "shasum": "" }, "require": { "php": ">=5.3.2", - "swiftmailer/swiftmailer": ">=4.2.0,~5.0", + "swiftmailer/swiftmailer": "~4.2|~5.0", "symfony/config": "~2.7|~3.0", "symfony/dependency-injection": "~2.7|~3.0", "symfony/http-kernel": "~2.7|~3.0" @@ -2950,7 +3334,7 @@ "require-dev": { "symfony/console": "~2.7|~3.0", "symfony/framework-bundle": "~2.7|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/phpunit-bridge": "~3.3@dev", "symfony/yaml": "~2.7|~3.0" }, "suggest": { @@ -2959,7 +3343,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -2983,39 +3367,53 @@ ], "description": "Symfony SwiftmailerBundle", "homepage": "http://symfony.com", - "time": "2016-12-20T04:44:33+00:00" + "time": "2017-10-19T01:06:41+00:00" }, { "name": "symfony/symfony", - "version": "v3.0.9", + "version": "v3.3.16", "source": { "type": "git", "url": "https://github.com/symfony/symfony.git", - "reference": "634fb8c018532c820debd2678e452a735b9f438e" + "reference": "98e128ccee7afff6313dc3e9cce619f6e1caedbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/634fb8c018532c820debd2678e452a735b9f438e", - "reference": "634fb8c018532c820debd2678e452a735b9f438e", + "url": "https://api.github.com/repos/symfony/symfony/zipball/98e128ccee7afff6313dc3e9cce619f6e1caedbc", + "reference": "98e128ccee7afff6313dc3e9cce619f6e1caedbc", "shasum": "" }, "require": { "doctrine/common": "~2.4", - "php": ">=5.5.9", + "ext-xml": "*", + "fig/link-util": "^1.0", + "php": "^5.5.9|>=7.0.8", + "psr/cache": "~1.0", + "psr/container": "^1.0", + "psr/link": "^1.0", "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "symfony/polyfill-apcu": "~1.1", "symfony/polyfill-intl-icu": "~1.0", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php56": "~1.0", "symfony/polyfill-php70": "~1.0", - "symfony/polyfill-util": "~1.0", - "twig/twig": "~1.23|~2.0" + "twig/twig": "~1.34|~2.4" }, "conflict": { - "phpdocumentor/reflection": "<1.0.7" + "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" }, "replace": { "symfony/asset": "self.version", "symfony/browser-kit": "self.version", + "symfony/cache": "self.version", "symfony/class-loader": "self.version", "symfony/config": "self.version", "symfony/console": "self.version", @@ -3025,6 +3423,7 @@ "symfony/dependency-injection": "self.version", "symfony/doctrine-bridge": "self.version", "symfony/dom-crawler": "self.version", + "symfony/dotenv": "self.version", "symfony/event-dispatcher": "self.version", "symfony/expression-language": "self.version", "symfony/filesystem": "self.version", @@ -3033,6 +3432,7 @@ "symfony/framework-bundle": "self.version", "symfony/http-foundation": "self.version", "symfony/http-kernel": "self.version", + "symfony/inflector": "self.version", "symfony/intl": "self.version", "symfony/ldap": "self.version", "symfony/monolog-bridge": "self.version", @@ -3056,25 +3456,33 @@ "symfony/twig-bundle": "self.version", "symfony/validator": "self.version", "symfony/var-dumper": "self.version", + "symfony/web-link": "self.version", "symfony/web-profiler-bundle": "self.version", + "symfony/web-server-bundle": "self.version", + "symfony/workflow": "self.version", "symfony/yaml": "self.version" }, "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.6", "doctrine/data-fixtures": "1.0.*", "doctrine/dbal": "~2.4", "doctrine/doctrine-bundle": "~1.4", "doctrine/orm": "~2.4,>=2.4.5", - "egulias/email-validator": "~1.2,>=1.2.1", + "egulias/email-validator": "~1.2,>=1.2.8|~2.0", "monolog/monolog": "~1.11", "ocramius/proxy-manager": "~0.4|~1.0|~2.0", - "phpdocumentor/reflection": "^1.0.7", - "symfony/polyfill-apcu": "~1.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "predis/predis": "~1.0", + "sensio/framework-extra-bundle": "^3.0.2", + "symfony/phpunit-bridge": "~3.4|~4.0", "symfony/security-acl": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3082,7 +3490,6 @@ "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", - "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", "Symfony\\Bundle\\": "src/Symfony/Bundle/", "Symfony\\Component\\": "src/Symfony/Component/" @@ -3113,38 +3520,43 @@ "keywords": [ "framework" ], - "time": "2016-07-30T09:10:53+00:00" + "time": "2018-01-29T11:42:20+00:00" }, { "name": "twig/twig", - "version": "v1.31.0", + "version": "v2.4.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "ddc9e3e20ee9c0b6908f401ac8353635b750eca7" + "reference": "eddb97148ad779f27e670e1e3f19fb323aedafeb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/ddc9e3e20ee9c0b6908f401ac8353635b750eca7", - "reference": "ddc9e3e20ee9c0b6908f401ac8353635b750eca7", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/eddb97148ad779f27e670e1e3f19fb323aedafeb", + "reference": "eddb97148ad779f27e670e1e3f19fb323aedafeb", "shasum": "" }, "require": { - "php": ">=5.2.7" + "php": "^7.0", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { + "psr/container": "^1.0", "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "~3.3@dev" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.31-dev" + "dev-master": "2.4-dev" } }, "autoload": { "psr-0": { "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3174,7 +3586,7 @@ "keywords": [ "templating" ], - "time": "2017-01-11T19:36:15+00:00" + "time": "2017-09-27T18:10:31+00:00" }, { "name": "willdurand/jsonp-callback-validator", @@ -3218,25 +3630,28 @@ }, { "name": "willdurand/negotiation", - "version": "1.5.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/willdurand/Negotiation.git", - "reference": "2a59f2376557303e3fa91465ab691abb82945edf" + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/2a59f2376557303e3fa91465ab691abb82945edf", - "reference": "2a59f2376557303e3fa91465ab691abb82945edf", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/03436ededa67c6e83b9b12defac15384cb399dc9", + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -3251,7 +3666,7 @@ "authors": [ { "name": "William Durand", - "email": "william.durand1@gmail.com" + "email": "will+git@drnd.me" } ], "description": "Content Negotiation tools for PHP provided as a standalone library.", @@ -3263,7 +3678,69 @@ "header", "negotiation" ], - "time": "2015-10-01T07:42:40+00:00" + "time": "2017-05-14T17:21:12+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "2.0.13", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0", + "reference": "8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "*", + "php": ">=5.6", + "symfony/finder": ">=2.2" + }, + "require-dev": { + "phpunit/phpunit": ">=4.8.35 <=5.6", + "squizlabs/php_codesniffer": ">=2.7", + "zendframework/zend-form": "<2.8" + }, + "bin": [ + "bin/swagger" + ], + "type": "library", + "autoload": { + "psr-4": { + "Swagger\\": "src" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com", + "homepage": "http://www.zircote.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "http://bfanger.nl" + } + ], + "description": "Swagger-PHP - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "time": "2017-12-01T09:22:05+00:00" } ], "packages-dev": [ @@ -3273,32 +3750,33 @@ "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "72559b08e06b4d56a0cd1d601ee7f18c5f432091" + "reference": "9443b70702b9ea5faf2d360afd2071058ee0fcf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/72559b08e06b4d56a0cd1d601ee7f18c5f432091", - "reference": "72559b08e06b4d56a0cd1d601ee7f18c5f432091", + "url": "https://api.github.com/repos/Behat/Behat/zipball/9443b70702b9ea5faf2d360afd2071058ee0fcf5", + "reference": "9443b70702b9ea5faf2d360afd2071058ee0fcf5", "shasum": "" }, "require": { - "behat/gherkin": "^4.4.4", - "behat/transliterator": "~1.0", - "container-interop/container-interop": "^1.1", + "behat/gherkin": "^4.5.1", + "behat/transliterator": "^1.2", + "container-interop/container-interop": "^1.2", "ext-mbstring": "*", "php": ">=5.3.3", + "psr/container": "^1.0", "symfony/class-loader": "~2.1||~3.0", - "symfony/config": "~2.3||~3.0", - "symfony/console": "~2.5||~3.0", - "symfony/dependency-injection": "~2.1||~3.0", - "symfony/event-dispatcher": "~2.1||~3.0", - "symfony/translation": "~2.3||~3.0", - "symfony/yaml": "~2.1||~3.0" + "symfony/config": "~2.3||~3.0||~4.0", + "symfony/console": "~2.5||~3.0||~4.0", + "symfony/dependency-injection": "~2.1||~3.0||~4.0", + "symfony/event-dispatcher": "~2.1||~3.0||~4.0", + "symfony/translation": "~2.3||~3.0||~4.0", + "symfony/yaml": "~2.1||~3.0||~4.0" }, "require-dev": { "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "~4.5", - "symfony/process": "~2.5|~3.0" + "phpunit/phpunit": "^4.8.36|^6.3", + "symfony/process": "~2.5|~3.0|~4.0" }, "suggest": { "behat/mink-extension": "for integration with Mink testing framework", @@ -3347,20 +3825,20 @@ "symfony", "testing" ], - "time": "2017-02-01 17:00:21" + "time": "2018-01-29 09:59:00" }, { "name": "behat/gherkin", - "version": "v4.4.5", + "version": "v4.5.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", "shasum": "" }, "require": { @@ -3406,20 +3884,20 @@ "gherkin", "parser" ], - "time": "2016-10-30T11:50:56+00:00" + "time": "2017-08-30T11:04:43+00:00" }, { "name": "behat/symfony2-extension", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/Behat/Symfony2Extension.git", - "reference": "cb9ff0ff2f1a901379616d95cc701601d139160c" + "reference": "4eec9ec8dec86c24d82d50b072e693ff2e98ecca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Symfony2Extension/zipball/cb9ff0ff2f1a901379616d95cc701601d139160c", - "reference": "cb9ff0ff2f1a901379616d95cc701601d139160c", + "url": "https://api.github.com/repos/Behat/Symfony2Extension/zipball/4eec9ec8dec86c24d82d50b072e693ff2e98ecca", + "reference": "4eec9ec8dec86c24d82d50b072e693ff2e98ecca", "shasum": "" }, "require": { @@ -3466,29 +3944,33 @@ "framework", "symfony" ], - "time": "2016-01-13T17:06:48+00:00" + "time": "2017-11-15T09:55:17+00:00" }, { "name": "behat/transliterator", - "version": "v1.1.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/Behat/Transliterator.git", - "reference": "868e05be3a9f25ba6424c2dd4849567f50715003" + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/868e05be3a9f25ba6424c2dd4849567f50715003", - "reference": "868e05be3a9f25ba6424c2dd4849567f50715003", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -3506,22 +3988,25 @@ "slug", "transliterator" ], - "time": "2015-09-28T16:26:35+00:00" + "time": "2017-04-04T11:38:05+00:00" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3533,41 +4018,45 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30T15:22:37+00:00" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe", - "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "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", @@ -3575,20 +4064,20 @@ "object", "object graph" ], - "time": "2017-01-26T22:05:40+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "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": { @@ -3629,33 +4118,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": "3.1.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", + "php": "^7.0", + "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\\": [ @@ -3674,24 +4169,24 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30T07:12:33+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.2.1", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.5", + "php": "^5.5 || ^7.0", "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { @@ -3721,7 +4216,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2016-11-25T06:54:22+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/php-diff", @@ -3759,16 +4254,16 @@ }, { "name": "phpspec/phpspec", - "version": "2.5.5", + "version": "2.5.8", "source": { "type": "git", "url": "https://github.com/phpspec/phpspec.git", - "reference": "db395f435eb8e820448e8690de1a8db86d5dd8af" + "reference": "d8a153dcb52f929b448c0bf2cc19c7388951adb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/phpspec/zipball/db395f435eb8e820448e8690de1a8db86d5dd8af", - "reference": "db395f435eb8e820448e8690de1a8db86d5dd8af", + "url": "https://api.github.com/repos/phpspec/phpspec/zipball/d8a153dcb52f929b448c0bf2cc19c7388951adb1", + "reference": "d8a153dcb52f929b448c0bf2cc19c7388951adb1", "shasum": "" }, "require": { @@ -3777,15 +4272,15 @@ "php": ">=5.3.3", "phpspec/php-diff": "~1.0.0", "phpspec/prophecy": "~1.4", - "sebastian/exporter": "~1.0", - "symfony/console": "~2.3|~3.0", + "sebastian/exporter": "~1.0|~2.0|^3.0", + "symfony/console": "~2.3|~3.0,!=3.2.8", "symfony/event-dispatcher": "~2.1|~3.0", "symfony/finder": "~2.1|~3.0", "symfony/process": "^2.6|~3.0", "symfony/yaml": "~2.1|~3.0" }, "require-dev": { - "behat/behat": "^3.0.11", + "behat/behat": "^3.0.11,!=3.3.1", "ciaranmcnulty/versionbasedtestskipper": "^0.2.1", "phpunit/phpunit": "~4.4", "symfony/filesystem": "~2.1|~3.0" @@ -3833,37 +4328,37 @@ "testing", "tests" ], - "time": "2016-12-04T21:03:31+00:00" + "time": "2017-07-29T17:19:38+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.6.2", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", - "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0|^2.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -3896,39 +4391,39 @@ "spy", "stub" ], - "time": "2016-11-21T14:58:47+00:00" + "time": "2018-02-19T10:16:54+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.5", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c19cfc7cbb0e9338d8c469c7eedecc2a428b0971" + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c19cfc7cbb0e9338d8c469c7eedecc2a428b0971", - "reference": "c19cfc7cbb0e9338d8c469c7eedecc2a428b0971", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.1" }, "type": "library", "extra": { @@ -3959,20 +4454,20 @@ "testing", "xunit" ], - "time": "2017-01-20T15:06:43+00:00" + "time": "2017-04-02T07:44:40+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": { @@ -4006,7 +4501,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -4051,25 +4546,30 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -4091,33 +4591,33 @@ "keywords": [ "timer" ], - "time": "2016-05-12T18:03:57+00:00" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.9", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4140,20 +4640,20 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15T14:06:22+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", - "version": "5.6.4", + "version": "5.7.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4ddb822f1de421b4cadb47570a525fd7d9359493" + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4ddb822f1de421b4cadb47570a525fd7d9359493", - "reference": "4ddb822f1de421b4cadb47570a525fd7d9359493", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", "shasum": "" }, "require": { @@ -4164,26 +4664,24 @@ "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "sebastian/version": "^1.0.6|^2.0.1", + "symfony/yaml": "~2.1|~3.0|~4.0" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "sebastian/object-enumerator": "1.0.1", - "sebastian/recursion-context": "1.0.3 || 1.0.4" + "phpdocumentor/reflection-docblock": "3.0.2" }, "require-dev": { "ext-pdo": "*" @@ -4198,7 +4696,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -4224,20 +4722,20 @@ "testing", "xunit" ], - "time": "2016-11-18T09:50:51+00:00" + "time": "2018-02-01T05:50:59+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", - "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", "shasum": "" }, "require": { @@ -4283,27 +4781,27 @@ "mock", "xunit" ], - "time": "2016-12-08T20:27:08+00:00" + "time": "2017-06-30T09:13:00+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -4328,7 +4826,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13T06:45:14+00:00" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", @@ -4396,23 +4894,23 @@ }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -4444,7 +4942,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08T07:14:41+00:00" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -4498,21 +4996,21 @@ }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", @@ -4521,7 +5019,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4561,7 +5059,7 @@ "export", "exporter" ], - "time": "2016-06-17T09:04:28+00:00" + "time": "2016-11-19T08:54:04+00:00" }, { "name": "sebastian/global-state", @@ -4616,21 +5114,21 @@ }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", "shasum": "" }, "require": { "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "phpunit/phpunit": "~5" @@ -4638,7 +5136,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4658,20 +5156,20 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28T13:25:10+00:00" + "time": "2017-02-18T15:18:39+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { @@ -4683,7 +5181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4711,7 +5209,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11T19:50:13+00:00" + "time": "2016-11-19T07:33:16+00:00" }, { "name": "sebastian/resource-operations", @@ -4800,16 +5298,16 @@ }, { "name": "sensio/generator-bundle", - "version": "v3.1.2", + "version": "v3.1.7", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "ec278c0bd530edf155c4a00900577b5cb80f559e" + "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/ec278c0bd530edf155c4a00900577b5cb80f559e", - "reference": "ec278c0bd530edf155c4a00900577b5cb80f559e", + "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65", + "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65", "shasum": "" }, "require": { @@ -4821,7 +5319,9 @@ }, "require-dev": { "doctrine/orm": "~2.4", - "symfony/doctrine-bridge": "~2.7|~3.0" + "symfony/doctrine-bridge": "~2.7|~3.0", + "symfony/filesystem": "~2.7|~3.0", + "symfony/phpunit-bridge": "^3.3" }, "type": "symfony-bundle", "extra": { @@ -4848,32 +5348,43 @@ } ], "description": "This bundle generates code for you", - "time": "2016-12-05T16:01:19+00:00" + "time": "2017-12-07T15:36:41+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v2.8.17", + "version": "v3.4.5", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "6b9436c6f6fc474335871bb9c90743606d967806" + "reference": "32b06d2b0babf3216e55acfce42249321a304f03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/6b9436c6f6fc474335871bb9c90743606d967806", - "reference": "6b9436c6f6fc474335871bb9c90743606d967806", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/32b06d2b0babf3216e55acfce42249321a304f03", + "reference": "32b06d2b0babf3216e55acfce42249321a304f03", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, "suggest": { + "ext-zip": "Zip support is required when using bin/simple-phpunit", "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" }, + "bin": [ + "bin/simple-phpunit" + ], "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.4-dev" + }, + "thanks": { + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" } }, "autoload": { @@ -4903,20 +5414,20 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2017-01-21T16:40:50+00:00" + "time": "2018-02-14T23:24:28+00:00" }, { "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": { @@ -4953,7 +5464,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..48d0aa2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' + +services: + + db_dev: + image: mysql:5.7.21 + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_DATABASE=db_dev + - MYSQL_USER=dbuser + - MYSQL_PASSWORD=dbpassword + ports: + - "3306:3306" \ No newline at end of file diff --git a/src/AppBundle/Command/SwaggerDocblockConvertCommand.php b/src/AppBundle/Command/SwaggerDocblockConvertCommand.php new file mode 100644 index 0000000..4e7133c --- /dev/null +++ b/src/AppBundle/Command/SwaggerDocblockConvertCommand.php @@ -0,0 +1,187 @@ + + * @author Guilhem Niot + */ +class SwaggerDocblockConvertCommand extends ContainerAwareCommand +{ + protected function configure() + { + $this + ->setDescription('') + ->setName('api:doc:convert') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $extractor = $this->getContainer()->get('nelmio_api_doc.extractor.api_doc_extractor'); + $apiDocs = $extractor->extractAnnotations($extractor->getRoutes()); + + foreach ($apiDocs as $annotation) { + /** @var ApiDoc $apiDoc */ + $apiDoc = $annotation['annotation']; + + $refl = $extractor->getReflectionMethod($apiDoc->getRoute()->getDefault('_controller')); + + $this->rewriteClass($refl->getFileName(), $refl, $apiDoc); + } + } + + /** + * Rewrite class with correct apidoc. + */ + private function rewriteClass(string $path, \ReflectionMethod $method, ApiDoc $apiDoc) + { + echo "Processing $path::{$method->name}\n"; + $code = file_get_contents($path); + $old = $this->locateNelmioAnnotation($code, $method->name); + + $code = substr_replace($code, $this->renderSwaggerAnnotation($apiDoc, $method), $old['start'], $old['length']); + $code = str_replace('use Nelmio\ApiDocBundle\Annotation\ApiDoc;', "use Nelmio\ApiDocBundle\Annotation\Operation;\nuse Nelmio\ApiDocBundle\Annotation\Model;\nuse Swagger\Annotations as SWG;", $code); + + file_put_contents($path, $code); + } + + private function renderSwaggerAnnotation(ApiDoc $apiDoc, \ReflectionMethod $method): string + { + $info = $apiDoc->toArray(); + if ($apiDoc->getResource()) { + throw new \RuntimeException('implement me'); + } + $path = str_replace('.{_format}', '', $apiDoc->getRoute()->getPath()); + + $annotation = '@Operation( + * tags={"'.$apiDoc->getSection().'"}, + * summary="'.$this->escapeQuotes($apiDoc->getDescription()).'"'; + + foreach ($apiDoc->getFilters() as $name => $parameter) { + $description = array_key_exists('description', $parameter) && null !== $parameter['description'] + ? $this->escapeQuotes($parameter['description']) + : 'todo'; + + $annotation .= ', + * @SWG\Parameter( + * name="'.$name.'", + * in="query", + * description="'.$description.'", + * required='.(array_key_exists($name, $apiDoc->getRequirements()) ? 'true' : 'false').', + * type="'.$this->determineDataType($parameter).'" + * )'; + } + + // Put parameters for POST requests into formData, as Swagger cannot handle more than one body parameter + $in = 'POST' === $apiDoc->getMethod() + ? 'formData' + : 'body'; + + foreach ($apiDoc->getParameters() as $name => $parameter) { + $description = array_key_exists('description', $parameter) + ? $this->escapeQuotes($parameter['description']) + : 'todo'; + + $annotation .= ', + * @SWG\Parameter( + * name="'.$name.'", + * in="'.$in.'", + * description="'.$description.'", + * required='.(array_key_exists($name, $apiDoc->getRequirements()) ? 'true' : 'false').', + * type="'.$this->determineDataType($parameter).'"'; + + if ('POST' !== $apiDoc->getMethod()) { + $annotation .= ', + * schema=""'; + } + + $annotation .= ' + * )'; + } + + if (array_key_exists('statusCodes', $info)) { + $responses = $info['statusCodes']; + foreach ($responses as $code => $description) { + $responses[$code] = reset($description); + } + } else { + $responses = [200 => 'Returned when successful']; + } + + $responseMap = $apiDoc->getResponseMap(); + foreach ($responses as $code => $description) { + $annotation .= ", + * @SWG\\Response( + * response=\"$code\", + * description=\"{$this->escapeQuotes($description)}\""; + if (200 === $code && isset($responseMap[$code]['class'])) { + $model = $responseMap[$code]['class']; + $annotation .= ", + * @Model(type=\"$model\")"; + } + $annotation .= ' + * )'; + } + + $annotation .= ' + * ) + *'; + + return $annotation; + } + + /** + * @return array with `start` position and `length` + */ + private function locateNelmioAnnotation(string $code, string $methodName): array + { + $position = strpos($code, "tion $methodName("); + if (false === $position) { + throw new \RuntimeException("Method $methodName not found in controller."); + } + + $docstart = strrpos(substr($code, 0, $position), '@ApiDoc'); + if (false === $docstart) { + throw new \RuntimeException("Method $methodName has no @ApiDoc annotation around\n".substr($code, $position - 200, 150)); + } + $docend = strpos($code, '* )', $docstart) + 3; + + return [ + 'start' => $docstart, + 'length' => $docend - $docstart, + ]; + } + + private function escapeQuotes(string $str): string + { + $lines = []; + foreach (explode("\n", $str) as $line) { + $lines[] = trim($line, ' *'); + } + + return str_replace('"', '""', implode(' ', $lines)); + } + + private function determineDataType(array $parameter): string + { + $dataType = isset($parameter['dataType']) ? $parameter['dataType'] : 'string'; + $transform = [ + 'float' => 'number', + 'datetime' => 'string', + ]; + if (array_key_exists($dataType, $transform)) { + $dataType = $transform[$dataType]; + } + + return $dataType; + } +} \ No newline at end of file diff --git a/src/AppBundle/Controller/AccountsController.php b/src/AppBundle/Controller/AccountsController.php index 04b63e1..95d3bc1 100755 --- a/src/AppBundle/Controller/AccountsController.php +++ b/src/AppBundle/Controller/AccountsController.php @@ -11,7 +11,9 @@ use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; use JMS\Serializer\SerializationContext; -use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\Operation; +use Nelmio\ApiDocBundle\Annotation\Model; +use Swagger\Annotations as SWG; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\HttpFoundation\Response; @@ -23,14 +25,20 @@ class AccountsController extends FOSRestController implements ClassResourceInter /** * Get a single account. * - * @ApiDoc( - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Get a single account.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $accountId the account id * * @throws NotFoundHttpException when does not exist @@ -50,14 +58,20 @@ public function getAction($accountId) /** * Gets a collection of the given User's Accounts. * - * @ApiDoc( - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Gets a collection of the given User's Accounts.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @throws NotFoundHttpException when does not exist * * @Annotations\View(serializerGroups={ @@ -78,15 +92,20 @@ public function cgetAction() /** * Creates a new Account * - * @ApiDoc( - * input = "AppBundle\Form\Type\AccountFormType", - * output = "AppBundle\Entity\Account", - * statusCodes={ - * 201="Returned when a new Account has been successfully created", - * 400="Returned when the posted data is invalid" - * } + * @Operation( + * tags={""}, + * summary="Creates a new Account", + * @SWG\Response( + * response="201", + * description="Returned when a new Account has been successfully created" + * ), + * @SWG\Response( + * response="400", + * description="Returned when the posted data is invalid" + * ) * ) * + * * @param Request $request * @return View */ @@ -101,7 +120,7 @@ public function postAction(Request $request) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts', $routeOptions, Response::HTTP_CREATED); + return View::createRouteRedirect('get_accounts', $routeOptions, Response::HTTP_CREATED); } catch (InvalidFormException $e) { @@ -113,21 +132,28 @@ public function postAction(Request $request) /** * Update existing Account from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\AccountType", - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Update existing Account from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $id the account id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -147,7 +173,7 @@ public function patchAction(Request $request, $id) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); } catch (InvalidFormException $e) { @@ -159,21 +185,28 @@ public function patchAction(Request $request, $id) /** * Replaces existing Account from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\AccountType", - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Replaces existing Account from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $id the account id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -193,7 +226,7 @@ public function putAction(Request $request, $id) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); } catch (InvalidFormException $e) { @@ -205,14 +238,20 @@ public function putAction(Request $request, $id) /** * Deletes a specific Account by ID * - * @ApiDoc( - * description="Deletes an existing Account", - * statusCodes={ - * 204="Returned when an existing Account has been successfully deleted", - * 403="Returned when trying to delete a non existent Account" - * } + * @Operation( + * tags={""}, + * summary="Deletes an existing Account", + * @SWG\Response( + * response="204", + * description="Returned when an existing Account has been successfully deleted" + * ), + * @SWG\Response( + * response="403", + * description="Returned when trying to delete a non existent Account" + * ) * ) * + * * @param int $id the account id * @return View */ diff --git a/src/AppBundle/Controller/FilesController.php b/src/AppBundle/Controller/FilesController.php index 52404e4..7468772 100644 --- a/src/AppBundle/Controller/FilesController.php +++ b/src/AppBundle/Controller/FilesController.php @@ -8,7 +8,9 @@ use FOS\RestBundle\View\RouteRedirectView; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; -use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\Operation; +use Nelmio\ApiDocBundle\Annotation\Model; +use Swagger\Annotations as SWG; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\HttpFoundation\Response; @@ -24,14 +26,20 @@ class FilesController extends FOSRestController implements ClassResourceInterfac /** * Get a single file. * - * @ApiDoc( - * output = "AppBundle\Entity\File", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Get a single file.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $accountId the Account id * @param int $fileId the File id * @@ -49,14 +57,20 @@ public function getAction($accountId, $fileId) /** * Gets a collection of the given User's Files. * - * @ApiDoc( - * output = "AppBundle\Entity\File", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Gets a collection of the given User's Files.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $accountId the Account id * * @Annotations\View(serializerGroups={ "files_all", "accounts_summary" }) @@ -80,15 +94,27 @@ public function cgetAction($accountId) /** * Creates a new File * - * @ApiDoc( - * input = "AppBundle\Form\Type\FileType", - * output = "AppBundle\Entity\File", - * statusCodes={ - * 201="Returned when a new File has been successfully created", - * 400="Returned when the posted data is invalid" - * } + * @Operation( + * tags={""}, + * summary="Creates a new File", + * @SWG\Parameter( + * name="filePath", + * in="formData", + * description="", + * required=false, + * type="file" + * ), + * @SWG\Response( + * response="201", + * description="Returned when a new File has been successfully created" + * ), + * @SWG\Response( + * response="400", + * description="Returned when the posted data is invalid" + * ) * ) * + * * @param Request $request * @param int $accountId the account id * @@ -125,22 +151,29 @@ public function postAction(Request $request, $accountId) /** * Update existing File from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\FileType", - * output = "AppBundle\Entity\File", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Update existing File from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $accountId the account id * @param int $fileId the file id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -170,29 +203,36 @@ public function patchAction(Request $request, $accountId, $fileId) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); } /** * Replaces existing File from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\FileType", - * output = "AppBundle\Entity\File", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Replaces existing File from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $accountId the account id * @param int $fileId the file id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -222,21 +262,27 @@ public function putAction(Request $request, $accountId, $fileId) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); } /** * Deletes a specific File by ID * - * @ApiDoc( - * description="Deletes an existing File", - * statusCodes={ - * 204 = "Returned when an existing File has been successfully deleted", - * 403 = "Returned when trying to delete a non existent File" - * } + * @Operation( + * tags={""}, + * summary="Deletes an existing File", + * @SWG\Response( + * response="204", + * description="Returned when an existing File has been successfully deleted" + * ), + * @SWG\Response( + * response="403", + * description="Returned when trying to delete a non existent File" + * ) * ) * + * * @param int $accountId the account id * @param int $fileId the file id * diff --git a/src/AppBundle/Controller/UsersController.php b/src/AppBundle/Controller/UsersController.php index 8196404..092f4a7 100644 --- a/src/AppBundle/Controller/UsersController.php +++ b/src/AppBundle/Controller/UsersController.php @@ -6,10 +6,11 @@ use AppBundle\Handler\UserHandler; use FOS\RestBundle\View\View; use FOS\RestBundle\Controller\Annotations; -use FOS\RestBundle\View\RouteRedirectView; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; -use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\Operation; +use Nelmio\ApiDocBundle\Annotation\Model; +use Swagger\Annotations as SWG; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\HttpFoundation\Response; @@ -26,14 +27,20 @@ class UsersController extends FOSRestController implements ClassResourceInterfac /** * Get a single User. * - * @ApiDoc( - * output = "AppBundle\Entity\User", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Get a single User.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $id the user id * * @throws NotFoundHttpException when does not exist @@ -44,21 +51,22 @@ public function getAction($id) { $user = $this->getUserHandler()->get($id); - $view = $this->view($user); - - return $view; + return $this->view($user); } /** * Gets a collection of Users. * - * @ApiDoc( - * output = "AppBundle\Entity\User", - * statusCodes = { - * 405 = "Method not allowed" - * } + * @Operation( + * tags={""}, + * summary="Gets a collection of Users.", + * @SWG\Response( + * response="405", + * description="Method not allowed" + * ) * ) * + * * @throws MethodNotAllowedHttpException * * @return View @@ -71,21 +79,32 @@ public function cgetAction() /** * Update existing User from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\UserType", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 401 = "Returned when provided password is incorrect", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Update existing User from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="401", + * description="Returned when provided password is incorrect" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $id the user id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -108,7 +127,7 @@ public function patchAction(Request $request, $id) '_format' => $request->get('_format') ); - return $this->routeRedirectView('get_users', $routeOptions, $statusCode); + return View::createRouteRedirect('get_users', $routeOptions, $statusCode); } catch (InvalidFormException $e) { diff --git a/src/AppBundle/Features/Context/RestApiContext.php b/src/AppBundle/Features/Context/RestApiContext.php index 2ef5e78..55fe894 100644 --- a/src/AppBundle/Features/Context/RestApiContext.php +++ b/src/AppBundle/Features/Context/RestApiContext.php @@ -3,45 +3,41 @@ namespace AppBundle\Features\Context; use Behat\Behat\Context\Context; +use Behat\Behat\Hook\Scope\BeforeScenarioScope; use Behat\Gherkin\Node\PyStringNode; use Behat\Gherkin\Node\TableNode; +use Doctrine\ORM\EntityManagerInterface; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\RequestException; -use GuzzleHttp\Post\PostFile; +use GuzzleHttp\Psr7; use PHPUnit_Framework_Assert as Assertions; -use Sanpi\Behatch\Json\JsonInspector; -use Sanpi\Behatch\Json\JsonSchema; use Symfony\Component\HttpFoundation\Request; /** + * @TODO - fix all the errors etc - quick fix for api doc branch + * * Class RestApiContext * @package AppBundle\Features\Context */ class RestApiContext implements Context { - /** - * @var string - */ - private $authorization; - /** * @var ClientInterface */ protected $client; /** - * @var array + * @var string */ - private $headers = array(); + private $authorization; /** - * @var \GuzzleHttp\Message\RequestInterface + * @var array */ + private $headers = []; + private $request; - /** - * @var \GuzzleHttp\Message\ResponseInterface - */ private $response; /** @@ -49,19 +45,32 @@ class RestApiContext implements Context */ private $placeHolders = array(); /** - * @var string + * @var */ private $dummyDataPath; /** * RestApiContext constructor. - * @param ClientInterface $client - * @param string $dummyDataPath + * + * @param ClientInterface $client + * @param null $dummyDataPath + * @param EntityManagerInterface $em */ public function __construct(ClientInterface $client, $dummyDataPath = null) { $this->client = $client; $this->dummyDataPath = $dummyDataPath; + + echo "RestApiContext base url: " . $this->client->getConfig('base_uri') . "\n\n"; + + // strangeness with guzzle? + $this->addHeader('accept', '*/*'); + } + + /** @BeforeScenario */ + public function gatherContexts(BeforeScenarioScope $scope) + { + $environment = $scope->getEnvironment(); } /** @@ -86,28 +95,58 @@ public function iAmAuthenticatingAs($username, $password) * @param string $password * * @Given /^I am successfully logged in with username: "([^"]*)", and password: "([^"]*)"$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iAmSuccessfullyLoggedInWithUsernameAndPassword($username, $password) { - $response = $this->client->post('login', [ - 'json' => [ - 'username' => $username, - 'password' => $password, - ] - ]); + try { + + $this->iSendARequest('POST', 'login', [ + 'json' => [ + 'username' => $username, + 'password' => $password, + ] + ]); + + $this->theResponseCodeShouldBe(200); - \PHPUnit_Framework_Assert::assertEquals(200, $response->getStatusCode()); + $responseBody = json_decode($this->response->getBody(), true); + $this->addHeader('Authorization', 'Bearer ' . $responseBody['token']); - $responseBody = json_decode($response->getBody(), true); - $this->addHeader('Authorization', 'Bearer ' . $responseBody['token']); + } catch (RequestException $e) { + + echo Psr7\str($e->getRequest()); + + if ($e->hasResponse()) { + echo Psr7\str($e->getResponse()); + } + + } } /** - * @Given when consuming the endpoint I use the :header of :value + * @When I am logged out */ - public function whenConsumingTheEndpointIUseTheOf($header, $value) + public function iAmLoggedOut() { - $this->client->setDefaultOption($header, $value); + $this->removeHeader('Authorization'); + } + + + /** + * @Then I impersonate ":username" + */ + public function iImpersonate($username) + { + $this->iSetHeaderWithValue('x-switch-user', $username); + } + + /** + * @Then I stop impersonation + */ + public function iStopImpersonation() + { + $this->iHaveForgottenToSetThe('x-switch-user'); } /** @@ -115,7 +154,7 @@ public function whenConsumingTheEndpointIUseTheOf($header, $value) */ public function iHaveForgottenToSetThe($header) { - $this->client->setDefaultOption($header, null); + $this->addHeader($header, null); } /** @@ -136,18 +175,23 @@ public function iSetHeaderWithValue($name, $value) * * @param string $method request method * @param string $url relative url + * @param array $data * * @When /^(?:I )?send a "([A-Z]+)" request to "([^"]+)"$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ - public function iSendARequest($method, $url) + public function iSendARequest($method, $url, array $data = []) { $url = $this->prepareUrl($url); - $this->request = $this->getClient()->createRequest($method, $url); - if (!empty($this->headers)) { - $this->request->addHeaders($this->headers); - } + $data = $this->prepareData($data); - $this->sendRequest(); + try { + $this->response = $this->getClient()->request($method, $url, $data); + } catch (RequestException $e) { + if ($e->hasResponse()) { + $this->response = $e->getResponse(); + } + } } /** @@ -158,6 +202,7 @@ public function iSendARequest($method, $url) * @param TableNode $post table of post values * * @When /^(?:I )?send a ([A-Z]+) request to "([^"]+)" with values:$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iSendARequestWithValues($method, $url, TableNode $post) { @@ -171,7 +216,7 @@ public function iSendARequestWithValues($method, $url, TableNode $post) $bodyOption = array( 'body' => json_encode($fields), ); - $this->request = $this->getClient()->createRequest($method, $url, $bodyOption); + $this->request = $this->getClient()->request($method, $url, $bodyOption); if (!empty($this->headers)) { $this->request->addHeaders($this->headers); } @@ -187,22 +232,18 @@ public function iSendARequestWithValues($method, $url, TableNode $post) * @param PyStringNode $string request body * * @When /^(?:I )?send a "([A-Z]+)" request to "([^"]+)" with body:$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iSendARequestWithBody($method, $url, PyStringNode $string) { $url = $this->prepareUrl($url); $string = $this->replacePlaceHolder(trim($string)); - $this->request = $this->getClient()->createRequest( + $this->request = $this->iSendARequest( $method, $url, - array( - 'headers' => $this->getHeaders(), - 'body' => $string, - ) + [ 'body' => $string, ] ); - - $this->sendRequest(); } /** @@ -213,6 +254,7 @@ public function iSendARequestWithBody($method, $url, PyStringNode $string) * @param PyStringNode $body request body * * @When /^(?:I )?send a "([A-Z]+)" request to "([^"]+)" with form data:$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iSendARequestWithFormData($method, $url, PyStringNode $body) { @@ -221,7 +263,7 @@ public function iSendARequestWithFormData($method, $url, PyStringNode $body) $fields = array(); parse_str(implode('&', explode("\n", $body)), $fields); - $this->request = $this->getClient()->createRequest($method, $url); + $this->request = $this->getClient()->request($method, $url, []); /** @var \GuzzleHttp\Post\PostBodyInterface $requestBody */ $requestBody = $this->request->getBody(); foreach ($fields as $key => $value) { @@ -233,44 +275,49 @@ public function iSendARequestWithFormData($method, $url, PyStringNode $body) /** * @When /^(?:I )?send a multipart "([A-Z]+)" request to "([^"]+)" with form data:$/ + * @param $method + * @param $url + * @param TableNode $post + * + * @throws \GuzzleHttp\Exception\GuzzleException + * @throws \DomainException */ public function iSendAMultipartRequestToWithFormData($method, $url, TableNode $post) { $url = $this->prepareUrl($url); - $this->request = $this->getClient()->createRequest($method, $url); + $fileData = $post->getColumnsHash()[0]; - $data = $post->getColumnsHash()[0]; - - $hasFile = false; - - if (array_key_exists('filePath', $data)) { - $filePath = $this->dummyDataPath . $data['filePath']; - unset($data['filePath']); - $hasFile = true; + if ( ! array_key_exists('filePath', $fileData)) { + throw new \DomainException('Multipart requests require a `filePath` Behat table node'); } + $filePath = $this->dummyDataPath . $fileData['filePath']; + unset($fileData['filePath']); + + $data['multipart'] = [ + [ + 'name' => 'name', // symfony form field name + 'contents' => $fileData['name'], + ], + [ + 'name' => 'uploadedFile', // symfony form field name + 'contents' => fopen($filePath, 'rb'), + ] + ]; - /** @var \GuzzleHttp\Post\PostBodyInterface $requestBody */ - $requestBody = $this->request->getBody(); - foreach ($data as $key => $value) { - $requestBody->setField($key, $value); - } - - - if ($hasFile) { - $file = fopen($filePath, 'rb'); - $postFile = new PostFile('uploadedFile', $file); - $requestBody->addFile($postFile); - } - + // remove the Content-Type header here as it will have been set to `application/json` during the successful + // login, that preceeds this step in the Behat Background setup + $this->removeHeader('Content-Type'); + $data = $this->prepareData($data); - if (!empty($this->headers)) { - $this->request->addHeaders($this->headers); + try { + $this->response = $this->getClient()->request($method, $url, $data); + } catch (RequestException $e) { + if ($e->hasResponse()) { + $this->response = $e->getResponse(); + } } - $this->request->setHeader('Content-Type', 'multipart/form-data'); - - $this->sendRequest(); } /** @@ -282,8 +329,8 @@ public function iSendAMultipartRequestToWithFormData($method, $url, TableNode $p */ public function theResponseCodeShouldBe($code) { - $expected = intval($code); - $actual = intval($this->response->getStatusCode()); + $expected = (int)$code; + $actual = (int)$this->response->getStatusCode(); Assertions::assertSame($expected, $actual); } @@ -292,7 +339,7 @@ public function theResponseCodeShouldBe($code) * * @param string $text * - * @Then /^(?:the )?response should contain "([^"]*)"$/ + * @Then /^(?:the )?response should contain "((?:[^"]|\\")*)"$/ */ public function theResponseShouldContain($text) { @@ -329,7 +376,7 @@ public function theResponseShouldNotContain($text) public function theResponseShouldContainJson(PyStringNode $jsonString) { $etalon = json_decode($this->replacePlaceHolder($jsonString->getRaw()), true); - $actual = $this->response->json(); + $actual = json_decode($this->response->getBody(), true); if (null === $etalon) { throw new \RuntimeException( @@ -351,13 +398,10 @@ public function theResponseShouldContainJson(PyStringNode $jsonString) */ public function printResponse() { - $request = $this->request; $response = $this->response; echo sprintf( - "%s %s => %d:\n%s", - $request->getMethod(), - $request->getUrl(), + "%d:\n%s", $response->getStatusCode(), $response->getBody() ); @@ -399,11 +443,16 @@ public function setPlaceHolder($key, $value) } /** - * @Then the I follow the link in the Location response header + * @Then I follow the link in the Location response header */ - public function theIFollowTheLinkInTheLocationResponseHeader() + public function iFollowTheLinkInTheLocationResponseHeader() { - $location = $this->response->getHeader('Location'); + $location = $this->response->getHeader('Location')[0]; + + if ( ! $this->hasHeader('Authorization')) { + $responseBody = json_decode($this->response->getBody(), true); + $this->addHeader('Authorization', 'Bearer ' . $responseBody['token']); + } $this->iSendARequest(Request::METHOD_GET, $location); } @@ -415,7 +464,7 @@ public function theJsonShouldBeValidAccordingToThisSchema(PyStringNode $schema) { $inspector = new JsonInspector('javascript'); - $json = new \Sanpi\Behatch\Json\Json(json_encode($this->response->json())); + $json = new \Sanpi\Behatch\Json\Json($this->response->getBody()); $inspector->validate( $json, @@ -427,10 +476,11 @@ public function theJsonShouldBeValidAccordingToThisSchema(PyStringNode $schema) * Checks, that given JSON node is equal to given value * * @Then the JSON node :node should be equal to :text + * @throws \Exception */ public function theJsonNodeShouldBeEqualTo($node, $text) { - $json = new \Sanpi\Behatch\Json\Json(json_encode($this->response->json())); + $json = new \Sanpi\Behatch\Json\Json($this->response->getBody()); $inspector = new JsonInspector('javascript'); @@ -443,6 +493,43 @@ public function theJsonNodeShouldBeEqualTo($node, $text) } } + /** + * @Then the :selector date should be approximately :date + * @throws \InvalidArgumentException + * @throws \PHPUnit_Framework_AssertionFailedError + */ + public function theDateShouldBeApproximately($selector, $date) + { + $responseBody = $this->getResponseBody(); + $dateTimeFromResponse = new \DateTime($responseBody[$selector]); + $expectedDateTime = new \DateTime($date); + + Assertions::assertTrue( + $expectedDateTime->diff($dateTimeFromResponse)->format('%s') < 5 + ); + } + + /** + * Checks whether the response content is equal to given text + * + * @Then the response should be equal to + */ + public function theResponseShouldBeEqualTo(PyStringNode $expected) + { + $expected = str_replace('\\"', '"', $expected); + $actual = $actual = (string) $this->response->getBody(); + $message = "The string '$expected' is not equal to the response of the current page"; + Assertions::assertEquals($expected, $actual, $message); + } + + /** + * @return array + */ + protected function getResponseBody() + { + return json_decode($this->response->getBody(), true); + } + /** * Replaces placeholders in provided text. * @@ -477,15 +564,20 @@ protected function getHeaders() */ protected function addHeader($name, $value) { - if (isset($this->headers[$name])) { - if (!is_array($this->headers[$name])) { - $this->headers[$name] = array($this->headers[$name]); - } - - $this->headers[$name][] = $value; - } else { + if ( ! $this->hasHeader($name)) { $this->headers[$name] = $value; } + + if (!is_array($this->headers[$name])) { + $this->headers[$name] = [$this->headers[$name]]; + } + + $this->headers[$name] = $value; + } + + protected function hasHeader($name) + { + return isset($this->headers[$name]); } /** @@ -500,22 +592,6 @@ protected function removeHeader($headerName) } } - /** - * - */ - private function sendRequest() - { - try { - $this->response = $this->getClient()->send($this->request); - } catch (RequestException $e) { - $this->response = $e->getResponse(); - - if (null === $this->response) { - throw $e; - } - } - } - /** * @return ClientInterface */ @@ -527,4 +603,16 @@ private function getClient() return $this->client; } -} + + private function prepareData($data) + { + if (!empty($this->headers)) { + $data = array_replace( + $data, + ["headers" => $this->headers] + ); + } + + return $data; + } +} \ No newline at end of file diff --git a/src/AppBundle/Features/account.feature b/src/AppBundle/Features/account.feature index 3e8b2f2..f88bddd 100644 --- a/src/AppBundle/Features/account.feature +++ b/src/AppBundle/Features/account.feature @@ -17,7 +17,7 @@ Feature: Manage Account data through API | a2 | test account | u2,u1 | | a3 | an empty account | | And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" + And I set header "Content-Type" with value "application/json" Scenario: User can GET a Collection of their Account objects diff --git a/src/AppBundle/Features/developer_experience.feature b/src/AppBundle/Features/developer_experience.feature index fbf24a1..729fafc 100644 --- a/src/AppBundle/Features/developer_experience.feature +++ b/src/AppBundle/Features/developer_experience.feature @@ -11,7 +11,7 @@ Feature: To improve the developer experience of our API | u1 | peter | peter@test.com | testpass | | u2 | john | john@test.org | johnpass | And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" + And I set header "Content-Type" with value "application/json" Scenario: User must have the right Content-type diff --git a/src/AppBundle/Features/file.feature b/src/AppBundle/Features/file.feature index 2b366a2..f0ba08e 100644 --- a/src/AppBundle/Features/file.feature +++ b/src/AppBundle/Features/file.feature @@ -21,7 +21,7 @@ Feature: Manage uploaded Files through API | a2 | account2 | u1 | f3 | | a3 | account3 | u2 | f2 | And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" + And I set header "Content-Type" with value "application/json" Scenario: User can GET a Collection of their Files objects diff --git a/src/AppBundle/Features/user.feature b/src/AppBundle/Features/user.feature index 26feaf2..ff4872e 100644 --- a/src/AppBundle/Features/user.feature +++ b/src/AppBundle/Features/user.feature @@ -13,18 +13,18 @@ Feature: Manage Users data via the RESTful API # And there are Accounts with the following details: # | uid | name | users | # | a1 | account1 | u1 | + And I set header "Content-Type" with value "application/json" And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" Scenario: User cannot GET a Collection of User objects When I send a "GET" request to "/users" Then the response code should be 405 - Scenario: User can GET their personal data by their unique ID When I send a "GET" request to "/users/u1" Then the response code should be 200 + # step may fail depending on web server config And the response header "Content-Type" should be equal to "application/json; charset=utf-8" And the response should contain json: """ @@ -45,7 +45,7 @@ Feature: Manage Users data via the RESTful API When I send a "GET" request to "/users/u100" Then the response code should be 403 - + @t Scenario: User cannot POST to the Users collection When I send a "POST" request to "/users" Then the response code should be 405 diff --git a/src/AppBundle/Security/Authorization/Voter/AccountVoter.php b/src/AppBundle/Security/Authorization/Voter/AccountVoter.php index d30961f..99a2111 100755 --- a/src/AppBundle/Security/Authorization/Voter/AccountVoter.php +++ b/src/AppBundle/Security/Authorization/Voter/AccountVoter.php @@ -13,9 +13,6 @@ */ class AccountVoter implements VoterInterface { - /** - * - */ const VIEW = 'view'; /** @@ -24,9 +21,7 @@ class AccountVoter implements VoterInterface */ public function supportsAttribute($attribute) { - return in_array($attribute, array( - self::VIEW, - )); + return self::VIEW === $attribute; } /** @@ -35,7 +30,7 @@ public function supportsAttribute($attribute) */ public function supportsClass($class) { - $supportedClass = 'AppBundle\Model\AccountInterface'; + $supportedClass = AccountInterface::class; return $supportedClass === $class || is_subclass_of($class, $supportedClass); } @@ -48,6 +43,10 @@ public function supportsClass($class) */ public function vote(TokenInterface $token, $requestedAccount, array $attributes) { + if (null === $requestedAccount) { + return VoterInterface::ACCESS_DENIED; + } + // check if class of this object is supported by this voter if (!$this->supportsClass(get_class($requestedAccount))) { return VoterInterface::ACCESS_ABSTAIN; diff --git a/src/AppBundle/Security/Authorization/Voter/FileVoter.php b/src/AppBundle/Security/Authorization/Voter/FileVoter.php index 1a93060..5da5c8d 100644 --- a/src/AppBundle/Security/Authorization/Voter/FileVoter.php +++ b/src/AppBundle/Security/Authorization/Voter/FileVoter.php @@ -10,9 +10,6 @@ class FileVoter implements VoterInterface { - /** - * - */ const VIEW = 'view'; /** @@ -21,9 +18,7 @@ class FileVoter implements VoterInterface */ public function supportsAttribute($attribute) { - return in_array($attribute, array( - self::VIEW, - )); + return self::VIEW === $attribute; } /** @@ -32,7 +27,7 @@ public function supportsAttribute($attribute) */ public function supportsClass($class) { - $supportedClass = 'AppBundle\Model\FileInterface'; + $supportedClass = FileInterface::class; return $supportedClass === $class || is_subclass_of($class, $supportedClass); } @@ -45,6 +40,10 @@ public function supportsClass($class) */ public function vote(TokenInterface $token, $requestedFile, array $attributes) { + if (null === $requestedFile) { + return VoterInterface::ACCESS_DENIED; + } + // check if class of this object is supported by this voter if (!$this->supportsClass(get_class($requestedFile))) { return VoterInterface::ACCESS_ABSTAIN; diff --git a/src/AppBundle/Security/Authorization/Voter/UserVoter.php b/src/AppBundle/Security/Authorization/Voter/UserVoter.php index 6786648..42ada5f 100644 --- a/src/AppBundle/Security/Authorization/Voter/UserVoter.php +++ b/src/AppBundle/Security/Authorization/Voter/UserVoter.php @@ -4,6 +4,7 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; +use AppBundle\Model\UserInterface; class UserVoter implements VoterInterface { @@ -11,20 +12,22 @@ class UserVoter implements VoterInterface public function supportsAttribute($attribute) { - return in_array($attribute, array( - self::VIEW, - )); + return self::VIEW == $attribute; } public function supportsClass($class) { - $supportedClass = 'AppBundle\Model\UserInterface'; + $supportedClass = UserInterface::class; return $supportedClass === $class || is_subclass_of($class, $supportedClass); } public function vote(TokenInterface $token, $requestedUser, array $attributes) { + if (null === $requestedUser) { + return VoterInterface::ACCESS_DENIED; + } + // check if class of this object is supported by this voter if (!$this->supportsClass(get_class($requestedUser))) { return VoterInterface::ACCESS_ABSTAIN; diff --git a/var/SymfonyRequirements.php b/var/SymfonyRequirements.php index 7e7a99d..3b14a40 100644 --- a/var/SymfonyRequirements.php +++ b/var/SymfonyRequirements.php @@ -633,12 +633,6 @@ function_exists('mb_strlen'), 'Install and enable the mbstring extension.' ); - $this->addRecommendation( - function_exists('iconv'), - 'iconv() should be available', - 'Install and enable the iconv extension.' - ); - $this->addRecommendation( function_exists('utf8_decode'), 'utf8_decode() should be available', diff --git a/web/app.php b/web/app.php index 5c5ee03..bb73951 100644 --- a/web/app.php +++ b/web/app.php @@ -19,7 +19,6 @@ */ $kernel = new AppKernel('prod', false); -$kernel->loadClassCache(); //$kernel = new AppCache($kernel); // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter diff --git a/web/app_acceptance.php b/web/app_acceptance.php index b57aeeb..5bcaf14 100644 --- a/web/app_acceptance.php +++ b/web/app_acceptance.php @@ -25,7 +25,6 @@ Debug::enable(); $kernel = new AppKernel('acceptance', true); -$kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); diff --git a/web/app_dev.php b/web/app_dev.php index 2663ba8..e4352ca 100644 --- a/web/app_dev.php +++ b/web/app_dev.php @@ -25,7 +25,6 @@ Debug::enable(); $kernel = new AppKernel('dev', true); -$kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); diff --git a/web/config.php b/web/config.php index 69df43c..fd7e17e 100644 --- a/web/config.php +++ b/web/config.php @@ -11,7 +11,7 @@ */ if (!isset($_SERVER['HTTP_HOST'])) { - exit('This script cannot be run from the CLI. Run it from a browser.'); + exit("This script cannot be run from the CLI. Run it from a browser.\n"); } if (!in_array(@$_SERVER['REMOTE_ADDR'], array(