├── var ├── cache │ └── .gitkeep ├── logs │ └── .gitkeep ├── sessions │ └── .gitkeep └── SymfonyRequirements.php ├── tests ├── coverage │ └── .gitkeep └── AppBundle │ ├── EnvironmentAwareTest.php │ ├── Controller │ ├── DefaultControllerTest.php │ └── CueCategoriesControllerTest.php │ └── Presentation │ └── ResponseTest.php ├── app ├── config │ ├── routing.yml │ ├── config_test.yml │ ├── routing_dev.yml │ ├── services.yml │ ├── config_prod.yml │ ├── security.yml │ ├── parameters.yml.dist │ ├── config_dev.yml │ └── config.yml ├── AppCache.php ├── .htaccess ├── autoload.php ├── Resources │ └── views │ │ ├── base.html.twig │ │ └── default │ │ └── index.html.twig └── AppKernel.php ├── web ├── favicon.ico ├── apple-touch-icon.png ├── robots.txt ├── app.php ├── app_dev.php ├── .htaccess └── config.php ├── src ├── .htaccess └── AppBundle │ ├── AppBundle.php │ ├── Resources │ └── config │ │ └── services.yml │ ├── EnvironmentAware.php │ ├── Controller │ ├── DefaultController.php │ └── CueCategoriesController.php │ ├── DependencyInjection │ └── AppExtension.php │ ├── Presentation │ └── Response.php │ └── Service │ └── CueNation │ └── CueCategories.php ├── .gitignore ├── bin ├── console └── symfony_requirements ├── phpunit.xml.dist ├── README.md ├── composer.json └── composer.lock /var/cache/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /var/logs/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/coverage/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /var/sessions/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/config/routing.yml: -------------------------------------------------------------------------------- 1 | app: 2 | resource: "@AppBundle/Controller/" 3 | type: annotation 4 | -------------------------------------------------------------------------------- /web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DmitryVarennikov/cuenation-player_cue-files-service/master/web/favicon.ico -------------------------------------------------------------------------------- /web/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DmitryVarennikov/cuenation-player_cue-files-service/master/web/apple-touch-icon.png -------------------------------------------------------------------------------- /app/AppCache.php: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Order deny,allow 6 | Deny from all 7 | 8 | -------------------------------------------------------------------------------- /src/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Order deny,allow 6 | Deny from all 7 | 8 | -------------------------------------------------------------------------------- /src/AppBundle/AppBundle.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block title %}Welcome!{% endblock %} 6 | {% block stylesheets %}{% endblock %} 7 | 8 | 9 | 10 | {% block body %}{% endblock %} 11 | {% block javascripts %}{% endblock %} 12 | 13 | 14 | -------------------------------------------------------------------------------- /tests/AppBundle/EnvironmentAwareTest.php: -------------------------------------------------------------------------------- 1 | getMockForTrait(EnvironmentAware::class); 15 | $trait->setEnvironment('test'); 16 | 17 | $this->assertSame('test', $trait->getEnvironment()); 18 | $this->assertTrue($trait->isTestEnvironment()); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /src/AppBundle/EnvironmentAware.php: -------------------------------------------------------------------------------- 1 | environment; 16 | } 17 | 18 | public function setEnvironment(string $environment) 19 | { 20 | $this->environment = $environment; 21 | } 22 | 23 | public function isTestEnvironment(): bool 24 | { 25 | return 'test' === $this->getEnvironment(); 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /src/AppBundle/Controller/DefaultController.php: -------------------------------------------------------------------------------- 1 | 'Feeling good!' 19 | ]); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /web/app.php: -------------------------------------------------------------------------------- 1 | loadClassCache(); 13 | //$kernel = new AppCache($kernel); 14 | 15 | // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter 16 | //Request::enableHttpMethodParameterOverride(); 17 | $request = Request::createFromGlobals(); 18 | $response = $kernel->handle($request); 19 | $response->send(); 20 | $kernel->terminate($request, $response); 21 | -------------------------------------------------------------------------------- /src/AppBundle/DependencyInjection/AppExtension.php: -------------------------------------------------------------------------------- 1 | load('services.yml'); 17 | } 18 | 19 | public function getAlias() 20 | { 21 | return 'app'; 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /app/config/config_prod.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | #framework: 5 | # validation: 6 | # cache: validator.mapping.cache.doctrine.apc 7 | # serializer: 8 | # cache: serializer.mapping.cache.apc 9 | 10 | #doctrine: 11 | # orm: 12 | # metadata_cache_driver: apc 13 | # result_cache_driver: apc 14 | # query_cache_driver: apc 15 | 16 | monolog: 17 | handlers: 18 | main: 19 | type: fingers_crossed 20 | action_level: error 21 | handler: nested 22 | nested: 23 | type: stream 24 | path: "%kernel.logs_dir%/%kernel.environment%.log" 25 | level: debug 26 | console: 27 | type: console 28 | -------------------------------------------------------------------------------- /tests/AppBundle/Controller/DefaultControllerTest.php: -------------------------------------------------------------------------------- 1 | request('GET', '/'); 21 | $response = $client->getResponse(); 22 | 23 | $this->assertEquals(200, $response->getStatusCode()); 24 | $this->assertContains('json', $response->headers->get('Content-Type')); 25 | 26 | $content = json_decode($response->getContent(), true); 27 | $this->assertSame('Feeling good!', $content['status']); 28 | } 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /app/config/security.yml: -------------------------------------------------------------------------------- 1 | # To get started with security, check out the documentation: 2 | # http://symfony.com/doc/current/book/security.html 3 | security: 4 | 5 | # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 6 | providers: 7 | in_memory: 8 | memory: ~ 9 | 10 | firewalls: 11 | # disables authentication for assets and the profiler, adapt it according to your needs 12 | dev: 13 | pattern: ^/(_(profiler|wdt)|css|images|js)/ 14 | security: false 15 | 16 | main: 17 | anonymous: ~ 18 | # activate different ways to authenticate 19 | 20 | # http_basic: ~ 21 | # http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate 22 | 23 | # form_login: ~ 24 | # http://symfony.com/doc/current/cookbook/security/form_login_setup.html 25 | -------------------------------------------------------------------------------- /app/config/parameters.yml.dist: -------------------------------------------------------------------------------- 1 | # This file is a "template" of what your parameters.yml file should look like 2 | # Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production. 3 | # http://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration 4 | parameters: 5 | database_host: 127.0.0.1 6 | database_port: ~ 7 | database_name: symfony 8 | database_user: root 9 | database_password: ~ 10 | # You should uncomment this if you want use pdo_sqlite 11 | # database_path: "%kernel.root_dir%/data.db3" 12 | 13 | mailer_transport: smtp 14 | mailer_host: 127.0.0.1 15 | mailer_user: ~ 16 | mailer_password: ~ 17 | 18 | # CueNation API base URI 19 | cuenation_api_base_uri: ~ 20 | 21 | # A secret key that's used to generate certain security-related tokens 22 | secret: ThisTokenIsNotSoSecretChangeIt 23 | -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev'); 21 | $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(['--no-debug', '']) && $env !== 'prod'; 22 | 23 | if ($debug) { 24 | Debug::enable(); 25 | } 26 | 27 | $kernel = new AppKernel($env, $debug); 28 | $application = new Application($kernel); 29 | $application->run($input); 30 | -------------------------------------------------------------------------------- /app/config/config_dev.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | framework: 5 | router: 6 | resource: "%kernel.root_dir%/config/routing_dev.yml" 7 | strict_requirements: true 8 | profiler: { only_exceptions: false } 9 | 10 | web_profiler: 11 | toolbar: true 12 | intercept_redirects: false 13 | 14 | monolog: 15 | handlers: 16 | main: 17 | type: stream 18 | path: "%kernel.logs_dir%/%kernel.environment%.log" 19 | level: debug 20 | channels: [!event] 21 | console: 22 | type: console 23 | channels: [!event, !doctrine] 24 | # uncomment to get logging in your browser 25 | # you may have to allow bigger header sizes in your Web server configuration 26 | #firephp: 27 | # type: firephp 28 | # level: info 29 | #chromephp: 30 | # type: chromephp 31 | # level: info 32 | 33 | #swiftmailer: 34 | # delivery_address: me@example.com 35 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | tests 18 | 19 | 20 | 21 | 22 | 23 | src 24 | 25 | src/*Bundle/Resources 26 | src/*/*Bundle/Resources 27 | src/*/Bundle/*Bundle/Resources 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CueNation player 2 | ================================== 3 | Cue files service. CueNation API adapter. 4 | 5 | 6 | # How to install 7 | 8 | * `git pull origin master` -- always points to the latest development commit (no need to guess branch name) 9 | * `composer install` 10 | 11 | # How to test 12 | 13 | `php vendor/bin/phpunit` -- add `--group=unit` or `...functional` to differentiate between types. Services which 14 | communicate over network return predefined responses (useful for functional tests). Integration tests are coming in the 15 | Gateway API. 16 | 17 | # API 18 | 19 | ### Cue categories 20 | Return all cue-categories 21 | 22 | **Request** 23 | 24 | `GET /cue-categories` 25 | 26 | **Response** 27 | 28 | **NOTE** `If-None-Match` header is present `data` section is empty 29 | 30 | ``` 31 | { 32 | "data": [ 33 | { 34 | "id": "53f24f73cb88814e672ce4f0", 35 | "name": "#goldrushRADIO", 36 | "host": "with Ben Gold", 37 | "link": "http://cuenation.com/?page=cues&folder=goldrushradio" 38 | } 39 | ], 40 | "meta": { 41 | "ETag": "this is a test ETag" 42 | } 43 | } 44 | ``` -------------------------------------------------------------------------------- /web/app_dev.php: -------------------------------------------------------------------------------- 1 | loadClassCache(); 29 | $request = Request::createFromGlobals(); 30 | $response = $kernel->handle($request); 31 | $response->send(); 32 | $kernel->terminate($request, $response); 33 | -------------------------------------------------------------------------------- /src/AppBundle/Presentation/Response.php: -------------------------------------------------------------------------------- 1 | fractalManager = $fractalManager; 26 | } 27 | 28 | public function return (Psr7\Response $response) : JsonResponse 29 | { 30 | $this->response = $response; 31 | 32 | $resource = $this->createResource(); 33 | $output = $this->fractalManager->createData($resource)->toArray(); 34 | 35 | return new JsonResponse($output); 36 | } 37 | 38 | abstract protected function createResource() : ResourceInterface; 39 | 40 | protected function getContent() 41 | { 42 | return json_decode($this->response->getBody()->getContents(), true); 43 | } 44 | 45 | protected function getETag() 46 | { 47 | $return = null; 48 | 49 | if (!empty($this->response->getHeader('ETag'))) { 50 | $return = $this->response->getHeader('ETag')[0]; 51 | } 52 | 53 | return $return; 54 | } 55 | 56 | public function noneTransformer($data) 57 | { 58 | return $data; 59 | } 60 | 61 | } -------------------------------------------------------------------------------- /tests/AppBundle/Controller/CueCategoriesControllerTest.php: -------------------------------------------------------------------------------- 1 | client = static::createClient(); 24 | } 25 | 26 | /** 27 | * @test 28 | */ 29 | public function index() 30 | { 31 | $this->client->request('GET', '/cue-categories/'); 32 | $response = $this->client->getResponse(); 33 | 34 | $this->assertEquals(200, $response->getStatusCode()); 35 | $this->assertContains('json', $response->headers->get('Content-Type')); 36 | 37 | $content = json_decode($response->getContent(), true); 38 | $this->assertArrayHasKey('ETag', $content['meta']); 39 | $this->assertNotEmpty($content['data']); 40 | 41 | return $content['meta']['ETag']; 42 | } 43 | 44 | /** 45 | * @test 46 | * @depends index 47 | */ 48 | public function indexWithETag($eTag) 49 | { 50 | $this->client->request('GET', '/cue-categories/', [], [], ['HTTP_If-None-Match' => $eTag]); 51 | $response = $this->client->getResponse(); 52 | 53 | $this->assertEquals(200, $response->getStatusCode()); 54 | 55 | $content = json_decode($response->getContent(), true); 56 | $this->assertSame($eTag, $content['meta']['ETag']); 57 | $this->assertEmpty($content['data']); 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /app/AppKernel.php: -------------------------------------------------------------------------------- 1 | getEnvironment(), ['dev', 'test'], true)) { 23 | $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 24 | $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 25 | $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 26 | $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 27 | } 28 | 29 | return $bundles; 30 | } 31 | 32 | public function getRootDir() 33 | { 34 | return __DIR__; 35 | } 36 | 37 | public function getCacheDir() 38 | { 39 | return dirname(__DIR__).'/var/cache/'.$this->getEnvironment(); 40 | } 41 | 42 | public function getLogDir() 43 | { 44 | return dirname(__DIR__).'/var/logs'; 45 | } 46 | 47 | public function registerContainerConfiguration(LoaderInterface $loader) 48 | { 49 | $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/AppBundle/Controller/CueCategoriesController.php: -------------------------------------------------------------------------------- 1 | get('app.service.cuenation.cue_categories'); 31 | 32 | $eTag = count($request->getETags()) ? $request->getETags()[0] : null; 33 | $httpResponse = $cueCategoriesService->get($eTag); 34 | 35 | 36 | $fractalManager = $this->get('league.fractal.manager'); 37 | $response = new class($fractalManager) extends Response 38 | { 39 | 40 | protected function createResource() : ResourceInterface 41 | { 42 | $content = $this->getContent(); 43 | $eTag = $this->getETag(); 44 | 45 | // @TODO: 1. default `null` data is not working, `Scope::executeResourceTransformers` tries to iterate 46 | // over data in case of `Collection` resource 47 | // @TODO: 2. `null` transformer is not working either for the same reason 48 | $resource = new Collection($content['_embedded']['cueCategories'] ?? [], [$this, 'noneTransformer']); 49 | if ($eTag) { 50 | $resource->setMetaValue('ETag', $eTag); 51 | } 52 | 53 | return $resource; 54 | } 55 | }; 56 | 57 | return $response->return($httpResponse); 58 | } 59 | 60 | } -------------------------------------------------------------------------------- /src/AppBundle/Service/CueNation/CueCategories.php: -------------------------------------------------------------------------------- 1 | httpClient = $httpClient; 21 | } 22 | 23 | public function get(string $eTag = null): Psr7\Response 24 | { 25 | if ($this->isTestEnvironment()) { 26 | return $this->testGet($eTag); 27 | } 28 | 29 | $headers = []; 30 | if ($eTag !== null) { 31 | $headers['If-None-Match'] = $eTag; 32 | } 33 | 34 | $request = new Psr7\Request('GET', 'cue-categories', $headers); 35 | $response = $this->httpClient->send($request); 36 | 37 | return $response; 38 | } 39 | 40 | private function testGet(string $eTag = null): Psr7\Response 41 | { 42 | return $eTag === null ? $this->testGet200() : $this->testGet304(); 43 | } 44 | 45 | private function testGet200() 46 | { 47 | $headers = [ 48 | 'Content-Type' => 'application/hal+json', 49 | 'ETag' => 'this is a test ETag', 50 | ]; 51 | $body = [ 52 | '_likns' => [ 53 | 'self' => [ 54 | 'href' => [ 55 | 'http://test-server/cue-categories', 56 | ], 57 | ], 58 | ], 59 | '_embedded' => [ 60 | 'cueCategories' => [ 61 | [ 62 | 'id' => '53f24f73cb88814e672ce4f0', 63 | 'name' => '#goldrushRADIO', 64 | 'host' => 'with Ben Gold', 65 | 'link' => 'http://cuenation.com/?page=cues&folder=goldrushradio', 66 | ], 67 | ], 68 | ], 69 | ]; 70 | 71 | return new Psr7\Response(200, $headers, json_encode($body)); 72 | } 73 | 74 | private function testGet304() 75 | { 76 | $headers = [ 77 | 'Content-Type' => 'application/hal+json', 78 | 'ETag' => 'this is a test ETag', 79 | ]; 80 | 81 | return new Psr7\Response(304, $headers); 82 | } 83 | 84 | } -------------------------------------------------------------------------------- /app/config/config.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: parameters.yml } 3 | - { resource: security.yml } 4 | - { resource: services.yml } 5 | 6 | # Put parameters here that don't need to change on each machine where the app is deployed 7 | # http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration 8 | parameters: 9 | locale: en 10 | 11 | framework: 12 | #esi: ~ 13 | #translator: { fallbacks: ["%locale%"] } 14 | secret: "%secret%" 15 | router: 16 | resource: "%kernel.root_dir%/config/routing.yml" 17 | strict_requirements: ~ 18 | form: ~ 19 | csrf_protection: ~ 20 | validation: { enable_annotations: true } 21 | #serializer: { enable_annotations: true } 22 | templating: 23 | engines: ['twig'] 24 | default_locale: "%locale%" 25 | trusted_hosts: ~ 26 | trusted_proxies: ~ 27 | session: 28 | # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id 29 | handler_id: session.handler.native_file 30 | save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" 31 | fragments: ~ 32 | http_method_override: true 33 | assets: ~ 34 | 35 | # Twig Configuration 36 | twig: 37 | debug: "%kernel.debug%" 38 | strict_variables: "%kernel.debug%" 39 | 40 | # Doctrine Configuration 41 | doctrine: 42 | dbal: 43 | driver: pdo_mysql 44 | host: "%database_host%" 45 | port: "%database_port%" 46 | dbname: "%database_name%" 47 | user: "%database_user%" 48 | password: "%database_password%" 49 | charset: UTF8 50 | # if using pdo_sqlite as your database driver: 51 | # 1. add the path in parameters.yml 52 | # e.g. database_path: "%kernel.root_dir%/data/data.db3" 53 | # 2. Uncomment database_path in parameters.yml.dist 54 | # 3. Uncomment next line: 55 | # path: "%database_path%" 56 | 57 | orm: 58 | auto_generate_proxy_classes: "%kernel.debug%" 59 | naming_strategy: doctrine.orm.naming_strategy.underscore 60 | auto_mapping: true 61 | 62 | # Swiftmailer Configuration 63 | swiftmailer: 64 | transport: "%mailer_transport%" 65 | host: "%mailer_host%" 66 | username: "%mailer_user%" 67 | password: "%mailer_password%" 68 | spool: { type: memory } 69 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dv/cuenation.player_cue.files.service", 3 | "license": "proprietary", 4 | "type": "project", 5 | "autoload": { 6 | "psr-4": { 7 | "": "src/" 8 | }, 9 | "classmap": [ 10 | "app/AppKernel.php", 11 | "app/AppCache.php" 12 | ] 13 | }, 14 | "autoload-dev": { 15 | "psr-4": { 16 | "Tests\\": "tests/" 17 | } 18 | }, 19 | "require": { 20 | "php": ">=5.5.9", 21 | "symfony/symfony": "3.0.*", 22 | "doctrine/orm": "^2.5", 23 | "doctrine/doctrine-bundle": "^1.6", 24 | "doctrine/doctrine-cache-bundle": "^1.2", 25 | "symfony/swiftmailer-bundle": "^2.3", 26 | "symfony/monolog-bundle": "^2.8", 27 | "sensio/distribution-bundle": "^5.0", 28 | "sensio/framework-extra-bundle": "^3.0.2", 29 | "incenteev/composer-parameter-handler": "^2.0", 30 | "league/fractal": "^0.13.0", 31 | "guzzlehttp/guzzle": "^6.2" 32 | }, 33 | "require-dev": { 34 | "sensio/generator-bundle": "^3.0", 35 | "symfony/phpunit-bridge": "^3.0", 36 | "phpunit/phpunit": "5.1.*" 37 | }, 38 | "scripts": { 39 | "post-install-cmd": [ 40 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 41 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 42 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 43 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 44 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 45 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 46 | ], 47 | "post-update-cmd": [ 48 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 49 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 50 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 51 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 52 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 53 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 54 | ] 55 | }, 56 | "extra": { 57 | "symfony-app-dir": "app", 58 | "symfony-bin-dir": "bin", 59 | "symfony-var-dir": "var", 60 | "symfony-web-dir": "web", 61 | "symfony-tests-dir": "tests", 62 | "symfony-assets-install": "relative", 63 | "incenteev-parameters": { 64 | "file": "app/config/parameters.yml" 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /web/.htaccess: -------------------------------------------------------------------------------- 1 | # Use the front controller as index file. It serves as a fallback solution when 2 | # every other rewrite/redirect fails (e.g. in an aliased environment without 3 | # mod_rewrite). Additionally, this reduces the matching process for the 4 | # start page (path "/") because otherwise Apache will apply the rewriting rules 5 | # to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). 6 | DirectoryIndex app.php 7 | 8 | # By default, Apache does not evaluate symbolic links if you did not enable this 9 | # feature in your server configuration. Uncomment the following line if you 10 | # install assets as symlinks or if you experience problems related to symlinks 11 | # when compiling LESS/Sass/CoffeScript assets. 12 | # Options FollowSymlinks 13 | 14 | # Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve 15 | # to the front controller "/app.php" but be rewritten to "/app.php/app". 16 | 17 | Options -MultiViews 18 | 19 | 20 | 21 | RewriteEngine On 22 | 23 | # Determine the RewriteBase automatically and set it as environment variable. 24 | # If you are using Apache aliases to do mass virtual hosting or installed the 25 | # project in a subdirectory, the base path will be prepended to allow proper 26 | # resolution of the app.php file and to redirect to the correct URI. It will 27 | # work in environments without path prefix as well, providing a safe, one-size 28 | # fits all solution. But as you do not need it in this case, you can comment 29 | # the following 2 lines to eliminate the overhead. 30 | RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 31 | RewriteRule ^(.*) - [E=BASE:%1] 32 | 33 | # Sets the HTTP_AUTHORIZATION header removed by Apache 34 | RewriteCond %{HTTP:Authorization} . 35 | RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 36 | 37 | # Redirect to URI without front controller to prevent duplicate content 38 | # (with and without `/app.php`). Only do this redirect on the initial 39 | # rewrite by Apache and not on subsequent cycles. Otherwise we would get an 40 | # endless redirect loop (request -> rewrite to front controller -> 41 | # redirect -> request -> ...). 42 | # So in case you get a "too many redirects" error or you always get redirected 43 | # to the start page because your Apache does not expose the REDIRECT_STATUS 44 | # environment variable, you have 2 choices: 45 | # - disable this feature by commenting the following 2 lines or 46 | # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the 47 | # following RewriteCond (best solution) 48 | RewriteCond %{ENV:REDIRECT_STATUS} ^$ 49 | RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] 50 | 51 | # If the requested filename exists, simply serve it. 52 | # We only want to let Apache serve files and not directories. 53 | RewriteCond %{REQUEST_FILENAME} -f 54 | RewriteRule ^ - [L] 55 | 56 | # Rewrite all other queries to the front controller. 57 | RewriteRule ^ %{ENV:BASE}/app.php [L] 58 | 59 | 60 | 61 | 62 | # When mod_rewrite is not available, we instruct a temporary redirect of 63 | # the start page to the front controller explicitly so that the website 64 | # and the generated links can still be used. 65 | RedirectMatch 302 ^/$ /app.php/ 66 | # RedirectTemp cannot be used instead 67 | 68 | 69 | -------------------------------------------------------------------------------- /tests/AppBundle/Presentation/ResponseTest.php: -------------------------------------------------------------------------------- 1 | getFractalScopeMock(['toArray']); 24 | $fractalScope 25 | ->expects($this->once()) 26 | ->method('toArray') 27 | ->willReturn(['id' => 123]); 28 | 29 | $fractalManager = $this->getFractalManagerMock(['createData']); 30 | $fractalManager 31 | ->expects($this->once()) 32 | ->method('createData') 33 | ->willReturn($fractalScope); 34 | 35 | 36 | /** @var Response $response */ 37 | $response = new class($fractalManager) extends Response 38 | { 39 | 40 | protected function createResource() : ResourceInterface 41 | { 42 | $resource = new Item($this->getContent()); 43 | $eTag = $this->getETag(); 44 | if (!empty($eTag)) { 45 | $resource->setMetaValue('ETag', $eTag); 46 | } 47 | 48 | return $resource; 49 | } 50 | }; 51 | 52 | $httpMessageStreamMock = $this->getHttpMessageStreamMock(['getContent']); 53 | $psr7ResponseMock = $this->getPsr7ResponseMock(['getBody', 'getHeader']); 54 | $psr7ResponseMock 55 | ->expects($this->once()) 56 | ->method('getBody') 57 | ->willReturn($httpMessageStreamMock); 58 | $psr7ResponseMock 59 | ->expects($this->exactly(2)) 60 | ->method('getHeader') 61 | ->with('ETag') 62 | ->willReturn(['"05a6ac2c75c10f981f2348303f5e51c12"']); 63 | 64 | $actualResponse = $response->return($psr7ResponseMock); 65 | $expectedContent = '{"id":123}'; 66 | 67 | $this->assertSame($expectedContent, $actualResponse->getContent()); 68 | } 69 | 70 | 71 | private function getPsr7ResponseMock(array $methods = null): \PHPUnit_Framework_MockObject_MockObject 72 | { 73 | return $this->getMockBuilder(Psr7\Response::class) 74 | ->disableOriginalConstructor() 75 | ->setMethods($methods) 76 | ->getMock(); 77 | } 78 | 79 | private function getFractalManagerMock(array $methods = null): \PHPUnit_Framework_MockObject_MockObject 80 | { 81 | return $this->getMockBuilder(Manager::class) 82 | ->disableOriginalConstructor() 83 | ->setMethods($methods) 84 | ->getMock(); 85 | } 86 | 87 | private function getFractalScopeMock(array $methods = null): \PHPUnit_Framework_MockObject_MockObject 88 | { 89 | return $this->getMockBuilder(Scope::class) 90 | ->disableOriginalConstructor() 91 | ->setMethods($methods) 92 | ->getMock(); 93 | } 94 | 95 | private function getHttpMessageStreamMock(array $methods = null): \PHPUnit_Framework_MockObject_MockObject 96 | { 97 | return $this->getMockBuilder(StreamInterface::class) 98 | ->disableOriginalConstructor() 99 | ->setMethods($methods) 100 | ->getMockForAbstractClass(); 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /bin/symfony_requirements: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | getPhpIniConfigPath(); 9 | 10 | echo_title('Symfony Requirements Checker'); 11 | 12 | echo '> PHP is using the following php.ini file:'.PHP_EOL; 13 | if ($iniPath) { 14 | echo_style('green', ' '.$iniPath); 15 | } else { 16 | echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); 17 | } 18 | 19 | echo PHP_EOL.PHP_EOL; 20 | 21 | echo '> Checking Symfony requirements:'.PHP_EOL.' '; 22 | 23 | $messages = array(); 24 | foreach ($symfonyRequirements->getRequirements() as $req) { 25 | /** @var $req Requirement */ 26 | if ($helpText = get_error_message($req, $lineSize)) { 27 | echo_style('red', 'E'); 28 | $messages['error'][] = $helpText; 29 | } else { 30 | echo_style('green', '.'); 31 | } 32 | } 33 | 34 | $checkPassed = empty($messages['error']); 35 | 36 | foreach ($symfonyRequirements->getRecommendations() as $req) { 37 | if ($helpText = get_error_message($req, $lineSize)) { 38 | echo_style('yellow', 'W'); 39 | $messages['warning'][] = $helpText; 40 | } else { 41 | echo_style('green', '.'); 42 | } 43 | } 44 | 45 | if ($checkPassed) { 46 | echo_block('success', 'OK', 'Your system is ready to run Symfony projects'); 47 | } else { 48 | echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects'); 49 | 50 | echo_title('Fix the following mandatory requirements', 'red'); 51 | 52 | foreach ($messages['error'] as $helpText) { 53 | echo ' * '.$helpText.PHP_EOL; 54 | } 55 | } 56 | 57 | if (!empty($messages['warning'])) { 58 | echo_title('Optional recommendations to improve your setup', 'yellow'); 59 | 60 | foreach ($messages['warning'] as $helpText) { 61 | echo ' * '.$helpText.PHP_EOL; 62 | } 63 | } 64 | 65 | echo PHP_EOL; 66 | echo_style('title', 'Note'); 67 | echo ' The command console could use a different php.ini file'.PHP_EOL; 68 | echo_style('title', '~~~~'); 69 | echo ' than the one used with your web server. To be on the'.PHP_EOL; 70 | echo ' safe side, please check the requirements from your web'.PHP_EOL; 71 | echo ' server using the '; 72 | echo_style('yellow', 'web/config.php'); 73 | echo ' script.'.PHP_EOL; 74 | echo PHP_EOL; 75 | 76 | exit($checkPassed ? 0 : 1); 77 | 78 | function get_error_message(Requirement $requirement, $lineSize) 79 | { 80 | if ($requirement->isFulfilled()) { 81 | return; 82 | } 83 | 84 | $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; 85 | $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL; 86 | 87 | return $errorMessage; 88 | } 89 | 90 | function echo_title($title, $style = null) 91 | { 92 | $style = $style ?: 'title'; 93 | 94 | echo PHP_EOL; 95 | echo_style($style, $title.PHP_EOL); 96 | echo_style($style, str_repeat('~', strlen($title)).PHP_EOL); 97 | echo PHP_EOL; 98 | } 99 | 100 | function echo_style($style, $message) 101 | { 102 | // ANSI color codes 103 | $styles = array( 104 | 'reset' => "\033[0m", 105 | 'red' => "\033[31m", 106 | 'green' => "\033[32m", 107 | 'yellow' => "\033[33m", 108 | 'error' => "\033[37;41m", 109 | 'success' => "\033[37;42m", 110 | 'title' => "\033[34m", 111 | ); 112 | $supports = has_color_support(); 113 | 114 | echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : ''); 115 | } 116 | 117 | function echo_block($style, $title, $message) 118 | { 119 | $message = ' '.trim($message).' '; 120 | $width = strlen($message); 121 | 122 | echo PHP_EOL.PHP_EOL; 123 | 124 | echo_style($style, str_repeat(' ', $width).PHP_EOL); 125 | echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); 126 | echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); 127 | echo_style($style, str_repeat(' ', $width).PHP_EOL); 128 | } 129 | 130 | function has_color_support() 131 | { 132 | static $support; 133 | 134 | if (null === $support) { 135 | if (DIRECTORY_SEPARATOR == '\\') { 136 | $support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); 137 | } else { 138 | $support = function_exists('posix_isatty') && @posix_isatty(STDOUT); 139 | } 140 | } 141 | 142 | return $support; 143 | } 144 | -------------------------------------------------------------------------------- /app/Resources/views/default/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'base.html.twig' %} 2 | 3 | {% block body %} 4 |
5 |
6 |
7 |

Welcome to Symfony {{ constant('Symfony\\Component\\HttpKernel\\Kernel::VERSION') }}

8 |
9 | 10 |
11 |

12 | 13 | 14 | Your application is now ready. You can start working on it at: 15 | {{ base_dir }}/ 16 |

17 |
18 | 19 | 44 | 45 |
46 |
47 | {% endblock %} 48 | 49 | {% block stylesheets %} 50 | 76 | {% endblock %} 77 | -------------------------------------------------------------------------------- /web/config.php: -------------------------------------------------------------------------------- 1 | getFailedRequirements(); 30 | $minorProblems = $symfonyRequirements->getFailedRecommendations(); 31 | 32 | ?> 33 | 34 | 35 | 36 | 37 | 38 | Symfony Configuration Checker 39 | 40 | 41 | 118 | 119 | 120 |
121 |
122 | 125 | 126 | 146 |
147 | 148 |
149 |
150 |
151 |

Configuration Checker

152 |

153 | This script analyzes your system to check whether is 154 | ready to run Symfony applications. 155 |

156 | 157 | 158 |

Major problems

159 |

Major problems have been detected and must be fixed before continuing:

160 |
    161 | 162 |
  1. getHelpHtml() ?>
  2. 163 | 164 |
165 | 166 | 167 | 168 |

Recommendations

169 |

170 | Additionally, toTo enhance your Symfony experience, 171 | it’s recommended that you fix the following: 172 |

173 |
    174 | 175 |
  1. getHelpHtml() ?>
  2. 176 | 177 |
178 | 179 | 180 | hasPhpIniConfigIssue()): ?> 181 |

* 182 | getPhpIniConfigPath()): ?> 183 | Changes to the php.ini file must be done in "getPhpIniConfigPath() ?>". 184 | 185 | To change settings, create a "php.ini". 186 | 187 |

188 | 189 | 190 | 191 |

All checks passed successfully. Your system is ready to run Symfony applications.

192 | 193 | 194 | 199 |
200 |
201 |
202 |
Symfony Standard Edition
203 |
204 | 205 | 206 | -------------------------------------------------------------------------------- /var/SymfonyRequirements.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | /* 13 | * Users of PHP 5.2 should be able to run the requirements checks. 14 | * This is why the file and all classes must be compatible with PHP 5.2+ 15 | * (e.g. not using namespaces and closures). 16 | * 17 | * ************** CAUTION ************** 18 | * 19 | * DO NOT EDIT THIS FILE as it will be overridden by Composer as part of 20 | * the installation/update process. The original file resides in the 21 | * SensioDistributionBundle. 22 | * 23 | * ************** CAUTION ************** 24 | */ 25 | 26 | /** 27 | * Represents a single PHP requirement, e.g. an installed extension. 28 | * It can be a mandatory requirement or an optional recommendation. 29 | * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration. 30 | * 31 | * @author Tobias Schultze 32 | */ 33 | class Requirement 34 | { 35 | private $fulfilled; 36 | private $testMessage; 37 | private $helpText; 38 | private $helpHtml; 39 | private $optional; 40 | 41 | /** 42 | * Constructor that initializes the requirement. 43 | * 44 | * @param bool $fulfilled Whether the requirement is fulfilled 45 | * @param string $testMessage The message for testing the requirement 46 | * @param string $helpHtml The help text formatted in HTML for resolving the problem 47 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 48 | * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement 49 | */ 50 | public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false) 51 | { 52 | $this->fulfilled = (bool) $fulfilled; 53 | $this->testMessage = (string) $testMessage; 54 | $this->helpHtml = (string) $helpHtml; 55 | $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText; 56 | $this->optional = (bool) $optional; 57 | } 58 | 59 | /** 60 | * Returns whether the requirement is fulfilled. 61 | * 62 | * @return bool true if fulfilled, otherwise false 63 | */ 64 | public function isFulfilled() 65 | { 66 | return $this->fulfilled; 67 | } 68 | 69 | /** 70 | * Returns the message for testing the requirement. 71 | * 72 | * @return string The test message 73 | */ 74 | public function getTestMessage() 75 | { 76 | return $this->testMessage; 77 | } 78 | 79 | /** 80 | * Returns the help text for resolving the problem. 81 | * 82 | * @return string The help text 83 | */ 84 | public function getHelpText() 85 | { 86 | return $this->helpText; 87 | } 88 | 89 | /** 90 | * Returns the help text formatted in HTML. 91 | * 92 | * @return string The HTML help 93 | */ 94 | public function getHelpHtml() 95 | { 96 | return $this->helpHtml; 97 | } 98 | 99 | /** 100 | * Returns whether this is only an optional recommendation and not a mandatory requirement. 101 | * 102 | * @return bool true if optional, false if mandatory 103 | */ 104 | public function isOptional() 105 | { 106 | return $this->optional; 107 | } 108 | } 109 | 110 | /** 111 | * Represents a PHP requirement in form of a php.ini configuration. 112 | * 113 | * @author Tobias Schultze 114 | */ 115 | class PhpIniRequirement extends Requirement 116 | { 117 | /** 118 | * Constructor that initializes the requirement. 119 | * 120 | * @param string $cfgName The configuration name used for ini_get() 121 | * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, 122 | * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement 123 | * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. 124 | * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. 125 | * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. 126 | * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) 127 | * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) 128 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 129 | * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement 130 | */ 131 | public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false) 132 | { 133 | $cfgValue = ini_get($cfgName); 134 | 135 | if (is_callable($evaluation)) { 136 | if (null === $testMessage || null === $helpHtml) { 137 | throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.'); 138 | } 139 | 140 | $fulfilled = call_user_func($evaluation, $cfgValue); 141 | } else { 142 | if (null === $testMessage) { 143 | $testMessage = sprintf('%s %s be %s in php.ini', 144 | $cfgName, 145 | $optional ? 'should' : 'must', 146 | $evaluation ? 'enabled' : 'disabled' 147 | ); 148 | } 149 | 150 | if (null === $helpHtml) { 151 | $helpHtml = sprintf('Set %s to %s in php.ini*.', 152 | $cfgName, 153 | $evaluation ? 'on' : 'off' 154 | ); 155 | } 156 | 157 | $fulfilled = $evaluation == $cfgValue; 158 | } 159 | 160 | parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional); 161 | } 162 | } 163 | 164 | /** 165 | * A RequirementCollection represents a set of Requirement instances. 166 | * 167 | * @author Tobias Schultze 168 | */ 169 | class RequirementCollection implements IteratorAggregate 170 | { 171 | private $requirements = array(); 172 | 173 | /** 174 | * Gets the current RequirementCollection as an Iterator. 175 | * 176 | * @return Traversable A Traversable interface 177 | */ 178 | public function getIterator() 179 | { 180 | return new ArrayIterator($this->requirements); 181 | } 182 | 183 | /** 184 | * Adds a Requirement. 185 | * 186 | * @param Requirement $requirement A Requirement instance 187 | */ 188 | public function add(Requirement $requirement) 189 | { 190 | $this->requirements[] = $requirement; 191 | } 192 | 193 | /** 194 | * Adds a mandatory requirement. 195 | * 196 | * @param bool $fulfilled Whether the requirement is fulfilled 197 | * @param string $testMessage The message for testing the requirement 198 | * @param string $helpHtml The help text formatted in HTML for resolving the problem 199 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 200 | */ 201 | public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null) 202 | { 203 | $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false)); 204 | } 205 | 206 | /** 207 | * Adds an optional recommendation. 208 | * 209 | * @param bool $fulfilled Whether the recommendation is fulfilled 210 | * @param string $testMessage The message for testing the recommendation 211 | * @param string $helpHtml The help text formatted in HTML for resolving the problem 212 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 213 | */ 214 | public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null) 215 | { 216 | $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true)); 217 | } 218 | 219 | /** 220 | * Adds a mandatory requirement in form of a php.ini configuration. 221 | * 222 | * @param string $cfgName The configuration name used for ini_get() 223 | * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, 224 | * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement 225 | * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. 226 | * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. 227 | * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. 228 | * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) 229 | * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) 230 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 231 | */ 232 | public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null) 233 | { 234 | $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false)); 235 | } 236 | 237 | /** 238 | * Adds an optional recommendation in form of a php.ini configuration. 239 | * 240 | * @param string $cfgName The configuration name used for ini_get() 241 | * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, 242 | * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement 243 | * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. 244 | * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. 245 | * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. 246 | * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) 247 | * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) 248 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 249 | */ 250 | public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null) 251 | { 252 | $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true)); 253 | } 254 | 255 | /** 256 | * Adds a requirement collection to the current set of requirements. 257 | * 258 | * @param RequirementCollection $collection A RequirementCollection instance 259 | */ 260 | public function addCollection(RequirementCollection $collection) 261 | { 262 | $this->requirements = array_merge($this->requirements, $collection->all()); 263 | } 264 | 265 | /** 266 | * Returns both requirements and recommendations. 267 | * 268 | * @return array Array of Requirement instances 269 | */ 270 | public function all() 271 | { 272 | return $this->requirements; 273 | } 274 | 275 | /** 276 | * Returns all mandatory requirements. 277 | * 278 | * @return array Array of Requirement instances 279 | */ 280 | public function getRequirements() 281 | { 282 | $array = array(); 283 | foreach ($this->requirements as $req) { 284 | if (!$req->isOptional()) { 285 | $array[] = $req; 286 | } 287 | } 288 | 289 | return $array; 290 | } 291 | 292 | /** 293 | * Returns the mandatory requirements that were not met. 294 | * 295 | * @return array Array of Requirement instances 296 | */ 297 | public function getFailedRequirements() 298 | { 299 | $array = array(); 300 | foreach ($this->requirements as $req) { 301 | if (!$req->isFulfilled() && !$req->isOptional()) { 302 | $array[] = $req; 303 | } 304 | } 305 | 306 | return $array; 307 | } 308 | 309 | /** 310 | * Returns all optional recommendations. 311 | * 312 | * @return array Array of Requirement instances 313 | */ 314 | public function getRecommendations() 315 | { 316 | $array = array(); 317 | foreach ($this->requirements as $req) { 318 | if ($req->isOptional()) { 319 | $array[] = $req; 320 | } 321 | } 322 | 323 | return $array; 324 | } 325 | 326 | /** 327 | * Returns the recommendations that were not met. 328 | * 329 | * @return array Array of Requirement instances 330 | */ 331 | public function getFailedRecommendations() 332 | { 333 | $array = array(); 334 | foreach ($this->requirements as $req) { 335 | if (!$req->isFulfilled() && $req->isOptional()) { 336 | $array[] = $req; 337 | } 338 | } 339 | 340 | return $array; 341 | } 342 | 343 | /** 344 | * Returns whether a php.ini configuration is not correct. 345 | * 346 | * @return bool php.ini configuration problem? 347 | */ 348 | public function hasPhpIniConfigIssue() 349 | { 350 | foreach ($this->requirements as $req) { 351 | if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) { 352 | return true; 353 | } 354 | } 355 | 356 | return false; 357 | } 358 | 359 | /** 360 | * Returns the PHP configuration file (php.ini) path. 361 | * 362 | * @return string|false php.ini file path 363 | */ 364 | public function getPhpIniConfigPath() 365 | { 366 | return get_cfg_var('cfg_file_path'); 367 | } 368 | } 369 | 370 | /** 371 | * This class specifies all requirements and optional recommendations that 372 | * are necessary to run the Symfony Standard Edition. 373 | * 374 | * @author Tobias Schultze 375 | * @author Fabien Potencier 376 | */ 377 | class SymfonyRequirements extends RequirementCollection 378 | { 379 | const REQUIRED_PHP_VERSION = '5.3.3'; 380 | 381 | /** 382 | * Constructor that initializes the requirements. 383 | */ 384 | public function __construct() 385 | { 386 | /* mandatory requirements follow */ 387 | 388 | $installedPhpVersion = phpversion(); 389 | 390 | $this->addRequirement( 391 | version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='), 392 | sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion), 393 | sprintf('You are running PHP version "%s", but Symfony needs at least PHP "%s" to run. 394 | Before using Symfony, upgrade your PHP installation, preferably to the latest version.', 395 | $installedPhpVersion, self::REQUIRED_PHP_VERSION), 396 | sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion) 397 | ); 398 | 399 | $this->addRequirement( 400 | version_compare($installedPhpVersion, '5.3.16', '!='), 401 | 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it', 402 | 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)' 403 | ); 404 | 405 | $this->addRequirement( 406 | is_dir(__DIR__.'/../vendor/composer'), 407 | 'Vendor libraries must be installed', 408 | 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/. '. 409 | 'Then run "php composer.phar install" to install them.' 410 | ); 411 | 412 | $cacheDir = is_dir(__DIR__.'/../var/cache') ? __DIR__.'/../var/cache' : __DIR__.'/cache'; 413 | 414 | $this->addRequirement( 415 | is_writable($cacheDir), 416 | 'app/cache/ or var/cache/ directory must be writable', 417 | 'Change the permissions of either "app/cache/" or "var/cache/" directory so that the web server can write into it.' 418 | ); 419 | 420 | $logsDir = is_dir(__DIR__.'/../var/logs') ? __DIR__.'/../var/logs' : __DIR__.'/logs'; 421 | 422 | $this->addRequirement( 423 | is_writable($logsDir), 424 | 'app/logs/ or var/logs/ directory must be writable', 425 | 'Change the permissions of either "app/logs/" or "var/logs/" directory so that the web server can write into it.' 426 | ); 427 | 428 | if (version_compare($installedPhpVersion, '7.0.0', '<')) { 429 | $this->addPhpIniRequirement( 430 | 'date.timezone', true, false, 431 | 'date.timezone setting must be set', 432 | 'Set the "date.timezone" setting in php.ini* (like Europe/Paris).' 433 | ); 434 | } 435 | 436 | if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) { 437 | $timezones = array(); 438 | foreach (DateTimeZone::listAbbreviations() as $abbreviations) { 439 | foreach ($abbreviations as $abbreviation) { 440 | $timezones[$abbreviation['timezone_id']] = true; 441 | } 442 | } 443 | 444 | $this->addRequirement( 445 | isset($timezones[@date_default_timezone_get()]), 446 | sprintf('Configured default timezone "%s" must be supported by your installation of PHP', @date_default_timezone_get()), 447 | 'Your default timezone is not supported by PHP. Check for typos in your php.ini file and have a look at the list of deprecated timezones at http://php.net/manual/en/timezones.others.php.' 448 | ); 449 | } 450 | 451 | $this->addRequirement( 452 | function_exists('iconv'), 453 | 'iconv() must be available', 454 | 'Install and enable the iconv extension.' 455 | ); 456 | 457 | $this->addRequirement( 458 | function_exists('json_encode'), 459 | 'json_encode() must be available', 460 | 'Install and enable the JSON extension.' 461 | ); 462 | 463 | $this->addRequirement( 464 | function_exists('session_start'), 465 | 'session_start() must be available', 466 | 'Install and enable the session extension.' 467 | ); 468 | 469 | $this->addRequirement( 470 | function_exists('ctype_alpha'), 471 | 'ctype_alpha() must be available', 472 | 'Install and enable the ctype extension.' 473 | ); 474 | 475 | $this->addRequirement( 476 | function_exists('token_get_all'), 477 | 'token_get_all() must be available', 478 | 'Install and enable the Tokenizer extension.' 479 | ); 480 | 481 | $this->addRequirement( 482 | function_exists('simplexml_import_dom'), 483 | 'simplexml_import_dom() must be available', 484 | 'Install and enable the SimpleXML extension.' 485 | ); 486 | 487 | if (function_exists('apc_store') && ini_get('apc.enabled')) { 488 | if (version_compare($installedPhpVersion, '5.4.0', '>=')) { 489 | $this->addRequirement( 490 | version_compare(phpversion('apc'), '3.1.13', '>='), 491 | 'APC version must be at least 3.1.13 when using PHP 5.4', 492 | 'Upgrade your APC extension (3.1.13+).' 493 | ); 494 | } else { 495 | $this->addRequirement( 496 | version_compare(phpversion('apc'), '3.0.17', '>='), 497 | 'APC version must be at least 3.0.17', 498 | 'Upgrade your APC extension (3.0.17+).' 499 | ); 500 | } 501 | } 502 | 503 | $this->addPhpIniRequirement('detect_unicode', false); 504 | 505 | if (extension_loaded('suhosin')) { 506 | $this->addPhpIniRequirement( 507 | 'suhosin.executor.include.whitelist', 508 | create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'), 509 | false, 510 | 'suhosin.executor.include.whitelist must be configured correctly in php.ini', 511 | 'Add "phar" to suhosin.executor.include.whitelist in php.ini*.' 512 | ); 513 | } 514 | 515 | if (extension_loaded('xdebug')) { 516 | $this->addPhpIniRequirement( 517 | 'xdebug.show_exception_trace', false, true 518 | ); 519 | 520 | $this->addPhpIniRequirement( 521 | 'xdebug.scream', false, true 522 | ); 523 | 524 | $this->addPhpIniRecommendation( 525 | 'xdebug.max_nesting_level', 526 | create_function('$cfgValue', 'return $cfgValue > 100;'), 527 | true, 528 | 'xdebug.max_nesting_level should be above 100 in php.ini', 529 | 'Set "xdebug.max_nesting_level" to e.g. "250" in php.ini* to stop Xdebug\'s infinite recursion protection erroneously throwing a fatal error in your project.' 530 | ); 531 | } 532 | 533 | $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null; 534 | 535 | $this->addRequirement( 536 | null !== $pcreVersion, 537 | 'PCRE extension must be available', 538 | 'Install the PCRE extension (version 8.0+).' 539 | ); 540 | 541 | if (extension_loaded('mbstring')) { 542 | $this->addPhpIniRequirement( 543 | 'mbstring.func_overload', 544 | create_function('$cfgValue', 'return (int) $cfgValue === 0;'), 545 | true, 546 | 'string functions should not be overloaded', 547 | 'Set "mbstring.func_overload" to 0 in php.ini* to disable function overloading by the mbstring extension.' 548 | ); 549 | } 550 | 551 | /* optional recommendations follow */ 552 | 553 | if (file_exists(__DIR__.'/../vendor/composer')) { 554 | require_once __DIR__.'/../vendor/autoload.php'; 555 | 556 | try { 557 | $r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle'); 558 | 559 | $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php'); 560 | } catch (ReflectionException $e) { 561 | $contents = ''; 562 | } 563 | $this->addRecommendation( 564 | file_get_contents(__FILE__) === $contents, 565 | 'Requirements file should be up-to-date', 566 | 'Your requirements file is outdated. Run composer install and re-check your configuration.' 567 | ); 568 | } 569 | 570 | $this->addRecommendation( 571 | version_compare($installedPhpVersion, '5.3.4', '>='), 572 | 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions', 573 | 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.' 574 | ); 575 | 576 | $this->addRecommendation( 577 | version_compare($installedPhpVersion, '5.3.8', '>='), 578 | 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156', 579 | 'Install PHP 5.3.8 or newer if your project uses annotations.' 580 | ); 581 | 582 | $this->addRecommendation( 583 | version_compare($installedPhpVersion, '5.4.0', '!='), 584 | 'You should not use PHP 5.4.0 due to the PHP bug #61453', 585 | 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.' 586 | ); 587 | 588 | $this->addRecommendation( 589 | version_compare($installedPhpVersion, '5.4.11', '>='), 590 | 'When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)', 591 | 'Install PHP 5.4.11 or newer if your project uses the logout handler from the Symfony Security Component.' 592 | ); 593 | 594 | $this->addRecommendation( 595 | (version_compare($installedPhpVersion, '5.3.18', '>=') && version_compare($installedPhpVersion, '5.4.0', '<')) 596 | || 597 | version_compare($installedPhpVersion, '5.4.8', '>='), 598 | 'You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909', 599 | 'Install PHP 5.3.18+ or PHP 5.4.8+ if you want nice error messages for all fatal errors in the development environment.' 600 | ); 601 | 602 | if (null !== $pcreVersion) { 603 | $this->addRecommendation( 604 | $pcreVersion >= 8.0, 605 | sprintf('PCRE extension should be at least version 8.0 (%s installed)', $pcreVersion), 606 | 'PCRE 8.0+ is preconfigured in PHP since 5.3.2 but you are using an outdated version of it. Symfony probably works anyway but it is recommended to upgrade your PCRE extension.' 607 | ); 608 | } 609 | 610 | $this->addRecommendation( 611 | class_exists('DomDocument'), 612 | 'PHP-DOM and PHP-XML modules should be installed', 613 | 'Install and enable the PHP-DOM and the PHP-XML modules.' 614 | ); 615 | 616 | $this->addRecommendation( 617 | function_exists('mb_strlen'), 618 | 'mb_strlen() should be available', 619 | 'Install and enable the mbstring extension.' 620 | ); 621 | 622 | $this->addRecommendation( 623 | function_exists('iconv'), 624 | 'iconv() should be available', 625 | 'Install and enable the iconv extension.' 626 | ); 627 | 628 | $this->addRecommendation( 629 | function_exists('utf8_decode'), 630 | 'utf8_decode() should be available', 631 | 'Install and enable the XML extension.' 632 | ); 633 | 634 | $this->addRecommendation( 635 | function_exists('filter_var'), 636 | 'filter_var() should be available', 637 | 'Install and enable the filter extension.' 638 | ); 639 | 640 | if (!defined('PHP_WINDOWS_VERSION_BUILD')) { 641 | $this->addRecommendation( 642 | function_exists('posix_isatty'), 643 | 'posix_isatty() should be available', 644 | 'Install and enable the php_posix extension (used to colorize the CLI output).' 645 | ); 646 | } 647 | 648 | $this->addRecommendation( 649 | extension_loaded('intl'), 650 | 'intl extension should be available', 651 | 'Install and enable the intl extension (used for validators).' 652 | ); 653 | 654 | if (extension_loaded('intl')) { 655 | // in some WAMP server installations, new Collator() returns null 656 | $this->addRecommendation( 657 | null !== new Collator('fr_FR'), 658 | 'intl extension should be correctly configured', 659 | 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.' 660 | ); 661 | 662 | // check for compatible ICU versions (only done when you have the intl extension) 663 | if (defined('INTL_ICU_VERSION')) { 664 | $version = INTL_ICU_VERSION; 665 | } else { 666 | $reflector = new ReflectionExtension('intl'); 667 | 668 | ob_start(); 669 | $reflector->info(); 670 | $output = strip_tags(ob_get_clean()); 671 | 672 | preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches); 673 | $version = $matches[1]; 674 | } 675 | 676 | $this->addRecommendation( 677 | version_compare($version, '4.0', '>='), 678 | 'intl ICU version should be at least 4+', 679 | 'Upgrade your intl extension with a newer ICU version (4+).' 680 | ); 681 | 682 | if (class_exists('Symfony\Component\Intl\Intl')) { 683 | $this->addRecommendation( 684 | \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(), 685 | sprintf('intl ICU version installed on your system (%s) should match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), 686 | 'In most cases you should be fine, but please verify there is no inconsistencies between data provided by Symfony and the intl extension. See https://github.com/symfony/symfony/issues/15007 for an example of inconsistencies you might run into.' 687 | ); 688 | } 689 | 690 | $this->addPhpIniRecommendation( 691 | 'intl.error_level', 692 | create_function('$cfgValue', 'return (int) $cfgValue === 0;'), 693 | true, 694 | 'intl.error_level should be 0 in php.ini', 695 | 'Set "intl.error_level" to "0" in php.ini* to inhibit the messages when an error occurs in ICU functions.' 696 | ); 697 | } 698 | 699 | $accelerator = 700 | (extension_loaded('eaccelerator') && ini_get('eaccelerator.enable')) 701 | || 702 | (extension_loaded('apc') && ini_get('apc.enabled')) 703 | || 704 | (extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable')) 705 | || 706 | (extension_loaded('Zend OPcache') && ini_get('opcache.enable')) 707 | || 708 | (extension_loaded('xcache') && ini_get('xcache.cacher')) 709 | || 710 | (extension_loaded('wincache') && ini_get('wincache.ocenabled')) 711 | ; 712 | 713 | $this->addRecommendation( 714 | $accelerator, 715 | 'a PHP accelerator should be installed', 716 | 'Install and/or enable a PHP accelerator (highly recommended).' 717 | ); 718 | 719 | if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 720 | $this->addRecommendation( 721 | $this->getRealpathCacheSize() > 1000, 722 | 'realpath_cache_size should be above 1024 in php.ini', 723 | 'Set "realpath_cache_size" to e.g. "1024" in php.ini* to improve performance on windows.' 724 | ); 725 | } 726 | 727 | $this->addPhpIniRecommendation('short_open_tag', false); 728 | 729 | $this->addPhpIniRecommendation('magic_quotes_gpc', false, true); 730 | 731 | $this->addPhpIniRecommendation('register_globals', false, true); 732 | 733 | $this->addPhpIniRecommendation('session.auto_start', false); 734 | 735 | $this->addRecommendation( 736 | class_exists('PDO'), 737 | 'PDO should be installed', 738 | 'Install PDO (mandatory for Doctrine).' 739 | ); 740 | 741 | if (class_exists('PDO')) { 742 | $drivers = PDO::getAvailableDrivers(); 743 | $this->addRecommendation( 744 | count($drivers) > 0, 745 | sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'), 746 | 'Install PDO drivers (mandatory for Doctrine).' 747 | ); 748 | } 749 | } 750 | 751 | /** 752 | * Loads realpath_cache_size from php.ini and converts it to int. 753 | * 754 | * (e.g. 16k is converted to 16384 int) 755 | * 756 | * @return int 757 | */ 758 | protected function getRealpathCacheSize() 759 | { 760 | $size = ini_get('realpath_cache_size'); 761 | $size = trim($size); 762 | $unit = strtolower(substr($size, -1, 1)); 763 | switch ($unit) { 764 | case 'g': 765 | return $size * 1024 * 1024 * 1024; 766 | case 'm': 767 | return $size * 1024 * 1024; 768 | case 'k': 769 | return $size * 1024; 770 | default: 771 | return (int) $size; 772 | } 773 | } 774 | } 775 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "c103b7600c165611615028d5933aad3d", 8 | "content-hash": "bcdc48f2d71c987884e3c63c47ed2890", 9 | "packages": [ 10 | { 11 | "name": "doctrine/annotations", 12 | "version": "v1.2.7", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/annotations.git", 16 | "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", 21 | "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "doctrine/lexer": "1.*", 26 | "php": ">=5.3.2" 27 | }, 28 | "require-dev": { 29 | "doctrine/cache": "1.*", 30 | "phpunit/phpunit": "4.*" 31 | }, 32 | "type": "library", 33 | "extra": { 34 | "branch-alias": { 35 | "dev-master": "1.3.x-dev" 36 | } 37 | }, 38 | "autoload": { 39 | "psr-0": { 40 | "Doctrine\\Common\\Annotations\\": "lib/" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Roman Borschel", 50 | "email": "roman@code-factory.org" 51 | }, 52 | { 53 | "name": "Benjamin Eberlei", 54 | "email": "kontakt@beberlei.de" 55 | }, 56 | { 57 | "name": "Guilherme Blanco", 58 | "email": "guilhermeblanco@gmail.com" 59 | }, 60 | { 61 | "name": "Jonathan Wage", 62 | "email": "jonwage@gmail.com" 63 | }, 64 | { 65 | "name": "Johannes Schmitt", 66 | "email": "schmittjoh@gmail.com" 67 | } 68 | ], 69 | "description": "Docblock Annotations Parser", 70 | "homepage": "http://www.doctrine-project.org", 71 | "keywords": [ 72 | "annotations", 73 | "docblock", 74 | "parser" 75 | ], 76 | "time": "2015-08-31 12:32:49" 77 | }, 78 | { 79 | "name": "doctrine/cache", 80 | "version": "v1.6.0", 81 | "source": { 82 | "type": "git", 83 | "url": "https://github.com/doctrine/cache.git", 84 | "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6" 85 | }, 86 | "dist": { 87 | "type": "zip", 88 | "url": "https://api.github.com/repos/doctrine/cache/zipball/f8af318d14bdb0eff0336795b428b547bd39ccb6", 89 | "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6", 90 | "shasum": "" 91 | }, 92 | "require": { 93 | "php": "~5.5|~7.0" 94 | }, 95 | "conflict": { 96 | "doctrine/common": ">2.2,<2.4" 97 | }, 98 | "require-dev": { 99 | "phpunit/phpunit": "~4.8|~5.0", 100 | "predis/predis": "~1.0", 101 | "satooshi/php-coveralls": "~0.6" 102 | }, 103 | "type": "library", 104 | "extra": { 105 | "branch-alias": { 106 | "dev-master": "1.6.x-dev" 107 | } 108 | }, 109 | "autoload": { 110 | "psr-4": { 111 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 112 | } 113 | }, 114 | "notification-url": "https://packagist.org/downloads/", 115 | "license": [ 116 | "MIT" 117 | ], 118 | "authors": [ 119 | { 120 | "name": "Roman Borschel", 121 | "email": "roman@code-factory.org" 122 | }, 123 | { 124 | "name": "Benjamin Eberlei", 125 | "email": "kontakt@beberlei.de" 126 | }, 127 | { 128 | "name": "Guilherme Blanco", 129 | "email": "guilhermeblanco@gmail.com" 130 | }, 131 | { 132 | "name": "Jonathan Wage", 133 | "email": "jonwage@gmail.com" 134 | }, 135 | { 136 | "name": "Johannes Schmitt", 137 | "email": "schmittjoh@gmail.com" 138 | } 139 | ], 140 | "description": "Caching library offering an object-oriented API for many cache backends", 141 | "homepage": "http://www.doctrine-project.org", 142 | "keywords": [ 143 | "cache", 144 | "caching" 145 | ], 146 | "time": "2015-12-31 16:37:02" 147 | }, 148 | { 149 | "name": "doctrine/collections", 150 | "version": "v1.3.0", 151 | "source": { 152 | "type": "git", 153 | "url": "https://github.com/doctrine/collections.git", 154 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" 155 | }, 156 | "dist": { 157 | "type": "zip", 158 | "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 159 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 160 | "shasum": "" 161 | }, 162 | "require": { 163 | "php": ">=5.3.2" 164 | }, 165 | "require-dev": { 166 | "phpunit/phpunit": "~4.0" 167 | }, 168 | "type": "library", 169 | "extra": { 170 | "branch-alias": { 171 | "dev-master": "1.2.x-dev" 172 | } 173 | }, 174 | "autoload": { 175 | "psr-0": { 176 | "Doctrine\\Common\\Collections\\": "lib/" 177 | } 178 | }, 179 | "notification-url": "https://packagist.org/downloads/", 180 | "license": [ 181 | "MIT" 182 | ], 183 | "authors": [ 184 | { 185 | "name": "Roman Borschel", 186 | "email": "roman@code-factory.org" 187 | }, 188 | { 189 | "name": "Benjamin Eberlei", 190 | "email": "kontakt@beberlei.de" 191 | }, 192 | { 193 | "name": "Guilherme Blanco", 194 | "email": "guilhermeblanco@gmail.com" 195 | }, 196 | { 197 | "name": "Jonathan Wage", 198 | "email": "jonwage@gmail.com" 199 | }, 200 | { 201 | "name": "Johannes Schmitt", 202 | "email": "schmittjoh@gmail.com" 203 | } 204 | ], 205 | "description": "Collections Abstraction library", 206 | "homepage": "http://www.doctrine-project.org", 207 | "keywords": [ 208 | "array", 209 | "collections", 210 | "iterator" 211 | ], 212 | "time": "2015-04-14 22:21:58" 213 | }, 214 | { 215 | "name": "doctrine/common", 216 | "version": "v2.6.1", 217 | "source": { 218 | "type": "git", 219 | "url": "https://github.com/doctrine/common.git", 220 | "reference": "a579557bc689580c19fee4e27487a67fe60defc0" 221 | }, 222 | "dist": { 223 | "type": "zip", 224 | "url": "https://api.github.com/repos/doctrine/common/zipball/a579557bc689580c19fee4e27487a67fe60defc0", 225 | "reference": "a579557bc689580c19fee4e27487a67fe60defc0", 226 | "shasum": "" 227 | }, 228 | "require": { 229 | "doctrine/annotations": "1.*", 230 | "doctrine/cache": "1.*", 231 | "doctrine/collections": "1.*", 232 | "doctrine/inflector": "1.*", 233 | "doctrine/lexer": "1.*", 234 | "php": "~5.5|~7.0" 235 | }, 236 | "require-dev": { 237 | "phpunit/phpunit": "~4.8|~5.0" 238 | }, 239 | "type": "library", 240 | "extra": { 241 | "branch-alias": { 242 | "dev-master": "2.7.x-dev" 243 | } 244 | }, 245 | "autoload": { 246 | "psr-4": { 247 | "Doctrine\\Common\\": "lib/Doctrine/Common" 248 | } 249 | }, 250 | "notification-url": "https://packagist.org/downloads/", 251 | "license": [ 252 | "MIT" 253 | ], 254 | "authors": [ 255 | { 256 | "name": "Roman Borschel", 257 | "email": "roman@code-factory.org" 258 | }, 259 | { 260 | "name": "Benjamin Eberlei", 261 | "email": "kontakt@beberlei.de" 262 | }, 263 | { 264 | "name": "Guilherme Blanco", 265 | "email": "guilhermeblanco@gmail.com" 266 | }, 267 | { 268 | "name": "Jonathan Wage", 269 | "email": "jonwage@gmail.com" 270 | }, 271 | { 272 | "name": "Johannes Schmitt", 273 | "email": "schmittjoh@gmail.com" 274 | } 275 | ], 276 | "description": "Common Library for Doctrine projects", 277 | "homepage": "http://www.doctrine-project.org", 278 | "keywords": [ 279 | "annotations", 280 | "collections", 281 | "eventmanager", 282 | "persistence", 283 | "spl" 284 | ], 285 | "time": "2015-12-25 13:18:31" 286 | }, 287 | { 288 | "name": "doctrine/dbal", 289 | "version": "v2.5.4", 290 | "source": { 291 | "type": "git", 292 | "url": "https://github.com/doctrine/dbal.git", 293 | "reference": "abbdfd1cff43a7b99d027af3be709bc8fc7d4769" 294 | }, 295 | "dist": { 296 | "type": "zip", 297 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/abbdfd1cff43a7b99d027af3be709bc8fc7d4769", 298 | "reference": "abbdfd1cff43a7b99d027af3be709bc8fc7d4769", 299 | "shasum": "" 300 | }, 301 | "require": { 302 | "doctrine/common": ">=2.4,<2.7-dev", 303 | "php": ">=5.3.2" 304 | }, 305 | "require-dev": { 306 | "phpunit/phpunit": "4.*", 307 | "symfony/console": "2.*" 308 | }, 309 | "suggest": { 310 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 311 | }, 312 | "bin": [ 313 | "bin/doctrine-dbal" 314 | ], 315 | "type": "library", 316 | "extra": { 317 | "branch-alias": { 318 | "dev-master": "2.5.x-dev" 319 | } 320 | }, 321 | "autoload": { 322 | "psr-0": { 323 | "Doctrine\\DBAL\\": "lib/" 324 | } 325 | }, 326 | "notification-url": "https://packagist.org/downloads/", 327 | "license": [ 328 | "MIT" 329 | ], 330 | "authors": [ 331 | { 332 | "name": "Roman Borschel", 333 | "email": "roman@code-factory.org" 334 | }, 335 | { 336 | "name": "Benjamin Eberlei", 337 | "email": "kontakt@beberlei.de" 338 | }, 339 | { 340 | "name": "Guilherme Blanco", 341 | "email": "guilhermeblanco@gmail.com" 342 | }, 343 | { 344 | "name": "Jonathan Wage", 345 | "email": "jonwage@gmail.com" 346 | } 347 | ], 348 | "description": "Database Abstraction Layer", 349 | "homepage": "http://www.doctrine-project.org", 350 | "keywords": [ 351 | "database", 352 | "dbal", 353 | "persistence", 354 | "queryobject" 355 | ], 356 | "time": "2016-01-05 22:11:12" 357 | }, 358 | { 359 | "name": "doctrine/doctrine-bundle", 360 | "version": "1.6.2", 361 | "source": { 362 | "type": "git", 363 | "url": "https://github.com/doctrine/DoctrineBundle.git", 364 | "reference": "e9c2ccf573b59b7cea566390f34254fed3c20ed9" 365 | }, 366 | "dist": { 367 | "type": "zip", 368 | "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/e9c2ccf573b59b7cea566390f34254fed3c20ed9", 369 | "reference": "e9c2ccf573b59b7cea566390f34254fed3c20ed9", 370 | "shasum": "" 371 | }, 372 | "require": { 373 | "doctrine/dbal": "~2.3", 374 | "doctrine/doctrine-cache-bundle": "~1.0", 375 | "jdorn/sql-formatter": "~1.1", 376 | "php": ">=5.3.2", 377 | "symfony/console": "~2.3|~3.0", 378 | "symfony/doctrine-bridge": "~2.2|~3.0", 379 | "symfony/framework-bundle": "~2.3|~3.0" 380 | }, 381 | "require-dev": { 382 | "doctrine/orm": "~2.3", 383 | "phpunit/phpunit": "~4", 384 | "satooshi/php-coveralls": "~0.6.1", 385 | "symfony/phpunit-bridge": "~2.7|~3.0", 386 | "symfony/validator": "~2.2|~3.0", 387 | "symfony/yaml": "~2.2|~3.0", 388 | "twig/twig": "~1.10" 389 | }, 390 | "suggest": { 391 | "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", 392 | "symfony/web-profiler-bundle": "to use the data collector" 393 | }, 394 | "type": "symfony-bundle", 395 | "extra": { 396 | "branch-alias": { 397 | "dev-master": "1.6.x-dev" 398 | } 399 | }, 400 | "autoload": { 401 | "psr-4": { 402 | "Doctrine\\Bundle\\DoctrineBundle\\": "" 403 | } 404 | }, 405 | "notification-url": "https://packagist.org/downloads/", 406 | "license": [ 407 | "MIT" 408 | ], 409 | "authors": [ 410 | { 411 | "name": "Symfony Community", 412 | "homepage": "http://symfony.com/contributors" 413 | }, 414 | { 415 | "name": "Benjamin Eberlei", 416 | "email": "kontakt@beberlei.de" 417 | }, 418 | { 419 | "name": "Doctrine Project", 420 | "homepage": "http://www.doctrine-project.org/" 421 | }, 422 | { 423 | "name": "Fabien Potencier", 424 | "email": "fabien@symfony.com" 425 | } 426 | ], 427 | "description": "Symfony DoctrineBundle", 428 | "homepage": "http://www.doctrine-project.org", 429 | "keywords": [ 430 | "database", 431 | "dbal", 432 | "orm", 433 | "persistence" 434 | ], 435 | "time": "2016-01-10 17:21:44" 436 | }, 437 | { 438 | "name": "doctrine/doctrine-cache-bundle", 439 | "version": "1.3.0", 440 | "source": { 441 | "type": "git", 442 | "url": "https://github.com/doctrine/DoctrineCacheBundle.git", 443 | "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504" 444 | }, 445 | "dist": { 446 | "type": "zip", 447 | "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/18c600a9b82f6454d2e81ca4957cdd56a1cf3504", 448 | "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504", 449 | "shasum": "" 450 | }, 451 | "require": { 452 | "doctrine/cache": "^1.4.2", 453 | "doctrine/inflector": "~1.0", 454 | "php": ">=5.3.2", 455 | "symfony/doctrine-bridge": "~2.2|~3.0" 456 | }, 457 | "require-dev": { 458 | "instaclick/coding-standard": "~1.1", 459 | "instaclick/object-calisthenics-sniffs": "dev-master", 460 | "instaclick/symfony2-coding-standard": "dev-remaster", 461 | "phpunit/phpunit": "~4", 462 | "predis/predis": "~0.8", 463 | "satooshi/php-coveralls": "~0.6.1", 464 | "squizlabs/php_codesniffer": "~1.5", 465 | "symfony/console": "~2.2|~3.0", 466 | "symfony/finder": "~2.2|~3.0", 467 | "symfony/framework-bundle": "~2.2|~3.0", 468 | "symfony/phpunit-bridge": "~2.7|~3.0", 469 | "symfony/security-acl": "~2.3|~3.0", 470 | "symfony/validator": "~2.2|~3.0", 471 | "symfony/yaml": "~2.2|~3.0" 472 | }, 473 | "suggest": { 474 | "symfony/security-acl": "For using this bundle to cache ACLs" 475 | }, 476 | "type": "symfony-bundle", 477 | "extra": { 478 | "branch-alias": { 479 | "dev-master": "1.2.x-dev" 480 | } 481 | }, 482 | "autoload": { 483 | "psr-4": { 484 | "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" 485 | } 486 | }, 487 | "notification-url": "https://packagist.org/downloads/", 488 | "license": [ 489 | "MIT" 490 | ], 491 | "authors": [ 492 | { 493 | "name": "Symfony Community", 494 | "homepage": "http://symfony.com/contributors" 495 | }, 496 | { 497 | "name": "Benjamin Eberlei", 498 | "email": "kontakt@beberlei.de" 499 | }, 500 | { 501 | "name": "Fabio B. Silva", 502 | "email": "fabio.bat.silva@gmail.com" 503 | }, 504 | { 505 | "name": "Guilherme Blanco", 506 | "email": "guilhermeblanco@hotmail.com" 507 | }, 508 | { 509 | "name": "Doctrine Project", 510 | "homepage": "http://www.doctrine-project.org/" 511 | }, 512 | { 513 | "name": "Fabien Potencier", 514 | "email": "fabien@symfony.com" 515 | } 516 | ], 517 | "description": "Symfony Bundle for Doctrine Cache", 518 | "homepage": "http://www.doctrine-project.org", 519 | "keywords": [ 520 | "cache", 521 | "caching" 522 | ], 523 | "time": "2016-01-26 17:28:51" 524 | }, 525 | { 526 | "name": "doctrine/inflector", 527 | "version": "v1.1.0", 528 | "source": { 529 | "type": "git", 530 | "url": "https://github.com/doctrine/inflector.git", 531 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 532 | }, 533 | "dist": { 534 | "type": "zip", 535 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 536 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 537 | "shasum": "" 538 | }, 539 | "require": { 540 | "php": ">=5.3.2" 541 | }, 542 | "require-dev": { 543 | "phpunit/phpunit": "4.*" 544 | }, 545 | "type": "library", 546 | "extra": { 547 | "branch-alias": { 548 | "dev-master": "1.1.x-dev" 549 | } 550 | }, 551 | "autoload": { 552 | "psr-0": { 553 | "Doctrine\\Common\\Inflector\\": "lib/" 554 | } 555 | }, 556 | "notification-url": "https://packagist.org/downloads/", 557 | "license": [ 558 | "MIT" 559 | ], 560 | "authors": [ 561 | { 562 | "name": "Roman Borschel", 563 | "email": "roman@code-factory.org" 564 | }, 565 | { 566 | "name": "Benjamin Eberlei", 567 | "email": "kontakt@beberlei.de" 568 | }, 569 | { 570 | "name": "Guilherme Blanco", 571 | "email": "guilhermeblanco@gmail.com" 572 | }, 573 | { 574 | "name": "Jonathan Wage", 575 | "email": "jonwage@gmail.com" 576 | }, 577 | { 578 | "name": "Johannes Schmitt", 579 | "email": "schmittjoh@gmail.com" 580 | } 581 | ], 582 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 583 | "homepage": "http://www.doctrine-project.org", 584 | "keywords": [ 585 | "inflection", 586 | "pluralize", 587 | "singularize", 588 | "string" 589 | ], 590 | "time": "2015-11-06 14:35:42" 591 | }, 592 | { 593 | "name": "doctrine/instantiator", 594 | "version": "1.0.5", 595 | "source": { 596 | "type": "git", 597 | "url": "https://github.com/doctrine/instantiator.git", 598 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 599 | }, 600 | "dist": { 601 | "type": "zip", 602 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 603 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 604 | "shasum": "" 605 | }, 606 | "require": { 607 | "php": ">=5.3,<8.0-DEV" 608 | }, 609 | "require-dev": { 610 | "athletic/athletic": "~0.1.8", 611 | "ext-pdo": "*", 612 | "ext-phar": "*", 613 | "phpunit/phpunit": "~4.0", 614 | "squizlabs/php_codesniffer": "~2.0" 615 | }, 616 | "type": "library", 617 | "extra": { 618 | "branch-alias": { 619 | "dev-master": "1.0.x-dev" 620 | } 621 | }, 622 | "autoload": { 623 | "psr-4": { 624 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 625 | } 626 | }, 627 | "notification-url": "https://packagist.org/downloads/", 628 | "license": [ 629 | "MIT" 630 | ], 631 | "authors": [ 632 | { 633 | "name": "Marco Pivetta", 634 | "email": "ocramius@gmail.com", 635 | "homepage": "http://ocramius.github.com/" 636 | } 637 | ], 638 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 639 | "homepage": "https://github.com/doctrine/instantiator", 640 | "keywords": [ 641 | "constructor", 642 | "instantiate" 643 | ], 644 | "time": "2015-06-14 21:17:01" 645 | }, 646 | { 647 | "name": "doctrine/lexer", 648 | "version": "v1.0.1", 649 | "source": { 650 | "type": "git", 651 | "url": "https://github.com/doctrine/lexer.git", 652 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 653 | }, 654 | "dist": { 655 | "type": "zip", 656 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 657 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 658 | "shasum": "" 659 | }, 660 | "require": { 661 | "php": ">=5.3.2" 662 | }, 663 | "type": "library", 664 | "extra": { 665 | "branch-alias": { 666 | "dev-master": "1.0.x-dev" 667 | } 668 | }, 669 | "autoload": { 670 | "psr-0": { 671 | "Doctrine\\Common\\Lexer\\": "lib/" 672 | } 673 | }, 674 | "notification-url": "https://packagist.org/downloads/", 675 | "license": [ 676 | "MIT" 677 | ], 678 | "authors": [ 679 | { 680 | "name": "Roman Borschel", 681 | "email": "roman@code-factory.org" 682 | }, 683 | { 684 | "name": "Guilherme Blanco", 685 | "email": "guilhermeblanco@gmail.com" 686 | }, 687 | { 688 | "name": "Johannes Schmitt", 689 | "email": "schmittjoh@gmail.com" 690 | } 691 | ], 692 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 693 | "homepage": "http://www.doctrine-project.org", 694 | "keywords": [ 695 | "lexer", 696 | "parser" 697 | ], 698 | "time": "2014-09-09 13:34:57" 699 | }, 700 | { 701 | "name": "doctrine/orm", 702 | "version": "v2.5.4", 703 | "source": { 704 | "type": "git", 705 | "url": "https://github.com/doctrine/doctrine2.git", 706 | "reference": "bc4ddbfb0114cb33438cc811c9a740d8aa304aab" 707 | }, 708 | "dist": { 709 | "type": "zip", 710 | "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/bc4ddbfb0114cb33438cc811c9a740d8aa304aab", 711 | "reference": "bc4ddbfb0114cb33438cc811c9a740d8aa304aab", 712 | "shasum": "" 713 | }, 714 | "require": { 715 | "doctrine/cache": "~1.4", 716 | "doctrine/collections": "~1.2", 717 | "doctrine/common": ">=2.5-dev,<2.7-dev", 718 | "doctrine/dbal": ">=2.5-dev,<2.6-dev", 719 | "doctrine/instantiator": "~1.0.1", 720 | "ext-pdo": "*", 721 | "php": ">=5.4", 722 | "symfony/console": "~2.5|~3.0" 723 | }, 724 | "require-dev": { 725 | "phpunit/phpunit": "~4.0", 726 | "symfony/yaml": "~2.3|~3.0" 727 | }, 728 | "suggest": { 729 | "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" 730 | }, 731 | "bin": [ 732 | "bin/doctrine", 733 | "bin/doctrine.php" 734 | ], 735 | "type": "library", 736 | "extra": { 737 | "branch-alias": { 738 | "dev-master": "2.6.x-dev" 739 | } 740 | }, 741 | "autoload": { 742 | "psr-0": { 743 | "Doctrine\\ORM\\": "lib/" 744 | } 745 | }, 746 | "notification-url": "https://packagist.org/downloads/", 747 | "license": [ 748 | "MIT" 749 | ], 750 | "authors": [ 751 | { 752 | "name": "Roman Borschel", 753 | "email": "roman@code-factory.org" 754 | }, 755 | { 756 | "name": "Benjamin Eberlei", 757 | "email": "kontakt@beberlei.de" 758 | }, 759 | { 760 | "name": "Guilherme Blanco", 761 | "email": "guilhermeblanco@gmail.com" 762 | }, 763 | { 764 | "name": "Jonathan Wage", 765 | "email": "jonwage@gmail.com" 766 | } 767 | ], 768 | "description": "Object-Relational-Mapper for PHP", 769 | "homepage": "http://www.doctrine-project.org", 770 | "keywords": [ 771 | "database", 772 | "orm" 773 | ], 774 | "time": "2016-01-05 21:34:58" 775 | }, 776 | { 777 | "name": "guzzlehttp/guzzle", 778 | "version": "6.2.0", 779 | "source": { 780 | "type": "git", 781 | "url": "https://github.com/guzzle/guzzle.git", 782 | "reference": "d094e337976dff9d8e2424e8485872194e768662" 783 | }, 784 | "dist": { 785 | "type": "zip", 786 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d094e337976dff9d8e2424e8485872194e768662", 787 | "reference": "d094e337976dff9d8e2424e8485872194e768662", 788 | "shasum": "" 789 | }, 790 | "require": { 791 | "guzzlehttp/promises": "~1.0", 792 | "guzzlehttp/psr7": "~1.1", 793 | "php": ">=5.5.0" 794 | }, 795 | "require-dev": { 796 | "ext-curl": "*", 797 | "phpunit/phpunit": "~4.0", 798 | "psr/log": "~1.0" 799 | }, 800 | "type": "library", 801 | "extra": { 802 | "branch-alias": { 803 | "dev-master": "6.2-dev" 804 | } 805 | }, 806 | "autoload": { 807 | "files": [ 808 | "src/functions_include.php" 809 | ], 810 | "psr-4": { 811 | "GuzzleHttp\\": "src/" 812 | } 813 | }, 814 | "notification-url": "https://packagist.org/downloads/", 815 | "license": [ 816 | "MIT" 817 | ], 818 | "authors": [ 819 | { 820 | "name": "Michael Dowling", 821 | "email": "mtdowling@gmail.com", 822 | "homepage": "https://github.com/mtdowling" 823 | } 824 | ], 825 | "description": "Guzzle is a PHP HTTP client library", 826 | "homepage": "http://guzzlephp.org/", 827 | "keywords": [ 828 | "client", 829 | "curl", 830 | "framework", 831 | "http", 832 | "http client", 833 | "rest", 834 | "web service" 835 | ], 836 | "time": "2016-03-21 20:02:09" 837 | }, 838 | { 839 | "name": "guzzlehttp/promises", 840 | "version": "1.2.0", 841 | "source": { 842 | "type": "git", 843 | "url": "https://github.com/guzzle/promises.git", 844 | "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579" 845 | }, 846 | "dist": { 847 | "type": "zip", 848 | "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579", 849 | "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579", 850 | "shasum": "" 851 | }, 852 | "require": { 853 | "php": ">=5.5.0" 854 | }, 855 | "require-dev": { 856 | "phpunit/phpunit": "~4.0" 857 | }, 858 | "type": "library", 859 | "extra": { 860 | "branch-alias": { 861 | "dev-master": "1.0-dev" 862 | } 863 | }, 864 | "autoload": { 865 | "psr-4": { 866 | "GuzzleHttp\\Promise\\": "src/" 867 | }, 868 | "files": [ 869 | "src/functions_include.php" 870 | ] 871 | }, 872 | "notification-url": "https://packagist.org/downloads/", 873 | "license": [ 874 | "MIT" 875 | ], 876 | "authors": [ 877 | { 878 | "name": "Michael Dowling", 879 | "email": "mtdowling@gmail.com", 880 | "homepage": "https://github.com/mtdowling" 881 | } 882 | ], 883 | "description": "Guzzle promises library", 884 | "keywords": [ 885 | "promise" 886 | ], 887 | "time": "2016-05-18 16:56:05" 888 | }, 889 | { 890 | "name": "guzzlehttp/psr7", 891 | "version": "1.3.0", 892 | "source": { 893 | "type": "git", 894 | "url": "https://github.com/guzzle/psr7.git", 895 | "reference": "31382fef2889136415751badebbd1cb022a4ed72" 896 | }, 897 | "dist": { 898 | "type": "zip", 899 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72", 900 | "reference": "31382fef2889136415751badebbd1cb022a4ed72", 901 | "shasum": "" 902 | }, 903 | "require": { 904 | "php": ">=5.4.0", 905 | "psr/http-message": "~1.0" 906 | }, 907 | "provide": { 908 | "psr/http-message-implementation": "1.0" 909 | }, 910 | "require-dev": { 911 | "phpunit/phpunit": "~4.0" 912 | }, 913 | "type": "library", 914 | "extra": { 915 | "branch-alias": { 916 | "dev-master": "1.0-dev" 917 | } 918 | }, 919 | "autoload": { 920 | "psr-4": { 921 | "GuzzleHttp\\Psr7\\": "src/" 922 | }, 923 | "files": [ 924 | "src/functions_include.php" 925 | ] 926 | }, 927 | "notification-url": "https://packagist.org/downloads/", 928 | "license": [ 929 | "MIT" 930 | ], 931 | "authors": [ 932 | { 933 | "name": "Michael Dowling", 934 | "email": "mtdowling@gmail.com", 935 | "homepage": "https://github.com/mtdowling" 936 | } 937 | ], 938 | "description": "PSR-7 message implementation", 939 | "keywords": [ 940 | "http", 941 | "message", 942 | "stream", 943 | "uri" 944 | ], 945 | "time": "2016-04-13 19:56:01" 946 | }, 947 | { 948 | "name": "incenteev/composer-parameter-handler", 949 | "version": "v2.1.2", 950 | "source": { 951 | "type": "git", 952 | "url": "https://github.com/Incenteev/ParameterHandler.git", 953 | "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc" 954 | }, 955 | "dist": { 956 | "type": "zip", 957 | "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", 958 | "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", 959 | "shasum": "" 960 | }, 961 | "require": { 962 | "php": ">=5.3.3", 963 | "symfony/yaml": "~2.3|~3.0" 964 | }, 965 | "require-dev": { 966 | "composer/composer": "1.0.*@dev", 967 | "phpspec/prophecy-phpunit": "~1.0", 968 | "symfony/filesystem": "~2.2" 969 | }, 970 | "type": "library", 971 | "extra": { 972 | "branch-alias": { 973 | "dev-master": "2.1.x-dev" 974 | } 975 | }, 976 | "autoload": { 977 | "psr-4": { 978 | "Incenteev\\ParameterHandler\\": "" 979 | } 980 | }, 981 | "notification-url": "https://packagist.org/downloads/", 982 | "license": [ 983 | "MIT" 984 | ], 985 | "authors": [ 986 | { 987 | "name": "Christophe Coevoet", 988 | "email": "stof@notk.org" 989 | } 990 | ], 991 | "description": "Composer script handling your ignored parameter file", 992 | "homepage": "https://github.com/Incenteev/ParameterHandler", 993 | "keywords": [ 994 | "parameters management" 995 | ], 996 | "time": "2015-11-10 17:04:01" 997 | }, 998 | { 999 | "name": "jdorn/sql-formatter", 1000 | "version": "v1.2.17", 1001 | "source": { 1002 | "type": "git", 1003 | "url": "https://github.com/jdorn/sql-formatter.git", 1004 | "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" 1005 | }, 1006 | "dist": { 1007 | "type": "zip", 1008 | "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", 1009 | "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", 1010 | "shasum": "" 1011 | }, 1012 | "require": { 1013 | "php": ">=5.2.4" 1014 | }, 1015 | "require-dev": { 1016 | "phpunit/phpunit": "3.7.*" 1017 | }, 1018 | "type": "library", 1019 | "extra": { 1020 | "branch-alias": { 1021 | "dev-master": "1.3.x-dev" 1022 | } 1023 | }, 1024 | "autoload": { 1025 | "classmap": [ 1026 | "lib" 1027 | ] 1028 | }, 1029 | "notification-url": "https://packagist.org/downloads/", 1030 | "license": [ 1031 | "MIT" 1032 | ], 1033 | "authors": [ 1034 | { 1035 | "name": "Jeremy Dorn", 1036 | "email": "jeremy@jeremydorn.com", 1037 | "homepage": "http://jeremydorn.com/" 1038 | } 1039 | ], 1040 | "description": "a PHP SQL highlighting library", 1041 | "homepage": "https://github.com/jdorn/sql-formatter/", 1042 | "keywords": [ 1043 | "highlight", 1044 | "sql" 1045 | ], 1046 | "time": "2014-01-12 16:20:24" 1047 | }, 1048 | { 1049 | "name": "league/fractal", 1050 | "version": "0.13.0", 1051 | "source": { 1052 | "type": "git", 1053 | "url": "https://github.com/thephpleague/fractal.git", 1054 | "reference": "3caeefbad51bce7a06947321938128512f42346c" 1055 | }, 1056 | "dist": { 1057 | "type": "zip", 1058 | "url": "https://api.github.com/repos/thephpleague/fractal/zipball/3caeefbad51bce7a06947321938128512f42346c", 1059 | "reference": "3caeefbad51bce7a06947321938128512f42346c", 1060 | "shasum": "" 1061 | }, 1062 | "require": { 1063 | "php": ">=5.4" 1064 | }, 1065 | "require-dev": { 1066 | "illuminate/contracts": "~5.0", 1067 | "mockery/mockery": "~0.9", 1068 | "pagerfanta/pagerfanta": "~1.0.0", 1069 | "phpunit/phpunit": "~4.0", 1070 | "squizlabs/php_codesniffer": "~1.5", 1071 | "zendframework/zend-paginator": "~2.3" 1072 | }, 1073 | "suggest": { 1074 | "illuminate/pagination": "The Illuminate Pagination component.", 1075 | "pagerfanta/pagerfanta": "Pagerfanta Paginator", 1076 | "zendframework/zend-paginator": "Zend Framework Paginator" 1077 | }, 1078 | "type": "library", 1079 | "extra": { 1080 | "branch-alias": { 1081 | "dev-master": "0.13-dev" 1082 | } 1083 | }, 1084 | "autoload": { 1085 | "psr-4": { 1086 | "League\\Fractal\\": "src" 1087 | } 1088 | }, 1089 | "notification-url": "https://packagist.org/downloads/", 1090 | "license": [ 1091 | "MIT" 1092 | ], 1093 | "authors": [ 1094 | { 1095 | "name": "Phil Sturgeon", 1096 | "email": "me@philsturgeon.uk", 1097 | "homepage": "http://philsturgeon.uk/", 1098 | "role": "Developer" 1099 | } 1100 | ], 1101 | "description": "Handle the output of complex data structures ready for API output.", 1102 | "homepage": "http://fractal.thephpleague.com/", 1103 | "keywords": [ 1104 | "api", 1105 | "json", 1106 | "league", 1107 | "rest" 1108 | ], 1109 | "time": "2015-10-07 14:48:58" 1110 | }, 1111 | { 1112 | "name": "monolog/monolog", 1113 | "version": "1.19.0", 1114 | "source": { 1115 | "type": "git", 1116 | "url": "https://github.com/Seldaek/monolog.git", 1117 | "reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf" 1118 | }, 1119 | "dist": { 1120 | "type": "zip", 1121 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5f56ed5212dc509c8dc8caeba2715732abb32dbf", 1122 | "reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf", 1123 | "shasum": "" 1124 | }, 1125 | "require": { 1126 | "php": ">=5.3.0", 1127 | "psr/log": "~1.0" 1128 | }, 1129 | "provide": { 1130 | "psr/log-implementation": "1.0.0" 1131 | }, 1132 | "require-dev": { 1133 | "aws/aws-sdk-php": "^2.4.9", 1134 | "doctrine/couchdb": "~1.0@dev", 1135 | "graylog2/gelf-php": "~1.0", 1136 | "jakub-onderka/php-parallel-lint": "0.9", 1137 | "php-amqplib/php-amqplib": "~2.4", 1138 | "php-console/php-console": "^3.1.3", 1139 | "phpunit/phpunit": "~4.5", 1140 | "phpunit/phpunit-mock-objects": "2.3.0", 1141 | "raven/raven": "^0.13", 1142 | "ruflin/elastica": ">=0.90 <3.0", 1143 | "swiftmailer/swiftmailer": "~5.3" 1144 | }, 1145 | "suggest": { 1146 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 1147 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 1148 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1149 | "ext-mongo": "Allow sending log messages to a MongoDB server", 1150 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1151 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 1152 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 1153 | "php-console/php-console": "Allow sending log messages to Google Chrome", 1154 | "raven/raven": "Allow sending log messages to a Sentry server", 1155 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 1156 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server" 1157 | }, 1158 | "type": "library", 1159 | "extra": { 1160 | "branch-alias": { 1161 | "dev-master": "2.0.x-dev" 1162 | } 1163 | }, 1164 | "autoload": { 1165 | "psr-4": { 1166 | "Monolog\\": "src/Monolog" 1167 | } 1168 | }, 1169 | "notification-url": "https://packagist.org/downloads/", 1170 | "license": [ 1171 | "MIT" 1172 | ], 1173 | "authors": [ 1174 | { 1175 | "name": "Jordi Boggiano", 1176 | "email": "j.boggiano@seld.be", 1177 | "homepage": "http://seld.be" 1178 | } 1179 | ], 1180 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 1181 | "homepage": "http://github.com/Seldaek/monolog", 1182 | "keywords": [ 1183 | "log", 1184 | "logging", 1185 | "psr-3" 1186 | ], 1187 | "time": "2016-04-12 18:29:35" 1188 | }, 1189 | { 1190 | "name": "paragonie/random_compat", 1191 | "version": "v2.0.2", 1192 | "source": { 1193 | "type": "git", 1194 | "url": "https://github.com/paragonie/random_compat.git", 1195 | "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf" 1196 | }, 1197 | "dist": { 1198 | "type": "zip", 1199 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf", 1200 | "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf", 1201 | "shasum": "" 1202 | }, 1203 | "require": { 1204 | "php": ">=5.2.0" 1205 | }, 1206 | "require-dev": { 1207 | "phpunit/phpunit": "4.*|5.*" 1208 | }, 1209 | "suggest": { 1210 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 1211 | }, 1212 | "type": "library", 1213 | "autoload": { 1214 | "files": [ 1215 | "lib/random.php" 1216 | ] 1217 | }, 1218 | "notification-url": "https://packagist.org/downloads/", 1219 | "license": [ 1220 | "MIT" 1221 | ], 1222 | "authors": [ 1223 | { 1224 | "name": "Paragon Initiative Enterprises", 1225 | "email": "security@paragonie.com", 1226 | "homepage": "https://paragonie.com" 1227 | } 1228 | ], 1229 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 1230 | "keywords": [ 1231 | "csprng", 1232 | "pseudorandom", 1233 | "random" 1234 | ], 1235 | "time": "2016-04-03 06:00:07" 1236 | }, 1237 | { 1238 | "name": "psr/http-message", 1239 | "version": "1.0", 1240 | "source": { 1241 | "type": "git", 1242 | "url": "https://github.com/php-fig/http-message.git", 1243 | "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" 1244 | }, 1245 | "dist": { 1246 | "type": "zip", 1247 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", 1248 | "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", 1249 | "shasum": "" 1250 | }, 1251 | "require": { 1252 | "php": ">=5.3.0" 1253 | }, 1254 | "type": "library", 1255 | "extra": { 1256 | "branch-alias": { 1257 | "dev-master": "1.0.x-dev" 1258 | } 1259 | }, 1260 | "autoload": { 1261 | "psr-4": { 1262 | "Psr\\Http\\Message\\": "src/" 1263 | } 1264 | }, 1265 | "notification-url": "https://packagist.org/downloads/", 1266 | "license": [ 1267 | "MIT" 1268 | ], 1269 | "authors": [ 1270 | { 1271 | "name": "PHP-FIG", 1272 | "homepage": "http://www.php-fig.org/" 1273 | } 1274 | ], 1275 | "description": "Common interface for HTTP messages", 1276 | "keywords": [ 1277 | "http", 1278 | "http-message", 1279 | "psr", 1280 | "psr-7", 1281 | "request", 1282 | "response" 1283 | ], 1284 | "time": "2015-05-04 20:22:00" 1285 | }, 1286 | { 1287 | "name": "psr/log", 1288 | "version": "1.0.0", 1289 | "source": { 1290 | "type": "git", 1291 | "url": "https://github.com/php-fig/log.git", 1292 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" 1293 | }, 1294 | "dist": { 1295 | "type": "zip", 1296 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", 1297 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", 1298 | "shasum": "" 1299 | }, 1300 | "type": "library", 1301 | "autoload": { 1302 | "psr-0": { 1303 | "Psr\\Log\\": "" 1304 | } 1305 | }, 1306 | "notification-url": "https://packagist.org/downloads/", 1307 | "license": [ 1308 | "MIT" 1309 | ], 1310 | "authors": [ 1311 | { 1312 | "name": "PHP-FIG", 1313 | "homepage": "http://www.php-fig.org/" 1314 | } 1315 | ], 1316 | "description": "Common interface for logging libraries", 1317 | "keywords": [ 1318 | "log", 1319 | "psr", 1320 | "psr-3" 1321 | ], 1322 | "time": "2012-12-21 11:40:51" 1323 | }, 1324 | { 1325 | "name": "sensio/distribution-bundle", 1326 | "version": "v5.0.6", 1327 | "source": { 1328 | "type": "git", 1329 | "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", 1330 | "reference": "ffe306d09c1f2bad721237f63b2169d1b78253d0" 1331 | }, 1332 | "dist": { 1333 | "type": "zip", 1334 | "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/ffe306d09c1f2bad721237f63b2169d1b78253d0", 1335 | "reference": "ffe306d09c1f2bad721237f63b2169d1b78253d0", 1336 | "shasum": "" 1337 | }, 1338 | "require": { 1339 | "php": ">=5.3.9", 1340 | "sensiolabs/security-checker": "~3.0", 1341 | "symfony/class-loader": "~2.3|~3.0", 1342 | "symfony/config": "~2.3|~3.0", 1343 | "symfony/dependency-injection": "~2.3|~3.0", 1344 | "symfony/filesystem": "~2.3|~3.0", 1345 | "symfony/http-kernel": "~2.3|~3.0", 1346 | "symfony/process": "~2.3|~3.0" 1347 | }, 1348 | "type": "symfony-bundle", 1349 | "extra": { 1350 | "branch-alias": { 1351 | "dev-master": "5.0.x-dev" 1352 | } 1353 | }, 1354 | "autoload": { 1355 | "psr-4": { 1356 | "Sensio\\Bundle\\DistributionBundle\\": "" 1357 | } 1358 | }, 1359 | "notification-url": "https://packagist.org/downloads/", 1360 | "license": [ 1361 | "MIT" 1362 | ], 1363 | "authors": [ 1364 | { 1365 | "name": "Fabien Potencier", 1366 | "email": "fabien@symfony.com" 1367 | } 1368 | ], 1369 | "description": "Base bundle for Symfony Distributions", 1370 | "keywords": [ 1371 | "configuration", 1372 | "distribution" 1373 | ], 1374 | "time": "2016-04-25 20:50:31" 1375 | }, 1376 | { 1377 | "name": "sensio/framework-extra-bundle", 1378 | "version": "v3.0.16", 1379 | "source": { 1380 | "type": "git", 1381 | "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", 1382 | "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546" 1383 | }, 1384 | "dist": { 1385 | "type": "zip", 1386 | "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/507a15f56fa7699f6cc8c2c7de4080b19ce22546", 1387 | "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546", 1388 | "shasum": "" 1389 | }, 1390 | "require": { 1391 | "doctrine/common": "~2.2", 1392 | "symfony/dependency-injection": "~2.3|~3.0", 1393 | "symfony/framework-bundle": "~2.3|~3.0" 1394 | }, 1395 | "require-dev": { 1396 | "symfony/browser-kit": "~2.3|~3.0", 1397 | "symfony/dom-crawler": "~2.3|~3.0", 1398 | "symfony/expression-language": "~2.4|~3.0", 1399 | "symfony/finder": "~2.3|~3.0", 1400 | "symfony/phpunit-bridge": "~2.7|~3.0", 1401 | "symfony/security-bundle": "~2.4|~3.0", 1402 | "symfony/twig-bundle": "~2.3|~3.0", 1403 | "twig/twig": "~1.11|~2.0" 1404 | }, 1405 | "suggest": { 1406 | "symfony/expression-language": "", 1407 | "symfony/psr-http-message-bridge": "To use the PSR-7 converters", 1408 | "symfony/security-bundle": "" 1409 | }, 1410 | "type": "symfony-bundle", 1411 | "extra": { 1412 | "branch-alias": { 1413 | "dev-master": "3.0.x-dev" 1414 | } 1415 | }, 1416 | "autoload": { 1417 | "psr-4": { 1418 | "Sensio\\Bundle\\FrameworkExtraBundle\\": "" 1419 | } 1420 | }, 1421 | "notification-url": "https://packagist.org/downloads/", 1422 | "license": [ 1423 | "MIT" 1424 | ], 1425 | "authors": [ 1426 | { 1427 | "name": "Fabien Potencier", 1428 | "email": "fabien@symfony.com" 1429 | } 1430 | ], 1431 | "description": "This bundle provides a way to configure your controllers with annotations", 1432 | "keywords": [ 1433 | "annotations", 1434 | "controllers" 1435 | ], 1436 | "time": "2016-03-25 17:08:27" 1437 | }, 1438 | { 1439 | "name": "sensiolabs/security-checker", 1440 | "version": "v3.0.2", 1441 | "source": { 1442 | "type": "git", 1443 | "url": "https://github.com/sensiolabs/security-checker.git", 1444 | "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93" 1445 | }, 1446 | "dist": { 1447 | "type": "zip", 1448 | "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/21696b0daa731064c23cfb694c60a2584a7b6e93", 1449 | "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93", 1450 | "shasum": "" 1451 | }, 1452 | "require": { 1453 | "symfony/console": "~2.0|~3.0" 1454 | }, 1455 | "bin": [ 1456 | "security-checker" 1457 | ], 1458 | "type": "library", 1459 | "extra": { 1460 | "branch-alias": { 1461 | "dev-master": "3.0-dev" 1462 | } 1463 | }, 1464 | "autoload": { 1465 | "psr-0": { 1466 | "SensioLabs\\Security": "" 1467 | } 1468 | }, 1469 | "notification-url": "https://packagist.org/downloads/", 1470 | "license": [ 1471 | "MIT" 1472 | ], 1473 | "authors": [ 1474 | { 1475 | "name": "Fabien Potencier", 1476 | "email": "fabien.potencier@gmail.com" 1477 | } 1478 | ], 1479 | "description": "A security checker for your composer.lock", 1480 | "time": "2015-11-07 08:07:40" 1481 | }, 1482 | { 1483 | "name": "swiftmailer/swiftmailer", 1484 | "version": "v5.4.2", 1485 | "source": { 1486 | "type": "git", 1487 | "url": "https://github.com/swiftmailer/swiftmailer.git", 1488 | "reference": "d8db871a54619458a805229a057ea2af33c753e8" 1489 | }, 1490 | "dist": { 1491 | "type": "zip", 1492 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/d8db871a54619458a805229a057ea2af33c753e8", 1493 | "reference": "d8db871a54619458a805229a057ea2af33c753e8", 1494 | "shasum": "" 1495 | }, 1496 | "require": { 1497 | "php": ">=5.3.3" 1498 | }, 1499 | "require-dev": { 1500 | "mockery/mockery": "~0.9.1,<0.9.4" 1501 | }, 1502 | "type": "library", 1503 | "extra": { 1504 | "branch-alias": { 1505 | "dev-master": "5.4-dev" 1506 | } 1507 | }, 1508 | "autoload": { 1509 | "files": [ 1510 | "lib/swift_required.php" 1511 | ] 1512 | }, 1513 | "notification-url": "https://packagist.org/downloads/", 1514 | "license": [ 1515 | "MIT" 1516 | ], 1517 | "authors": [ 1518 | { 1519 | "name": "Chris Corbyn" 1520 | }, 1521 | { 1522 | "name": "Fabien Potencier", 1523 | "email": "fabien@symfony.com" 1524 | } 1525 | ], 1526 | "description": "Swiftmailer, free feature-rich PHP mailer", 1527 | "homepage": "http://swiftmailer.org", 1528 | "keywords": [ 1529 | "email", 1530 | "mail", 1531 | "mailer" 1532 | ], 1533 | "time": "2016-05-01 08:45:47" 1534 | }, 1535 | { 1536 | "name": "symfony/monolog-bundle", 1537 | "version": "2.11.1", 1538 | "source": { 1539 | "type": "git", 1540 | "url": "https://github.com/symfony/monolog-bundle.git", 1541 | "reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00" 1542 | }, 1543 | "dist": { 1544 | "type": "zip", 1545 | "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00", 1546 | "reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00", 1547 | "shasum": "" 1548 | }, 1549 | "require": { 1550 | "monolog/monolog": "~1.18", 1551 | "php": ">=5.3.2", 1552 | "symfony/config": "~2.3|~3.0", 1553 | "symfony/dependency-injection": "~2.3|~3.0", 1554 | "symfony/http-kernel": "~2.3|~3.0", 1555 | "symfony/monolog-bridge": "~2.3|~3.0" 1556 | }, 1557 | "require-dev": { 1558 | "phpunit/phpunit": "^4.8", 1559 | "symfony/console": "~2.3|~3.0", 1560 | "symfony/yaml": "~2.3|~3.0" 1561 | }, 1562 | "type": "symfony-bundle", 1563 | "extra": { 1564 | "branch-alias": { 1565 | "dev-master": "2.x-dev" 1566 | } 1567 | }, 1568 | "autoload": { 1569 | "psr-4": { 1570 | "Symfony\\Bundle\\MonologBundle\\": "" 1571 | } 1572 | }, 1573 | "notification-url": "https://packagist.org/downloads/", 1574 | "license": [ 1575 | "MIT" 1576 | ], 1577 | "authors": [ 1578 | { 1579 | "name": "Symfony Community", 1580 | "homepage": "http://symfony.com/contributors" 1581 | }, 1582 | { 1583 | "name": "Fabien Potencier", 1584 | "email": "fabien@symfony.com" 1585 | } 1586 | ], 1587 | "description": "Symfony MonologBundle", 1588 | "homepage": "http://symfony.com", 1589 | "keywords": [ 1590 | "log", 1591 | "logging" 1592 | ], 1593 | "time": "2016-04-13 16:21:01" 1594 | }, 1595 | { 1596 | "name": "symfony/polyfill-intl-icu", 1597 | "version": "v1.2.0", 1598 | "source": { 1599 | "type": "git", 1600 | "url": "https://github.com/symfony/polyfill-intl-icu.git", 1601 | "reference": "0f8dc2c45f69f8672379e9210bca4a115cd5146f" 1602 | }, 1603 | "dist": { 1604 | "type": "zip", 1605 | "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/0f8dc2c45f69f8672379e9210bca4a115cd5146f", 1606 | "reference": "0f8dc2c45f69f8672379e9210bca4a115cd5146f", 1607 | "shasum": "" 1608 | }, 1609 | "require": { 1610 | "php": ">=5.3.3", 1611 | "symfony/intl": "~2.3|~3.0" 1612 | }, 1613 | "suggest": { 1614 | "ext-intl": "For best performance" 1615 | }, 1616 | "type": "library", 1617 | "extra": { 1618 | "branch-alias": { 1619 | "dev-master": "1.2-dev" 1620 | } 1621 | }, 1622 | "autoload": { 1623 | "files": [ 1624 | "bootstrap.php" 1625 | ] 1626 | }, 1627 | "notification-url": "https://packagist.org/downloads/", 1628 | "license": [ 1629 | "MIT" 1630 | ], 1631 | "authors": [ 1632 | { 1633 | "name": "Nicolas Grekas", 1634 | "email": "p@tchwork.com" 1635 | }, 1636 | { 1637 | "name": "Symfony Community", 1638 | "homepage": "https://symfony.com/contributors" 1639 | } 1640 | ], 1641 | "description": "Symfony polyfill for intl's ICU-related data and classes", 1642 | "homepage": "https://symfony.com", 1643 | "keywords": [ 1644 | "compatibility", 1645 | "icu", 1646 | "intl", 1647 | "polyfill", 1648 | "portable", 1649 | "shim" 1650 | ], 1651 | "time": "2016-05-18 14:26:46" 1652 | }, 1653 | { 1654 | "name": "symfony/polyfill-mbstring", 1655 | "version": "v1.2.0", 1656 | "source": { 1657 | "type": "git", 1658 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1659 | "reference": "dff51f72b0706335131b00a7f49606168c582594" 1660 | }, 1661 | "dist": { 1662 | "type": "zip", 1663 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", 1664 | "reference": "dff51f72b0706335131b00a7f49606168c582594", 1665 | "shasum": "" 1666 | }, 1667 | "require": { 1668 | "php": ">=5.3.3" 1669 | }, 1670 | "suggest": { 1671 | "ext-mbstring": "For best performance" 1672 | }, 1673 | "type": "library", 1674 | "extra": { 1675 | "branch-alias": { 1676 | "dev-master": "1.2-dev" 1677 | } 1678 | }, 1679 | "autoload": { 1680 | "psr-4": { 1681 | "Symfony\\Polyfill\\Mbstring\\": "" 1682 | }, 1683 | "files": [ 1684 | "bootstrap.php" 1685 | ] 1686 | }, 1687 | "notification-url": "https://packagist.org/downloads/", 1688 | "license": [ 1689 | "MIT" 1690 | ], 1691 | "authors": [ 1692 | { 1693 | "name": "Nicolas Grekas", 1694 | "email": "p@tchwork.com" 1695 | }, 1696 | { 1697 | "name": "Symfony Community", 1698 | "homepage": "https://symfony.com/contributors" 1699 | } 1700 | ], 1701 | "description": "Symfony polyfill for the Mbstring extension", 1702 | "homepage": "https://symfony.com", 1703 | "keywords": [ 1704 | "compatibility", 1705 | "mbstring", 1706 | "polyfill", 1707 | "portable", 1708 | "shim" 1709 | ], 1710 | "time": "2016-05-18 14:26:46" 1711 | }, 1712 | { 1713 | "name": "symfony/polyfill-php56", 1714 | "version": "v1.2.0", 1715 | "source": { 1716 | "type": "git", 1717 | "url": "https://github.com/symfony/polyfill-php56.git", 1718 | "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a" 1719 | }, 1720 | "dist": { 1721 | "type": "zip", 1722 | "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a", 1723 | "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a", 1724 | "shasum": "" 1725 | }, 1726 | "require": { 1727 | "php": ">=5.3.3", 1728 | "symfony/polyfill-util": "~1.0" 1729 | }, 1730 | "type": "library", 1731 | "extra": { 1732 | "branch-alias": { 1733 | "dev-master": "1.2-dev" 1734 | } 1735 | }, 1736 | "autoload": { 1737 | "psr-4": { 1738 | "Symfony\\Polyfill\\Php56\\": "" 1739 | }, 1740 | "files": [ 1741 | "bootstrap.php" 1742 | ] 1743 | }, 1744 | "notification-url": "https://packagist.org/downloads/", 1745 | "license": [ 1746 | "MIT" 1747 | ], 1748 | "authors": [ 1749 | { 1750 | "name": "Nicolas Grekas", 1751 | "email": "p@tchwork.com" 1752 | }, 1753 | { 1754 | "name": "Symfony Community", 1755 | "homepage": "https://symfony.com/contributors" 1756 | } 1757 | ], 1758 | "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", 1759 | "homepage": "https://symfony.com", 1760 | "keywords": [ 1761 | "compatibility", 1762 | "polyfill", 1763 | "portable", 1764 | "shim" 1765 | ], 1766 | "time": "2016-05-18 14:26:46" 1767 | }, 1768 | { 1769 | "name": "symfony/polyfill-php70", 1770 | "version": "v1.2.0", 1771 | "source": { 1772 | "type": "git", 1773 | "url": "https://github.com/symfony/polyfill-php70.git", 1774 | "reference": "a42f4b6b05ed458910f8af4c4e1121b0101b2d85" 1775 | }, 1776 | "dist": { 1777 | "type": "zip", 1778 | "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/a42f4b6b05ed458910f8af4c4e1121b0101b2d85", 1779 | "reference": "a42f4b6b05ed458910f8af4c4e1121b0101b2d85", 1780 | "shasum": "" 1781 | }, 1782 | "require": { 1783 | "paragonie/random_compat": "~1.0|~2.0", 1784 | "php": ">=5.3.3" 1785 | }, 1786 | "type": "library", 1787 | "extra": { 1788 | "branch-alias": { 1789 | "dev-master": "1.2-dev" 1790 | } 1791 | }, 1792 | "autoload": { 1793 | "psr-4": { 1794 | "Symfony\\Polyfill\\Php70\\": "" 1795 | }, 1796 | "files": [ 1797 | "bootstrap.php" 1798 | ], 1799 | "classmap": [ 1800 | "Resources/stubs" 1801 | ] 1802 | }, 1803 | "notification-url": "https://packagist.org/downloads/", 1804 | "license": [ 1805 | "MIT" 1806 | ], 1807 | "authors": [ 1808 | { 1809 | "name": "Nicolas Grekas", 1810 | "email": "p@tchwork.com" 1811 | }, 1812 | { 1813 | "name": "Symfony Community", 1814 | "homepage": "https://symfony.com/contributors" 1815 | } 1816 | ], 1817 | "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", 1818 | "homepage": "https://symfony.com", 1819 | "keywords": [ 1820 | "compatibility", 1821 | "polyfill", 1822 | "portable", 1823 | "shim" 1824 | ], 1825 | "time": "2016-05-18 14:26:46" 1826 | }, 1827 | { 1828 | "name": "symfony/polyfill-util", 1829 | "version": "v1.2.0", 1830 | "source": { 1831 | "type": "git", 1832 | "url": "https://github.com/symfony/polyfill-util.git", 1833 | "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99" 1834 | }, 1835 | "dist": { 1836 | "type": "zip", 1837 | "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99", 1838 | "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99", 1839 | "shasum": "" 1840 | }, 1841 | "require": { 1842 | "php": ">=5.3.3" 1843 | }, 1844 | "type": "library", 1845 | "extra": { 1846 | "branch-alias": { 1847 | "dev-master": "1.2-dev" 1848 | } 1849 | }, 1850 | "autoload": { 1851 | "psr-4": { 1852 | "Symfony\\Polyfill\\Util\\": "" 1853 | } 1854 | }, 1855 | "notification-url": "https://packagist.org/downloads/", 1856 | "license": [ 1857 | "MIT" 1858 | ], 1859 | "authors": [ 1860 | { 1861 | "name": "Nicolas Grekas", 1862 | "email": "p@tchwork.com" 1863 | }, 1864 | { 1865 | "name": "Symfony Community", 1866 | "homepage": "https://symfony.com/contributors" 1867 | } 1868 | ], 1869 | "description": "Symfony utilities for portability of PHP codes", 1870 | "homepage": "https://symfony.com", 1871 | "keywords": [ 1872 | "compat", 1873 | "compatibility", 1874 | "polyfill", 1875 | "shim" 1876 | ], 1877 | "time": "2016-05-18 14:26:46" 1878 | }, 1879 | { 1880 | "name": "symfony/swiftmailer-bundle", 1881 | "version": "v2.3.11", 1882 | "source": { 1883 | "type": "git", 1884 | "url": "https://github.com/symfony/swiftmailer-bundle.git", 1885 | "reference": "5e1a90f28213231ceee19c953bbebc5b5b95c690" 1886 | }, 1887 | "dist": { 1888 | "type": "zip", 1889 | "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/5e1a90f28213231ceee19c953bbebc5b5b95c690", 1890 | "reference": "5e1a90f28213231ceee19c953bbebc5b5b95c690", 1891 | "shasum": "" 1892 | }, 1893 | "require": { 1894 | "php": ">=5.3.2", 1895 | "swiftmailer/swiftmailer": ">=4.2.0,~5.0", 1896 | "symfony/config": "~2.3|~3.0", 1897 | "symfony/dependency-injection": "~2.3|~3.0", 1898 | "symfony/http-kernel": "~2.3|~3.0", 1899 | "symfony/yaml": "~2.3|~3.0" 1900 | }, 1901 | "require-dev": { 1902 | "symfony/phpunit-bridge": "~2.7|~3.0" 1903 | }, 1904 | "suggest": { 1905 | "psr/log": "Allows logging" 1906 | }, 1907 | "type": "symfony-bundle", 1908 | "extra": { 1909 | "branch-alias": { 1910 | "dev-master": "2.3-dev" 1911 | } 1912 | }, 1913 | "autoload": { 1914 | "psr-4": { 1915 | "Symfony\\Bundle\\SwiftmailerBundle\\": "" 1916 | } 1917 | }, 1918 | "notification-url": "https://packagist.org/downloads/", 1919 | "license": [ 1920 | "MIT" 1921 | ], 1922 | "authors": [ 1923 | { 1924 | "name": "Symfony Community", 1925 | "homepage": "http://symfony.com/contributors" 1926 | }, 1927 | { 1928 | "name": "Fabien Potencier", 1929 | "email": "fabien@symfony.com" 1930 | } 1931 | ], 1932 | "description": "Symfony SwiftmailerBundle", 1933 | "homepage": "http://symfony.com", 1934 | "time": "2016-01-15 16:41:20" 1935 | }, 1936 | { 1937 | "name": "symfony/symfony", 1938 | "version": "v3.0.6", 1939 | "source": { 1940 | "type": "git", 1941 | "url": "https://github.com/symfony/symfony.git", 1942 | "reference": "a821ed51b87f5ceda834140e5f0c06e9547a86d4" 1943 | }, 1944 | "dist": { 1945 | "type": "zip", 1946 | "url": "https://api.github.com/repos/symfony/symfony/zipball/a821ed51b87f5ceda834140e5f0c06e9547a86d4", 1947 | "reference": "a821ed51b87f5ceda834140e5f0c06e9547a86d4", 1948 | "shasum": "" 1949 | }, 1950 | "require": { 1951 | "doctrine/common": "~2.4", 1952 | "php": ">=5.5.9", 1953 | "psr/log": "~1.0", 1954 | "symfony/polyfill-intl-icu": "~1.0", 1955 | "symfony/polyfill-mbstring": "~1.0", 1956 | "symfony/polyfill-php56": "~1.0", 1957 | "symfony/polyfill-php70": "~1.0", 1958 | "symfony/polyfill-util": "~1.0", 1959 | "twig/twig": "~1.23|~2.0" 1960 | }, 1961 | "conflict": { 1962 | "phpdocumentor/reflection": "<1.0.7" 1963 | }, 1964 | "replace": { 1965 | "symfony/asset": "self.version", 1966 | "symfony/browser-kit": "self.version", 1967 | "symfony/class-loader": "self.version", 1968 | "symfony/config": "self.version", 1969 | "symfony/console": "self.version", 1970 | "symfony/css-selector": "self.version", 1971 | "symfony/debug": "self.version", 1972 | "symfony/debug-bundle": "self.version", 1973 | "symfony/dependency-injection": "self.version", 1974 | "symfony/doctrine-bridge": "self.version", 1975 | "symfony/dom-crawler": "self.version", 1976 | "symfony/event-dispatcher": "self.version", 1977 | "symfony/expression-language": "self.version", 1978 | "symfony/filesystem": "self.version", 1979 | "symfony/finder": "self.version", 1980 | "symfony/form": "self.version", 1981 | "symfony/framework-bundle": "self.version", 1982 | "symfony/http-foundation": "self.version", 1983 | "symfony/http-kernel": "self.version", 1984 | "symfony/intl": "self.version", 1985 | "symfony/ldap": "self.version", 1986 | "symfony/monolog-bridge": "self.version", 1987 | "symfony/options-resolver": "self.version", 1988 | "symfony/process": "self.version", 1989 | "symfony/property-access": "self.version", 1990 | "symfony/property-info": "self.version", 1991 | "symfony/proxy-manager-bridge": "self.version", 1992 | "symfony/routing": "self.version", 1993 | "symfony/security": "self.version", 1994 | "symfony/security-bundle": "self.version", 1995 | "symfony/security-core": "self.version", 1996 | "symfony/security-csrf": "self.version", 1997 | "symfony/security-guard": "self.version", 1998 | "symfony/security-http": "self.version", 1999 | "symfony/serializer": "self.version", 2000 | "symfony/stopwatch": "self.version", 2001 | "symfony/templating": "self.version", 2002 | "symfony/translation": "self.version", 2003 | "symfony/twig-bridge": "self.version", 2004 | "symfony/twig-bundle": "self.version", 2005 | "symfony/validator": "self.version", 2006 | "symfony/var-dumper": "self.version", 2007 | "symfony/web-profiler-bundle": "self.version", 2008 | "symfony/yaml": "self.version" 2009 | }, 2010 | "require-dev": { 2011 | "doctrine/data-fixtures": "1.0.*", 2012 | "doctrine/dbal": "~2.4", 2013 | "doctrine/doctrine-bundle": "~1.4", 2014 | "doctrine/orm": "~2.4,>=2.4.5", 2015 | "egulias/email-validator": "~1.2", 2016 | "monolog/monolog": "~1.11", 2017 | "ocramius/proxy-manager": "~0.4|~1.0|~2.0", 2018 | "phpdocumentor/reflection": "^1.0.7", 2019 | "symfony/polyfill-apcu": "~1.1", 2020 | "symfony/security-acl": "~2.8|~3.0" 2021 | }, 2022 | "type": "library", 2023 | "extra": { 2024 | "branch-alias": { 2025 | "dev-master": "3.0-dev" 2026 | } 2027 | }, 2028 | "autoload": { 2029 | "psr-4": { 2030 | "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", 2031 | "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", 2032 | "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", 2033 | "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", 2034 | "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", 2035 | "Symfony\\Bundle\\": "src/Symfony/Bundle/", 2036 | "Symfony\\Component\\": "src/Symfony/Component/" 2037 | }, 2038 | "classmap": [ 2039 | "src/Symfony/Component/Intl/Resources/stubs" 2040 | ], 2041 | "exclude-from-classmap": [ 2042 | "**/Tests/" 2043 | ] 2044 | }, 2045 | "notification-url": "https://packagist.org/downloads/", 2046 | "license": [ 2047 | "MIT" 2048 | ], 2049 | "authors": [ 2050 | { 2051 | "name": "Fabien Potencier", 2052 | "email": "fabien@symfony.com" 2053 | }, 2054 | { 2055 | "name": "Symfony Community", 2056 | "homepage": "https://symfony.com/contributors" 2057 | } 2058 | ], 2059 | "description": "The Symfony PHP framework", 2060 | "homepage": "https://symfony.com", 2061 | "keywords": [ 2062 | "framework" 2063 | ], 2064 | "time": "2016-05-09 22:13:31" 2065 | }, 2066 | { 2067 | "name": "twig/twig", 2068 | "version": "v1.24.0", 2069 | "source": { 2070 | "type": "git", 2071 | "url": "https://github.com/twigphp/Twig.git", 2072 | "reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8" 2073 | }, 2074 | "dist": { 2075 | "type": "zip", 2076 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8", 2077 | "reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8", 2078 | "shasum": "" 2079 | }, 2080 | "require": { 2081 | "php": ">=5.2.7" 2082 | }, 2083 | "require-dev": { 2084 | "symfony/debug": "~2.7", 2085 | "symfony/phpunit-bridge": "~2.7" 2086 | }, 2087 | "type": "library", 2088 | "extra": { 2089 | "branch-alias": { 2090 | "dev-master": "1.24-dev" 2091 | } 2092 | }, 2093 | "autoload": { 2094 | "psr-0": { 2095 | "Twig_": "lib/" 2096 | } 2097 | }, 2098 | "notification-url": "https://packagist.org/downloads/", 2099 | "license": [ 2100 | "BSD-3-Clause" 2101 | ], 2102 | "authors": [ 2103 | { 2104 | "name": "Fabien Potencier", 2105 | "email": "fabien@symfony.com", 2106 | "homepage": "http://fabien.potencier.org", 2107 | "role": "Lead Developer" 2108 | }, 2109 | { 2110 | "name": "Armin Ronacher", 2111 | "email": "armin.ronacher@active-4.com", 2112 | "role": "Project Founder" 2113 | }, 2114 | { 2115 | "name": "Twig Team", 2116 | "homepage": "http://twig.sensiolabs.org/contributors", 2117 | "role": "Contributors" 2118 | } 2119 | ], 2120 | "description": "Twig, the flexible, fast, and secure template language for PHP", 2121 | "homepage": "http://twig.sensiolabs.org", 2122 | "keywords": [ 2123 | "templating" 2124 | ], 2125 | "time": "2016-01-25 21:22:18" 2126 | } 2127 | ], 2128 | "packages-dev": [ 2129 | { 2130 | "name": "myclabs/deep-copy", 2131 | "version": "1.5.1", 2132 | "source": { 2133 | "type": "git", 2134 | "url": "https://github.com/myclabs/DeepCopy.git", 2135 | "reference": "a8773992b362b58498eed24bf85005f363c34771" 2136 | }, 2137 | "dist": { 2138 | "type": "zip", 2139 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a8773992b362b58498eed24bf85005f363c34771", 2140 | "reference": "a8773992b362b58498eed24bf85005f363c34771", 2141 | "shasum": "" 2142 | }, 2143 | "require": { 2144 | "php": ">=5.4.0" 2145 | }, 2146 | "require-dev": { 2147 | "doctrine/collections": "1.*", 2148 | "phpunit/phpunit": "~4.1" 2149 | }, 2150 | "type": "library", 2151 | "autoload": { 2152 | "psr-4": { 2153 | "DeepCopy\\": "src/DeepCopy/" 2154 | } 2155 | }, 2156 | "notification-url": "https://packagist.org/downloads/", 2157 | "license": [ 2158 | "MIT" 2159 | ], 2160 | "description": "Create deep copies (clones) of your objects", 2161 | "homepage": "https://github.com/myclabs/DeepCopy", 2162 | "keywords": [ 2163 | "clone", 2164 | "copy", 2165 | "duplicate", 2166 | "object", 2167 | "object graph" 2168 | ], 2169 | "time": "2015-11-20 12:04:31" 2170 | }, 2171 | { 2172 | "name": "phpdocumentor/reflection-docblock", 2173 | "version": "2.0.4", 2174 | "source": { 2175 | "type": "git", 2176 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 2177 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" 2178 | }, 2179 | "dist": { 2180 | "type": "zip", 2181 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", 2182 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", 2183 | "shasum": "" 2184 | }, 2185 | "require": { 2186 | "php": ">=5.3.3" 2187 | }, 2188 | "require-dev": { 2189 | "phpunit/phpunit": "~4.0" 2190 | }, 2191 | "suggest": { 2192 | "dflydev/markdown": "~1.0", 2193 | "erusev/parsedown": "~1.0" 2194 | }, 2195 | "type": "library", 2196 | "extra": { 2197 | "branch-alias": { 2198 | "dev-master": "2.0.x-dev" 2199 | } 2200 | }, 2201 | "autoload": { 2202 | "psr-0": { 2203 | "phpDocumentor": [ 2204 | "src/" 2205 | ] 2206 | } 2207 | }, 2208 | "notification-url": "https://packagist.org/downloads/", 2209 | "license": [ 2210 | "MIT" 2211 | ], 2212 | "authors": [ 2213 | { 2214 | "name": "Mike van Riel", 2215 | "email": "mike.vanriel@naenius.com" 2216 | } 2217 | ], 2218 | "time": "2015-02-03 12:10:50" 2219 | }, 2220 | { 2221 | "name": "phpspec/prophecy", 2222 | "version": "v1.6.0", 2223 | "source": { 2224 | "type": "git", 2225 | "url": "https://github.com/phpspec/prophecy.git", 2226 | "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" 2227 | }, 2228 | "dist": { 2229 | "type": "zip", 2230 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", 2231 | "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", 2232 | "shasum": "" 2233 | }, 2234 | "require": { 2235 | "doctrine/instantiator": "^1.0.2", 2236 | "php": "^5.3|^7.0", 2237 | "phpdocumentor/reflection-docblock": "~2.0", 2238 | "sebastian/comparator": "~1.1", 2239 | "sebastian/recursion-context": "~1.0" 2240 | }, 2241 | "require-dev": { 2242 | "phpspec/phpspec": "~2.0" 2243 | }, 2244 | "type": "library", 2245 | "extra": { 2246 | "branch-alias": { 2247 | "dev-master": "1.5.x-dev" 2248 | } 2249 | }, 2250 | "autoload": { 2251 | "psr-0": { 2252 | "Prophecy\\": "src/" 2253 | } 2254 | }, 2255 | "notification-url": "https://packagist.org/downloads/", 2256 | "license": [ 2257 | "MIT" 2258 | ], 2259 | "authors": [ 2260 | { 2261 | "name": "Konstantin Kudryashov", 2262 | "email": "ever.zet@gmail.com", 2263 | "homepage": "http://everzet.com" 2264 | }, 2265 | { 2266 | "name": "Marcello Duarte", 2267 | "email": "marcello.duarte@gmail.com" 2268 | } 2269 | ], 2270 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2271 | "homepage": "https://github.com/phpspec/prophecy", 2272 | "keywords": [ 2273 | "Double", 2274 | "Dummy", 2275 | "fake", 2276 | "mock", 2277 | "spy", 2278 | "stub" 2279 | ], 2280 | "time": "2016-02-15 07:46:21" 2281 | }, 2282 | { 2283 | "name": "phpunit/php-code-coverage", 2284 | "version": "3.3.3", 2285 | "source": { 2286 | "type": "git", 2287 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 2288 | "reference": "44cd8e3930e431658d1a5de7d282d5cb37837fd5" 2289 | }, 2290 | "dist": { 2291 | "type": "zip", 2292 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/44cd8e3930e431658d1a5de7d282d5cb37837fd5", 2293 | "reference": "44cd8e3930e431658d1a5de7d282d5cb37837fd5", 2294 | "shasum": "" 2295 | }, 2296 | "require": { 2297 | "php": "^5.6 || ^7.0", 2298 | "phpunit/php-file-iterator": "~1.3", 2299 | "phpunit/php-text-template": "~1.2", 2300 | "phpunit/php-token-stream": "^1.4.2", 2301 | "sebastian/code-unit-reverse-lookup": "~1.0", 2302 | "sebastian/environment": "^1.3.2", 2303 | "sebastian/version": "~1.0|~2.0" 2304 | }, 2305 | "require-dev": { 2306 | "ext-xdebug": ">=2.1.4", 2307 | "phpunit/phpunit": "~5" 2308 | }, 2309 | "suggest": { 2310 | "ext-dom": "*", 2311 | "ext-xdebug": ">=2.4.0", 2312 | "ext-xmlwriter": "*" 2313 | }, 2314 | "type": "library", 2315 | "extra": { 2316 | "branch-alias": { 2317 | "dev-master": "3.3.x-dev" 2318 | } 2319 | }, 2320 | "autoload": { 2321 | "classmap": [ 2322 | "src/" 2323 | ] 2324 | }, 2325 | "notification-url": "https://packagist.org/downloads/", 2326 | "license": [ 2327 | "BSD-3-Clause" 2328 | ], 2329 | "authors": [ 2330 | { 2331 | "name": "Sebastian Bergmann", 2332 | "email": "sb@sebastian-bergmann.de", 2333 | "role": "lead" 2334 | } 2335 | ], 2336 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 2337 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 2338 | "keywords": [ 2339 | "coverage", 2340 | "testing", 2341 | "xunit" 2342 | ], 2343 | "time": "2016-05-27 16:24:29" 2344 | }, 2345 | { 2346 | "name": "phpunit/php-file-iterator", 2347 | "version": "1.4.1", 2348 | "source": { 2349 | "type": "git", 2350 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 2351 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" 2352 | }, 2353 | "dist": { 2354 | "type": "zip", 2355 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 2356 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 2357 | "shasum": "" 2358 | }, 2359 | "require": { 2360 | "php": ">=5.3.3" 2361 | }, 2362 | "type": "library", 2363 | "extra": { 2364 | "branch-alias": { 2365 | "dev-master": "1.4.x-dev" 2366 | } 2367 | }, 2368 | "autoload": { 2369 | "classmap": [ 2370 | "src/" 2371 | ] 2372 | }, 2373 | "notification-url": "https://packagist.org/downloads/", 2374 | "license": [ 2375 | "BSD-3-Clause" 2376 | ], 2377 | "authors": [ 2378 | { 2379 | "name": "Sebastian Bergmann", 2380 | "email": "sb@sebastian-bergmann.de", 2381 | "role": "lead" 2382 | } 2383 | ], 2384 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 2385 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 2386 | "keywords": [ 2387 | "filesystem", 2388 | "iterator" 2389 | ], 2390 | "time": "2015-06-21 13:08:43" 2391 | }, 2392 | { 2393 | "name": "phpunit/php-text-template", 2394 | "version": "1.2.1", 2395 | "source": { 2396 | "type": "git", 2397 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2398 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 2399 | }, 2400 | "dist": { 2401 | "type": "zip", 2402 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2403 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2404 | "shasum": "" 2405 | }, 2406 | "require": { 2407 | "php": ">=5.3.3" 2408 | }, 2409 | "type": "library", 2410 | "autoload": { 2411 | "classmap": [ 2412 | "src/" 2413 | ] 2414 | }, 2415 | "notification-url": "https://packagist.org/downloads/", 2416 | "license": [ 2417 | "BSD-3-Clause" 2418 | ], 2419 | "authors": [ 2420 | { 2421 | "name": "Sebastian Bergmann", 2422 | "email": "sebastian@phpunit.de", 2423 | "role": "lead" 2424 | } 2425 | ], 2426 | "description": "Simple template engine.", 2427 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2428 | "keywords": [ 2429 | "template" 2430 | ], 2431 | "time": "2015-06-21 13:50:34" 2432 | }, 2433 | { 2434 | "name": "phpunit/php-timer", 2435 | "version": "1.0.8", 2436 | "source": { 2437 | "type": "git", 2438 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2439 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" 2440 | }, 2441 | "dist": { 2442 | "type": "zip", 2443 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", 2444 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", 2445 | "shasum": "" 2446 | }, 2447 | "require": { 2448 | "php": ">=5.3.3" 2449 | }, 2450 | "require-dev": { 2451 | "phpunit/phpunit": "~4|~5" 2452 | }, 2453 | "type": "library", 2454 | "autoload": { 2455 | "classmap": [ 2456 | "src/" 2457 | ] 2458 | }, 2459 | "notification-url": "https://packagist.org/downloads/", 2460 | "license": [ 2461 | "BSD-3-Clause" 2462 | ], 2463 | "authors": [ 2464 | { 2465 | "name": "Sebastian Bergmann", 2466 | "email": "sb@sebastian-bergmann.de", 2467 | "role": "lead" 2468 | } 2469 | ], 2470 | "description": "Utility class for timing", 2471 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2472 | "keywords": [ 2473 | "timer" 2474 | ], 2475 | "time": "2016-05-12 18:03:57" 2476 | }, 2477 | { 2478 | "name": "phpunit/php-token-stream", 2479 | "version": "1.4.8", 2480 | "source": { 2481 | "type": "git", 2482 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 2483 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" 2484 | }, 2485 | "dist": { 2486 | "type": "zip", 2487 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 2488 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 2489 | "shasum": "" 2490 | }, 2491 | "require": { 2492 | "ext-tokenizer": "*", 2493 | "php": ">=5.3.3" 2494 | }, 2495 | "require-dev": { 2496 | "phpunit/phpunit": "~4.2" 2497 | }, 2498 | "type": "library", 2499 | "extra": { 2500 | "branch-alias": { 2501 | "dev-master": "1.4-dev" 2502 | } 2503 | }, 2504 | "autoload": { 2505 | "classmap": [ 2506 | "src/" 2507 | ] 2508 | }, 2509 | "notification-url": "https://packagist.org/downloads/", 2510 | "license": [ 2511 | "BSD-3-Clause" 2512 | ], 2513 | "authors": [ 2514 | { 2515 | "name": "Sebastian Bergmann", 2516 | "email": "sebastian@phpunit.de" 2517 | } 2518 | ], 2519 | "description": "Wrapper around PHP's tokenizer extension.", 2520 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 2521 | "keywords": [ 2522 | "tokenizer" 2523 | ], 2524 | "time": "2015-09-15 10:49:45" 2525 | }, 2526 | { 2527 | "name": "phpunit/phpunit", 2528 | "version": "5.1.7", 2529 | "source": { 2530 | "type": "git", 2531 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2532 | "reference": "d0f7ae467dcbe7a6ad050540c9d1d39a7aefff26" 2533 | }, 2534 | "dist": { 2535 | "type": "zip", 2536 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0f7ae467dcbe7a6ad050540c9d1d39a7aefff26", 2537 | "reference": "d0f7ae467dcbe7a6ad050540c9d1d39a7aefff26", 2538 | "shasum": "" 2539 | }, 2540 | "require": { 2541 | "ext-dom": "*", 2542 | "ext-json": "*", 2543 | "ext-pcre": "*", 2544 | "ext-reflection": "*", 2545 | "ext-spl": "*", 2546 | "myclabs/deep-copy": "~1.3", 2547 | "php": ">=5.6", 2548 | "phpspec/prophecy": "^1.3.1", 2549 | "phpunit/php-code-coverage": "~3.0", 2550 | "phpunit/php-file-iterator": "~1.4", 2551 | "phpunit/php-text-template": "~1.2", 2552 | "phpunit/php-timer": ">=1.0.6", 2553 | "phpunit/phpunit-mock-objects": ">=3.0.5", 2554 | "sebastian/comparator": "~1.1", 2555 | "sebastian/diff": "~1.2", 2556 | "sebastian/environment": "~1.3", 2557 | "sebastian/exporter": "~1.2", 2558 | "sebastian/global-state": "~1.0", 2559 | "sebastian/resource-operations": "~1.0", 2560 | "sebastian/version": "~1.0", 2561 | "symfony/yaml": "~2.1|~3.0" 2562 | }, 2563 | "suggest": { 2564 | "phpunit/php-invoker": "~1.1" 2565 | }, 2566 | "bin": [ 2567 | "phpunit" 2568 | ], 2569 | "type": "library", 2570 | "extra": { 2571 | "branch-alias": { 2572 | "dev-master": "5.1.x-dev" 2573 | } 2574 | }, 2575 | "autoload": { 2576 | "classmap": [ 2577 | "src/" 2578 | ] 2579 | }, 2580 | "notification-url": "https://packagist.org/downloads/", 2581 | "license": [ 2582 | "BSD-3-Clause" 2583 | ], 2584 | "authors": [ 2585 | { 2586 | "name": "Sebastian Bergmann", 2587 | "email": "sebastian@phpunit.de", 2588 | "role": "lead" 2589 | } 2590 | ], 2591 | "description": "The PHP Unit Testing framework.", 2592 | "homepage": "https://phpunit.de/", 2593 | "keywords": [ 2594 | "phpunit", 2595 | "testing", 2596 | "xunit" 2597 | ], 2598 | "time": "2016-02-02 09:03:29" 2599 | }, 2600 | { 2601 | "name": "phpunit/phpunit-mock-objects", 2602 | "version": "3.1.3", 2603 | "source": { 2604 | "type": "git", 2605 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 2606 | "reference": "151c96874bff6fe61a25039df60e776613a61489" 2607 | }, 2608 | "dist": { 2609 | "type": "zip", 2610 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/151c96874bff6fe61a25039df60e776613a61489", 2611 | "reference": "151c96874bff6fe61a25039df60e776613a61489", 2612 | "shasum": "" 2613 | }, 2614 | "require": { 2615 | "doctrine/instantiator": "^1.0.2", 2616 | "php": ">=5.6", 2617 | "phpunit/php-text-template": "~1.2", 2618 | "sebastian/exporter": "~1.2" 2619 | }, 2620 | "require-dev": { 2621 | "phpunit/phpunit": "~5" 2622 | }, 2623 | "suggest": { 2624 | "ext-soap": "*" 2625 | }, 2626 | "type": "library", 2627 | "extra": { 2628 | "branch-alias": { 2629 | "dev-master": "3.1.x-dev" 2630 | } 2631 | }, 2632 | "autoload": { 2633 | "classmap": [ 2634 | "src/" 2635 | ] 2636 | }, 2637 | "notification-url": "https://packagist.org/downloads/", 2638 | "license": [ 2639 | "BSD-3-Clause" 2640 | ], 2641 | "authors": [ 2642 | { 2643 | "name": "Sebastian Bergmann", 2644 | "email": "sb@sebastian-bergmann.de", 2645 | "role": "lead" 2646 | } 2647 | ], 2648 | "description": "Mock Object library for PHPUnit", 2649 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 2650 | "keywords": [ 2651 | "mock", 2652 | "xunit" 2653 | ], 2654 | "time": "2016-04-20 14:39:26" 2655 | }, 2656 | { 2657 | "name": "sebastian/code-unit-reverse-lookup", 2658 | "version": "1.0.0", 2659 | "source": { 2660 | "type": "git", 2661 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2662 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" 2663 | }, 2664 | "dist": { 2665 | "type": "zip", 2666 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 2667 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 2668 | "shasum": "" 2669 | }, 2670 | "require": { 2671 | "php": ">=5.6" 2672 | }, 2673 | "require-dev": { 2674 | "phpunit/phpunit": "~5" 2675 | }, 2676 | "type": "library", 2677 | "extra": { 2678 | "branch-alias": { 2679 | "dev-master": "1.0.x-dev" 2680 | } 2681 | }, 2682 | "autoload": { 2683 | "classmap": [ 2684 | "src/" 2685 | ] 2686 | }, 2687 | "notification-url": "https://packagist.org/downloads/", 2688 | "license": [ 2689 | "BSD-3-Clause" 2690 | ], 2691 | "authors": [ 2692 | { 2693 | "name": "Sebastian Bergmann", 2694 | "email": "sebastian@phpunit.de" 2695 | } 2696 | ], 2697 | "description": "Looks up which function or method a line of code belongs to", 2698 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2699 | "time": "2016-02-13 06:45:14" 2700 | }, 2701 | { 2702 | "name": "sebastian/comparator", 2703 | "version": "1.2.0", 2704 | "source": { 2705 | "type": "git", 2706 | "url": "https://github.com/sebastianbergmann/comparator.git", 2707 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" 2708 | }, 2709 | "dist": { 2710 | "type": "zip", 2711 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", 2712 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", 2713 | "shasum": "" 2714 | }, 2715 | "require": { 2716 | "php": ">=5.3.3", 2717 | "sebastian/diff": "~1.2", 2718 | "sebastian/exporter": "~1.2" 2719 | }, 2720 | "require-dev": { 2721 | "phpunit/phpunit": "~4.4" 2722 | }, 2723 | "type": "library", 2724 | "extra": { 2725 | "branch-alias": { 2726 | "dev-master": "1.2.x-dev" 2727 | } 2728 | }, 2729 | "autoload": { 2730 | "classmap": [ 2731 | "src/" 2732 | ] 2733 | }, 2734 | "notification-url": "https://packagist.org/downloads/", 2735 | "license": [ 2736 | "BSD-3-Clause" 2737 | ], 2738 | "authors": [ 2739 | { 2740 | "name": "Jeff Welch", 2741 | "email": "whatthejeff@gmail.com" 2742 | }, 2743 | { 2744 | "name": "Volker Dusch", 2745 | "email": "github@wallbash.com" 2746 | }, 2747 | { 2748 | "name": "Bernhard Schussek", 2749 | "email": "bschussek@2bepublished.at" 2750 | }, 2751 | { 2752 | "name": "Sebastian Bergmann", 2753 | "email": "sebastian@phpunit.de" 2754 | } 2755 | ], 2756 | "description": "Provides the functionality to compare PHP values for equality", 2757 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 2758 | "keywords": [ 2759 | "comparator", 2760 | "compare", 2761 | "equality" 2762 | ], 2763 | "time": "2015-07-26 15:48:44" 2764 | }, 2765 | { 2766 | "name": "sebastian/diff", 2767 | "version": "1.4.1", 2768 | "source": { 2769 | "type": "git", 2770 | "url": "https://github.com/sebastianbergmann/diff.git", 2771 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 2772 | }, 2773 | "dist": { 2774 | "type": "zip", 2775 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 2776 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 2777 | "shasum": "" 2778 | }, 2779 | "require": { 2780 | "php": ">=5.3.3" 2781 | }, 2782 | "require-dev": { 2783 | "phpunit/phpunit": "~4.8" 2784 | }, 2785 | "type": "library", 2786 | "extra": { 2787 | "branch-alias": { 2788 | "dev-master": "1.4-dev" 2789 | } 2790 | }, 2791 | "autoload": { 2792 | "classmap": [ 2793 | "src/" 2794 | ] 2795 | }, 2796 | "notification-url": "https://packagist.org/downloads/", 2797 | "license": [ 2798 | "BSD-3-Clause" 2799 | ], 2800 | "authors": [ 2801 | { 2802 | "name": "Kore Nordmann", 2803 | "email": "mail@kore-nordmann.de" 2804 | }, 2805 | { 2806 | "name": "Sebastian Bergmann", 2807 | "email": "sebastian@phpunit.de" 2808 | } 2809 | ], 2810 | "description": "Diff implementation", 2811 | "homepage": "https://github.com/sebastianbergmann/diff", 2812 | "keywords": [ 2813 | "diff" 2814 | ], 2815 | "time": "2015-12-08 07:14:41" 2816 | }, 2817 | { 2818 | "name": "sebastian/environment", 2819 | "version": "1.3.7", 2820 | "source": { 2821 | "type": "git", 2822 | "url": "https://github.com/sebastianbergmann/environment.git", 2823 | "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" 2824 | }, 2825 | "dist": { 2826 | "type": "zip", 2827 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", 2828 | "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", 2829 | "shasum": "" 2830 | }, 2831 | "require": { 2832 | "php": ">=5.3.3" 2833 | }, 2834 | "require-dev": { 2835 | "phpunit/phpunit": "~4.4" 2836 | }, 2837 | "type": "library", 2838 | "extra": { 2839 | "branch-alias": { 2840 | "dev-master": "1.3.x-dev" 2841 | } 2842 | }, 2843 | "autoload": { 2844 | "classmap": [ 2845 | "src/" 2846 | ] 2847 | }, 2848 | "notification-url": "https://packagist.org/downloads/", 2849 | "license": [ 2850 | "BSD-3-Clause" 2851 | ], 2852 | "authors": [ 2853 | { 2854 | "name": "Sebastian Bergmann", 2855 | "email": "sebastian@phpunit.de" 2856 | } 2857 | ], 2858 | "description": "Provides functionality to handle HHVM/PHP environments", 2859 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2860 | "keywords": [ 2861 | "Xdebug", 2862 | "environment", 2863 | "hhvm" 2864 | ], 2865 | "time": "2016-05-17 03:18:57" 2866 | }, 2867 | { 2868 | "name": "sebastian/exporter", 2869 | "version": "1.2.1", 2870 | "source": { 2871 | "type": "git", 2872 | "url": "https://github.com/sebastianbergmann/exporter.git", 2873 | "reference": "7ae5513327cb536431847bcc0c10edba2701064e" 2874 | }, 2875 | "dist": { 2876 | "type": "zip", 2877 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", 2878 | "reference": "7ae5513327cb536431847bcc0c10edba2701064e", 2879 | "shasum": "" 2880 | }, 2881 | "require": { 2882 | "php": ">=5.3.3", 2883 | "sebastian/recursion-context": "~1.0" 2884 | }, 2885 | "require-dev": { 2886 | "phpunit/phpunit": "~4.4" 2887 | }, 2888 | "type": "library", 2889 | "extra": { 2890 | "branch-alias": { 2891 | "dev-master": "1.2.x-dev" 2892 | } 2893 | }, 2894 | "autoload": { 2895 | "classmap": [ 2896 | "src/" 2897 | ] 2898 | }, 2899 | "notification-url": "https://packagist.org/downloads/", 2900 | "license": [ 2901 | "BSD-3-Clause" 2902 | ], 2903 | "authors": [ 2904 | { 2905 | "name": "Jeff Welch", 2906 | "email": "whatthejeff@gmail.com" 2907 | }, 2908 | { 2909 | "name": "Volker Dusch", 2910 | "email": "github@wallbash.com" 2911 | }, 2912 | { 2913 | "name": "Bernhard Schussek", 2914 | "email": "bschussek@2bepublished.at" 2915 | }, 2916 | { 2917 | "name": "Sebastian Bergmann", 2918 | "email": "sebastian@phpunit.de" 2919 | }, 2920 | { 2921 | "name": "Adam Harvey", 2922 | "email": "aharvey@php.net" 2923 | } 2924 | ], 2925 | "description": "Provides the functionality to export PHP variables for visualization", 2926 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2927 | "keywords": [ 2928 | "export", 2929 | "exporter" 2930 | ], 2931 | "time": "2015-06-21 07:55:53" 2932 | }, 2933 | { 2934 | "name": "sebastian/global-state", 2935 | "version": "1.1.1", 2936 | "source": { 2937 | "type": "git", 2938 | "url": "https://github.com/sebastianbergmann/global-state.git", 2939 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 2940 | }, 2941 | "dist": { 2942 | "type": "zip", 2943 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 2944 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 2945 | "shasum": "" 2946 | }, 2947 | "require": { 2948 | "php": ">=5.3.3" 2949 | }, 2950 | "require-dev": { 2951 | "phpunit/phpunit": "~4.2" 2952 | }, 2953 | "suggest": { 2954 | "ext-uopz": "*" 2955 | }, 2956 | "type": "library", 2957 | "extra": { 2958 | "branch-alias": { 2959 | "dev-master": "1.0-dev" 2960 | } 2961 | }, 2962 | "autoload": { 2963 | "classmap": [ 2964 | "src/" 2965 | ] 2966 | }, 2967 | "notification-url": "https://packagist.org/downloads/", 2968 | "license": [ 2969 | "BSD-3-Clause" 2970 | ], 2971 | "authors": [ 2972 | { 2973 | "name": "Sebastian Bergmann", 2974 | "email": "sebastian@phpunit.de" 2975 | } 2976 | ], 2977 | "description": "Snapshotting of global state", 2978 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2979 | "keywords": [ 2980 | "global state" 2981 | ], 2982 | "time": "2015-10-12 03:26:01" 2983 | }, 2984 | { 2985 | "name": "sebastian/recursion-context", 2986 | "version": "1.0.2", 2987 | "source": { 2988 | "type": "git", 2989 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2990 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791" 2991 | }, 2992 | "dist": { 2993 | "type": "zip", 2994 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", 2995 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791", 2996 | "shasum": "" 2997 | }, 2998 | "require": { 2999 | "php": ">=5.3.3" 3000 | }, 3001 | "require-dev": { 3002 | "phpunit/phpunit": "~4.4" 3003 | }, 3004 | "type": "library", 3005 | "extra": { 3006 | "branch-alias": { 3007 | "dev-master": "1.0.x-dev" 3008 | } 3009 | }, 3010 | "autoload": { 3011 | "classmap": [ 3012 | "src/" 3013 | ] 3014 | }, 3015 | "notification-url": "https://packagist.org/downloads/", 3016 | "license": [ 3017 | "BSD-3-Clause" 3018 | ], 3019 | "authors": [ 3020 | { 3021 | "name": "Jeff Welch", 3022 | "email": "whatthejeff@gmail.com" 3023 | }, 3024 | { 3025 | "name": "Sebastian Bergmann", 3026 | "email": "sebastian@phpunit.de" 3027 | }, 3028 | { 3029 | "name": "Adam Harvey", 3030 | "email": "aharvey@php.net" 3031 | } 3032 | ], 3033 | "description": "Provides functionality to recursively process PHP variables", 3034 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3035 | "time": "2015-11-11 19:50:13" 3036 | }, 3037 | { 3038 | "name": "sebastian/resource-operations", 3039 | "version": "1.0.0", 3040 | "source": { 3041 | "type": "git", 3042 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3043 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 3044 | }, 3045 | "dist": { 3046 | "type": "zip", 3047 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 3048 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 3049 | "shasum": "" 3050 | }, 3051 | "require": { 3052 | "php": ">=5.6.0" 3053 | }, 3054 | "type": "library", 3055 | "extra": { 3056 | "branch-alias": { 3057 | "dev-master": "1.0.x-dev" 3058 | } 3059 | }, 3060 | "autoload": { 3061 | "classmap": [ 3062 | "src/" 3063 | ] 3064 | }, 3065 | "notification-url": "https://packagist.org/downloads/", 3066 | "license": [ 3067 | "BSD-3-Clause" 3068 | ], 3069 | "authors": [ 3070 | { 3071 | "name": "Sebastian Bergmann", 3072 | "email": "sebastian@phpunit.de" 3073 | } 3074 | ], 3075 | "description": "Provides a list of PHP built-in functions that operate on resources", 3076 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3077 | "time": "2015-07-28 20:34:47" 3078 | }, 3079 | { 3080 | "name": "sebastian/version", 3081 | "version": "1.0.6", 3082 | "source": { 3083 | "type": "git", 3084 | "url": "https://github.com/sebastianbergmann/version.git", 3085 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" 3086 | }, 3087 | "dist": { 3088 | "type": "zip", 3089 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 3090 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 3091 | "shasum": "" 3092 | }, 3093 | "type": "library", 3094 | "autoload": { 3095 | "classmap": [ 3096 | "src/" 3097 | ] 3098 | }, 3099 | "notification-url": "https://packagist.org/downloads/", 3100 | "license": [ 3101 | "BSD-3-Clause" 3102 | ], 3103 | "authors": [ 3104 | { 3105 | "name": "Sebastian Bergmann", 3106 | "email": "sebastian@phpunit.de", 3107 | "role": "lead" 3108 | } 3109 | ], 3110 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3111 | "homepage": "https://github.com/sebastianbergmann/version", 3112 | "time": "2015-06-21 13:59:46" 3113 | }, 3114 | { 3115 | "name": "sensio/generator-bundle", 3116 | "version": "v3.0.6", 3117 | "source": { 3118 | "type": "git", 3119 | "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", 3120 | "reference": "ac91535054d025937d897d78ebb5fc2da5e955a4" 3121 | }, 3122 | "dist": { 3123 | "type": "zip", 3124 | "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/ac91535054d025937d897d78ebb5fc2da5e955a4", 3125 | "reference": "ac91535054d025937d897d78ebb5fc2da5e955a4", 3126 | "shasum": "" 3127 | }, 3128 | "require": { 3129 | "symfony/console": "~2.7|~3.0", 3130 | "symfony/framework-bundle": "~2.7|~3.0", 3131 | "symfony/process": "~2.7|~3.0", 3132 | "symfony/yaml": "~2.7|~3.0" 3133 | }, 3134 | "require-dev": { 3135 | "doctrine/orm": "~2.4", 3136 | "symfony/doctrine-bridge": "~2.7|~3.0", 3137 | "twig/twig": "~1.18" 3138 | }, 3139 | "type": "symfony-bundle", 3140 | "extra": { 3141 | "branch-alias": { 3142 | "dev-master": "3.0.x-dev" 3143 | } 3144 | }, 3145 | "autoload": { 3146 | "psr-4": { 3147 | "Sensio\\Bundle\\GeneratorBundle\\": "" 3148 | }, 3149 | "exclude-from-classmap": [ 3150 | "/Tests/" 3151 | ] 3152 | }, 3153 | "notification-url": "https://packagist.org/downloads/", 3154 | "license": [ 3155 | "MIT" 3156 | ], 3157 | "authors": [ 3158 | { 3159 | "name": "Fabien Potencier", 3160 | "email": "fabien@symfony.com" 3161 | } 3162 | ], 3163 | "description": "This bundle generates code for you", 3164 | "time": "2016-02-26 04:36:01" 3165 | }, 3166 | { 3167 | "name": "symfony/phpunit-bridge", 3168 | "version": "v3.0.6", 3169 | "source": { 3170 | "type": "git", 3171 | "url": "https://github.com/symfony/phpunit-bridge.git", 3172 | "reference": "3231629ff97abccd60f93ff900accfb5b39c8200" 3173 | }, 3174 | "dist": { 3175 | "type": "zip", 3176 | "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/3231629ff97abccd60f93ff900accfb5b39c8200", 3177 | "reference": "3231629ff97abccd60f93ff900accfb5b39c8200", 3178 | "shasum": "" 3179 | }, 3180 | "require": { 3181 | "php": ">=5.3.3" 3182 | }, 3183 | "suggest": { 3184 | "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" 3185 | }, 3186 | "type": "symfony-bridge", 3187 | "extra": { 3188 | "branch-alias": { 3189 | "dev-master": "3.0-dev" 3190 | } 3191 | }, 3192 | "autoload": { 3193 | "files": [ 3194 | "bootstrap.php" 3195 | ], 3196 | "psr-4": { 3197 | "Symfony\\Bridge\\PhpUnit\\": "" 3198 | }, 3199 | "exclude-from-classmap": [ 3200 | "/Tests/" 3201 | ] 3202 | }, 3203 | "notification-url": "https://packagist.org/downloads/", 3204 | "license": [ 3205 | "MIT" 3206 | ], 3207 | "authors": [ 3208 | { 3209 | "name": "Nicolas Grekas", 3210 | "email": "p@tchwork.com" 3211 | }, 3212 | { 3213 | "name": "Symfony Community", 3214 | "homepage": "https://symfony.com/contributors" 3215 | } 3216 | ], 3217 | "description": "Symfony PHPUnit Bridge", 3218 | "homepage": "https://symfony.com", 3219 | "time": "2016-04-12 18:09:53" 3220 | } 3221 | ], 3222 | "aliases": [], 3223 | "minimum-stability": "stable", 3224 | "stability-flags": [], 3225 | "prefer-stable": false, 3226 | "prefer-lowest": false, 3227 | "platform": { 3228 | "php": ">=5.5.9" 3229 | }, 3230 | "platform-dev": [] 3231 | } 3232 | --------------------------------------------------------------------------------