From 9ac8a7c30660d94e4fae50e2f5ffa5e7a9feb145 Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Fri, 21 Jun 2019 10:45:05 +0200 Subject: [PATCH 1/8] Update VM so we can use PHP 7.2 --- Vagrantfile | 57 ++++++++++++++++++++++++------------------------- ansible | 2 +- post-install.sh | 4 ---- 3 files changed, 29 insertions(+), 34 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index a94386d..40fb428 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,53 +1,41 @@ -# vagrant init ubuntu/trusty64 +# vagrant init ubuntu/xenial64 Vagrant.configure("2") do |config| - config.vm.box = "trusty64" - config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box" + config.vm.box = "ubuntu/xenial64" config.vm.network :private_network, ip: "10.10.10.10" - config.vm.hostname = "app.local" config.vm.provider :virtualbox do |v| v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["modifyvm", :id, "--memory", 1024] - v.customize ["modifyvm", :id, "--name", "Meetup Raffle Machine"] + v.customize ["modifyvm", :id, "--name", "AmsterdamPHP Raffler"] end - config.vm.provider :libvirt do |domain| - domain.memory = 1024 + config.vm.provision "shell" do |s| + s.inline = "sudo apt-get update && sudo apt-get install -y python" end - if (/linux/ =~ RUBY_PLATFORM) != nil - config.vm.synced_folder "./", "/vagrant", id: "vagrant-root", nfs: true, :linux__nfs_options => ['rw','no_subtree_check','all_squash','async'] - else - config.vm.synced_folder "./", "/vagrant", id: "vagrant-root", :nfs => true - end - - if not Vagrant.has_plugin?("vagrant-hostmanager") - if system "vagrant plugin install vagrant-hostmanager" - exec "vagrant #{ARGV.join(' ')}" - else - abort "Aborting due to plugin installation failure." - end - end - - config.hostmanager.enabled = true - config.hostmanager.manage_host = true - config.hostmanager.include_offline = true - config.vm.provision "ansible" do |ansible| ansible.playbook = "ansible/provision.yml" ansible.extra_vars = { - hostname: "dev", + hostname: "raffler", dbuser: "root", dbpasswd: "password", databases: ["development"], sites: [ { - hostname: "app.local", + hostname: "raffler.local", document_root: "/vagrant/web" } ], + php_configs: [ + ], + install_postgresql: "no", + postgresql_version: "9.5", + postgresql_user: "root", + postgresql_passwd: "password", + postgresql_databases: ["development"], + install_gems: [], install_db: "no", install_ohmyzsh: "yes", install_web: "yes", @@ -55,9 +43,20 @@ Vagrant.configure("2") do |config| install_hhvm: "no", install_beanstalkd: "no", install_redis: "yes", - install_javascript_build_system: "yes" + install_javascript_build_system: "yes", + install_r: "no", + install_rabbit_mq: "no", + r_packages: [], + enable_swap: "yes", + swap_size_in_mb: "1024", + install_eventstore: "no", + eventstore_version: "3.0.1", + eventstore_bind_ip: "10.10.10.10", + eventstore_http_prefix: "http://app.local:2113/" } end - config.vm.provision "shell", path: "post-install.sh" + config.vm.provision "shell" do |s| + s.inline = "sh /vagrant/post-install.sh" + end end diff --git a/ansible b/ansible index 536a412..83b335f 160000 --- a/ansible +++ b/ansible @@ -1 +1 @@ -Subproject commit 536a412e3f2b7b1a485b8a9fa5342ae116a2d8fc +Subproject commit 83b335f463b5149f15912c5c9963797a5d8589dd diff --git a/post-install.sh b/post-install.sh index aadaaa0..48e3671 100644 --- a/post-install.sh +++ b/post-install.sh @@ -1,8 +1,4 @@ #!/usr/bin/env bash -# Install Ruby packages -sudo gem install compass --no-ri --no-rdoc -sudo gem install susy --no-ri --no-rdoc - # Install dependencies and build assets su vagrant -c 'cd /vagrant && npm install && composer install --prefer-dist && node_modules/.bin/gulp' From e9a8a7233ed95d952e8f18b19a8577dd34b2a6cd Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Sat, 22 Jun 2019 11:19:52 +0200 Subject: [PATCH 2/8] Migrate from Silex to Symfony 4 --- .gitignore | 7 +- README.md | 21 +- bin/console | 42 + cache/.gitkeep | 0 circle.yml | 2 +- composer.json | 100 +- composer.lock | 4650 ++++++++--------- config/bootstrap.php | 8 + config/bundles.php | 9 + config/dev.php | 13 - config/packages/cache.yaml | 7 + config/packages/dev/monolog.yaml | 11 + config/packages/dev/routing.yaml | 3 + config/packages/framework.yaml | 8 + config/packages/prod/monolog.yaml | 23 + config/packages/routing.yaml | 4 + config/packages/sensio_framework_extra.yaml | 3 + config/packages/snc_redis.yaml | 6 + config/packages/test/framework.yaml | 4 + config/packages/test/monolog.yaml | 7 + config/packages/test/routing.yaml | 3 + config/packages/twig.yaml | 4 + config/prod.php | 3 - config/routes.yaml | 3 + config/routes/dev/twig.yaml | 3 + config/services.yaml | 22 + deploy.php | 2 +- logs/.gitkeep | 0 src/Controller/EventController.php | 99 + src/Kernel.php | 54 + src/Raffle/MeetupService.php | 68 +- src/Raffle/RandomService.php | 10 +- src/app.php | 52 - src/controllers.php | 83 - symfony.lock | 335 ++ templates/base.html.twig | 12 + .../TwigBundle/Exception/error404.html.twig} | 0 .../TwigBundle/Exception/error500.html.twig} | 0 templates/event.html.twig | 2 +- templates/event_checkin.html.twig | 5 +- tests/unit/Raffle/RandomServiceTest.php | 17 +- web/index.php | 38 +- web/index_dev.php | 20 - 43 files changed, 3081 insertions(+), 2682 deletions(-) create mode 100755 bin/console delete mode 100755 cache/.gitkeep create mode 100644 config/bootstrap.php create mode 100644 config/bundles.php delete mode 100644 config/dev.php create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/dev/monolog.yaml create mode 100644 config/packages/dev/routing.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/prod/monolog.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/sensio_framework_extra.yaml create mode 100644 config/packages/snc_redis.yaml create mode 100644 config/packages/test/framework.yaml create mode 100644 config/packages/test/monolog.yaml create mode 100644 config/packages/test/routing.yaml create mode 100644 config/packages/twig.yaml delete mode 100644 config/prod.php create mode 100644 config/routes.yaml create mode 100644 config/routes/dev/twig.yaml create mode 100644 config/services.yaml delete mode 100644 logs/.gitkeep create mode 100644 src/Controller/EventController.php create mode 100644 src/Kernel.php delete mode 100644 src/app.php delete mode 100644 src/controllers.php create mode 100644 symfony.lock create mode 100644 templates/base.html.twig rename templates/{404.html => bundles/TwigBundle/Exception/error404.html.twig} (100%) rename templates/{500.html => bundles/TwigBundle/Exception/error500.html.twig} (100%) delete mode 100644 web/index_dev.php diff --git a/.gitignore b/.gitignore index 424bc20..fa28c8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,11 @@ /build/ /vendor/ -/cache/* -/logs/* -silex.log /config/parameters.yml /.vagrant node_modules/ web/css/* web/img/* web/js/* - +/.phpunit.result.cache +/var/ +!/var/.gitkeep diff --git a/README.md b/README.md index 785f824..33d571b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # AmsterdamPHP - Meetup.com Raffler -This application enables us to raffle off stuff to our meetup attendees. It uses the Meetup.com API to get all check ins, and then uses the Random.org API to randomly select winners. +This application enables us to raffle off stuff to our meetup attendees. It uses the Meetup.com API to get all check ins, and then randomly selects winners. ## Installation @@ -10,14 +10,18 @@ Ensure that [VirtualBox](https://www.virtualbox.org), [Vagrant](http://www.vagra 1. `git clone git@github.com:AmsterdamPHP/meetup-raffle-machine.git --recursive` 2. run `vagrant up` -3. create config/parameters.yml (get your API key from [meetup.com](https://secure.meetup.com/meetup_api/key/)) +3. create `config/parameters.yml` (get your API key from [meetup.com](https://secure.meetup.com/meetup_api/key/)) ``` - meetup_group: amsterdamphp - meetup_api_key: YOUR_MEETUP_API_KEY + parameters: + meetup_group: amsterdamphp + meetup_api_key: YOUR_MEETUP_API_KEY + secret: SomeRandomSecretToSeedSymfony + redis_dsn: redis://locahost ``` +4. Add the following to your hosts file: `10.10.10.10 raffler.local` -All done! Now you can access the application at [http://app.local/](http://app.local/). +All done! Now you can access the application at [http://raffler.local/](http://raffler.local/). ### Install directly onto your host machine. @@ -45,8 +49,11 @@ All done! Now you can access the application at [http://app.local/](http://app.l 5. Create config/parameters.yml ``` - meetup_group: amsterdamphp - meetup_api_key: YOUR_MEETUP_API_KEY + parameters: + meetup_group: amsterdamphp + meetup_api_key: YOUR_MEETUP_API_KEY + secret: SomeRandomSecretToSeedSymfony + redis_dsn: redis://locahost ``` ## How to use it diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..19c2f6c --- /dev/null +++ b/bin/console @@ -0,0 +1,42 @@ +#!/usr/bin/env php +getParameterOption(['--env', '-e'], null, true)) { + putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); +} + +if ($input->hasParameterOption('--no-debug', true)) { + putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); +} + +require dirname(__DIR__).'/config/bootstrap.php'; + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + if (class_exists(Debug::class)) { + Debug::enable(); + } +} + +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$application = new Application($kernel); +$application->run($input); diff --git a/cache/.gitkeep b/cache/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/circle.yml b/circle.yml index 71d9d4e..ccbcefe 100644 --- a/circle.yml +++ b/circle.yml @@ -1,6 +1,6 @@ machine: php: - version: 7.0.4 + version: 7.2 dependencies: override: diff --git a/composer.json b/composer.json index 3f0bb6a..0636fbc 100644 --- a/composer.json +++ b/composer.json @@ -1,43 +1,71 @@ { "name": "amsterdamphp/meetup-raffle-machine", - + "type": "project", + "license": "proprietary", + "require": { + "php": "^7.2", + "ext-ctype": "*", + "ext-iconv": "*", + "dms/meetup-api-client": "^2.3", + "ircmaxell/random-lib": "^1.2", + "predis/predis": "^1.1", + "sensio/framework-extra-bundle": "^5.3", + "snc/redis-bundle": "^2.1", + "symfony/console": "4.3.*", + "symfony/dotenv": "4.3.*", + "symfony/flex": "^1.1", + "symfony/framework-bundle": "4.3.*", + "symfony/monolog-bundle": "^3.4", + "symfony/twig-bundle": "4.3.*", + "symfony/yaml": "4.3.*" + }, + "config": { + "preferred-install": { + "*": "dist" + }, + "sort-packages": true + }, "autoload": { - "psr-0": { "": "src/" } + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "paragonie/random_compat": "2.*", + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php71": "*", + "symfony/polyfill-php70": "*", + "symfony/polyfill-php56": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "4.3.*" + }, + "public-dir": "web/" }, - - "require": { - "php": ">=5.3.3", - - "silex/silex": "^1.0", - "twig/twig": ">=1.8.0,<2.0-dev", - "monolog/monolog": ">=1.0.0,<1.2-dev", - - "symfony/browser-kit": "^2.1", - "symfony/class-loader": "^2.1", - "symfony/config": "^2.1", - "symfony/console": "^2.1", - "symfony/css-selector": "^2.1", - "symfony/finder": "^2.1", - "symfony/form": "^2.1", - "symfony/monolog-bridge": "^2.1", - "symfony/process": "^2.1", - "symfony/security": "^2.1", - "symfony/translation": "^2.1", - "symfony/twig-bridge": "^2.1", - "symfony/validator": "^2.1", - "symfony/yaml": "^2.1", - - "dms/meetup-api-client": "~1.0@dev", - "predis/predis": "~0.8", - "ircmaxell/random-lib": "^1.1" - - }, - - "repositories": [ - ], "require-dev": { - "deployer/deployer": "^4@dev", - "symfony/var-dumper": "^3.1", - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^8.2" } } diff --git a/composer.lock b/composer.lock index 5116c49..f3dd9da 100644 --- a/composer.lock +++ b/composer.lock @@ -1,45 +1,49 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "e7dacbd175088d27aa6eb7a707d09c6c", - "content-hash": "4555fc515f54654df2c229a515a99052", + "content-hash": "dc543d4bd5dfe615b3871acf3a492d70", "packages": [ { "name": "dms/meetup-api-client", - "version": "v1.3.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/rdohms/meetup-api-client.git", - "reference": "cf9fce4cd96ea633fb59dee57d740097ec1d24f7" + "reference": "6abb76a6f8ee4c638569ba712c37114a04c8a824" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rdohms/meetup-api-client/zipball/cf9fce4cd96ea633fb59dee57d740097ec1d24f7", - "reference": "cf9fce4cd96ea633fb59dee57d740097ec1d24f7", + "url": "https://api.github.com/repos/rdohms/meetup-api-client/zipball/6abb76a6f8ee4c638569ba712c37114a04c8a824", + "reference": "6abb76a6f8ee4c638569ba712c37114a04c8a824", "shasum": "" }, "require": { - "guzzle/guzzle": "~3.7" + "guzzle/guzzle": "~3.7", + "php": "^5.3.10 | ^7.0" }, "require-dev": { - "phpunit/phpunit": "~3.7", + "mathiasgrimm/arraypath": "~1.3", + "phpunit/phpunit": "^4.8", "symfony/console": "~2.2", "symfony/css-selector": "~2.2", - "symfony/dom-crawler": "~2.2" + "symfony/dom-crawler": "~2.2", + "symfony/var-dumper": "~2.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-0": { - "DMS": "src/", - "Test": "tests/" + "DMS": [ + "src/", + "tests/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -59,73 +63,39 @@ "dms", "meetup.com" ], - "time": "2014-12-30 10:52:03" + "time": "2017-12-26T11:05:37+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.9.3", + "name": "doctrine/annotations", + "version": "v1.6.1", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle3.git", - "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + "url": "https://github.com/doctrine/annotations.git", + "reference": "53120e0eb10355388d6ccbe462f1fea34ddadb24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", - "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/53120e0eb10355388d6ccbe462f1fea34ddadb24", + "reference": "53120e0eb10355388d6ccbe462f1fea34ddadb24", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": "~2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "doctrine/lexer": "1.*", + "php": "^7.1" }, "require-dev": { - "doctrine/cache": "~1.3", - "monolog/monolog": "~1.0", - "phpunit/phpunit": "3.7.*", - "psr/log": "~1.0", - "symfony/class-loader": "~2.1", - "zendframework/zend-cache": "2.*,<2.3", - "zendframework/zend-log": "2.*,<2.3" - }, - "suggest": { - "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.9-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }, "notification-url": "https://packagist.org/downloads/", @@ -134,60 +104,74 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Roman Borschel", + "email": "roman@code-factory.org" }, { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", - "homepage": "http://guzzlephp.org/", + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" + "annotations", + "docblock", + "parser" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2015-03-18 18:23:50" + "time": "2019-03-25T19:12:02+00:00" }, { - "name": "ircmaxell/random-lib", - "version": "v1.1.0", + "name": "doctrine/cache", + "version": "v1.8.0", "source": { "type": "git", - "url": "https://github.com/ircmaxell/RandomLib.git", - "reference": "13efa4368bb2ac88bb3b1459b487d907de4dbf7c" + "url": "https://github.com/doctrine/cache.git", + "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ircmaxell/RandomLib/zipball/13efa4368bb2ac88bb3b1459b487d907de4dbf7c", - "reference": "13efa4368bb2ac88bb3b1459b487d907de4dbf7c", + "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57", + "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57", "shasum": "" }, "require": { - "ircmaxell/security-lib": "1.0.*@dev", - "php": ">=5.3.2" + "php": "~7.1" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "mikey179/vfsstream": "1.1.*", - "phpunit/phpunit": "3.7.*" + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^4.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { - "psr-0": { - "RandomLib": "lib" + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" } }, "notification-url": "https://packagist.org/downloads/", @@ -196,89 +180,66 @@ ], "authors": [ { - "name": "Anthony Ferrara", - "email": "ircmaxell@ircmaxell.com", - "homepage": "http://blog.ircmaxell.com" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "A Library For Generating Secure Random Numbers", - "homepage": "https://github.com/ircmaxell/RandomLib", + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "https://www.doctrine-project.org", "keywords": [ - "cryptography", - "random", - "random-numbers", - "random-strings" + "cache", + "caching" ], - "time": "2015-01-15 16:31:45" + "time": "2018-08-21T18:01:43+00:00" }, { - "name": "ircmaxell/security-lib", - "version": "1.0.0", + "name": "doctrine/collections", + "version": "v1.6.2", "source": { "type": "git", - "url": "https://github.com/ircmaxell/SecurityLib.git", - "reference": "80934de3c482dcafb46b5756e59ebece082b6dc7" + "url": "https://github.com/doctrine/collections.git", + "reference": "c5e0bc17b1620e97c968ac409acbff28b8b850be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/80934de3c482dcafb46b5756e59ebece082b6dc7", - "reference": "80934de3c482dcafb46b5756e59ebece082b6dc7", + "url": "https://api.github.com/repos/doctrine/collections/zipball/c5e0bc17b1620e97c968ac409acbff28b8b850be", + "reference": "c5e0bc17b1620e97c968ac409acbff28b8b850be", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1.3" }, "require-dev": { - "mikey179/vfsstream": "1.1.*" + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.2.2" }, "type": "library", - "autoload": { - "psr-0": { - "SecurityLib": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anthony Ferrara", - "email": "ircmaxell@ircmaxell.com", - "homepage": "http://blog.ircmaxell.com" + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" } - ], - "description": "A Base Security Library", - "homepage": "https://github.com/ircmaxell/PHP-SecurityLib", - "time": "2013-04-30 18:00:34" - }, - { - "name": "monolog/monolog", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "abc80e0db8ad31c03b373977fc997e980800f9c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/abc80e0db8ad31c03b373977fc997e980800f9c2", - "reference": "abc80e0db8ad31c03b373977fc997e980800f9c2", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "mlehner/gelf-php": "1.0.*" - }, - "suggest": { - "mlehner/gelf-php": "Allow sending log messages to a GrayLog2 server" }, - "type": "library", "autoload": { - "psr-0": { - "Monolog": "src/" + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" } }, "notification-url": "https://packagist.org/downloads/", @@ -287,46 +248,69 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be", - "role": "Developer" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Logging for PHP 5.3", - "homepage": "http://github.com/Seldaek/monolog", + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", "keywords": [ - "log", - "logging" + "array", + "collections", + "iterators", + "php" ], - "time": "2012-04-23 16:27:40" + "time": "2019-06-09T13:48:14+00:00" }, { - "name": "pimple/pimple", - "version": "v1.1.1", + "name": "doctrine/event-manager", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" + "url": "https://github.com/doctrine/event-manager.git", + "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", - "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3", + "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^4.0", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "Pimple": "lib/" + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" } }, "notification-url": "https://packagist.org/downloads/", @@ -335,46 +319,68 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", - "homepage": "http://pimple.sensiolabs.org", + "description": "Doctrine Event Manager component", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", "keywords": [ - "container", - "dependency injection" + "event", + "eventdispatcher", + "eventmanager" ], - "time": "2013-11-22 08:30:29" + "time": "2018-06-11T11:59:03+00:00" }, { - "name": "predis/predis", - "version": "v0.8.7", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/nrk/predis.git", - "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6", - "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + "phpunit/phpunit": "^4.5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Predis": "lib/" + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -383,78 +389,68 @@ ], "authors": [ { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Flexible and feature-complete PHP client library for Redis", - "homepage": "http://github.com/nrk/predis", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "nosql", - "predis", - "redis" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], - "time": "2014-08-01 09:43:10" + "time": "2019-06-08T11:03:04+00:00" }, { - "name": "silex/silex", - "version": "v1.0.2", + "name": "doctrine/persistence", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/silexphp/Silex.git", - "reference": "89d5ed3cbfebc83145c9c345e286fee190a271b7" + "url": "https://github.com/doctrine/persistence.git", + "reference": "3da7c9d125591ca83944f477e65ed3d7b4617c48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/89d5ed3cbfebc83145c9c345e286fee190a271b7", - "reference": "89d5ed3cbfebc83145c9c345e286fee190a271b7", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/3da7c9d125591ca83944f477e65ed3d7b4617c48", + "reference": "3da7c9d125591ca83944f477e65ed3d7b4617c48", "shasum": "" }, "require": { - "php": ">=5.3.3", - "pimple/pimple": "1.*", - "symfony/event-dispatcher": ">=2.1,<2.4-dev", - "symfony/http-foundation": ">=2.1,<2.4-dev", - "symfony/http-kernel": ">=2.1,<2.4-dev", - "symfony/routing": ">=2.1,<2.4-dev" + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "doctrine/reflection": "^1.0", + "php": "^7.1" }, - "require-dev": { - "doctrine/dbal": ">=2.2.0,<2.4.0-dev", - "monolog/monolog": "~1.4,>=1.4.1", - "swiftmailer/swiftmailer": "5.*", - "symfony/browser-kit": ">=2.1,<2.4-dev", - "symfony/config": ">=2.1,<2.4-dev", - "symfony/css-selector": ">=2.1,<2.4-dev", - "symfony/dom-crawler": ">=2.1,<2.4-dev", - "symfony/finder": ">=2.1,<2.4-dev", - "symfony/form": ">=2.1.4,<2.4-dev", - "symfony/locale": ">=2.1,<2.4-dev", - "symfony/monolog-bridge": ">=2.1,<2.4-dev", - "symfony/options-resolver": ">=2.1,<2.4-dev", - "symfony/process": ">=2.1,<2.4-dev", - "symfony/security": ">=2.1,<2.4-dev", - "symfony/serializer": ">=2.1,<2.4-dev", - "symfony/translation": ">=2.1,<2.4-dev", - "symfony/twig-bridge": ">=2.1,<2.4-dev", - "symfony/validator": ">=2.1,<2.4-dev", - "twig/twig": ">=1.8.0,<2.0-dev" + "conflict": { + "doctrine/common": "<2.10@dev" }, - "suggest": { - "symfony/browser-kit": ">=2.1,<2.4-dev", - "symfony/css-selector": ">=2.1,<2.4-dev", - "symfony/dom-crawler": ">=2.1,<2.4-dev", - "symfony/form": ">= 2.1.4,<2.4-dev" + "require-dev": { + "doctrine/coding-standard": "^5.0", + "phpstan/phpstan": "^0.8", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "psr-0": { - "Silex": "src/" + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" } }, "notification-url": "https://packagist.org/downloads/", @@ -463,62 +459,78 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" }, { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch", - "homepage": "http://wiedler.ch/igor/" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "The PHP micro-framework based on the Symfony2 Components", - "homepage": "http://silex.sensiolabs.org", + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://doctrine-project.org/projects/persistence.html", "keywords": [ - "microframework" + "mapper", + "object", + "odm", + "orm", + "persistence" ], - "time": "2013-10-30 08:45:28" + "time": "2019-04-23T08:28:24+00:00" }, { - "name": "symfony/browser-kit", - "version": "v2.8.4", + "name": "doctrine/reflection", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "745c19467255cf32eaf311f000eecafd83ca5586" + "url": "https://github.com/doctrine/reflection.git", + "reference": "02538d3f95e88eb397a5f86274deb2c6175c2ab6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/745c19467255cf32eaf311f000eecafd83ca5586", - "reference": "745c19467255cf32eaf311f000eecafd83ca5586", + "url": "https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6", + "reference": "02538d3f95e88eb397a5f86274deb2c6175c2ab6", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/dom-crawler": "~2.0,>=2.0.5|~3.0.0" + "doctrine/annotations": "^1.0", + "ext-tokenizer": "*", + "php": "^7.1" }, "require-dev": { - "symfony/css-selector": "~2.0,>=2.0.5|~3.0.0", - "symfony/process": "~2.3.34|~2.7,>=2.7.6|~3.0.0" - }, - "suggest": { - "symfony/process": "" + "doctrine/coding-standard": "^4.0", + "doctrine/common": "^2.8", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpunit/phpunit": "^7.0", + "squizlabs/php_codesniffer": "^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Common\\": "lib/Doctrine/Common" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -526,52 +538,100 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Roman Borschel", + "email": "roman@code-factory.org" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "Symfony BrowserKit Component", - "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "description": "Doctrine Reflection component", + "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "keywords": [ + "reflection" + ], + "time": "2018-06-14T14:45:07+00:00" }, { - "name": "symfony/class-loader", - "version": "v2.8.4", + "name": "guzzle/guzzle", + "version": "v3.8.1", "source": { "type": "git", - "url": "https://github.com/symfony/class-loader.git", - "reference": "7d362c22710980730d46a5d039e788946a2938cb" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/7d362c22710980730d46a5d039e788946a2938cb", - "reference": "7d362c22710980730d46a5d039e788946a2938cb", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", + "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-apcu": "~1.1" + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": ">=2.1" }, - "require-dev": { - "symfony/finder": "~2.0,>=2.0.5|~3.0.0" + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "*", + "monolog/monolog": "1.*", + "phpunit/phpunit": "3.7.*", + "psr/log": "1.0.*", + "symfony/class-loader": "*", + "zendframework/zend-cache": "<2.3", + "zendframework/zend-log": "<2.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.8-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\ClassLoader\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -579,52 +639,62 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" } ], - "description": "Symfony ClassLoader Component", - "homepage": "https://symfony.com", - "time": "2016-03-10 19:33:53" + "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2014-01-28T22:29:15+00:00" }, { - "name": "symfony/config", - "version": "v2.8.4", + "name": "ircmaxell/random-lib", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "5273f4724dc5288fe7a33cb08077ab9852621f2c" + "url": "https://github.com/ircmaxell/RandomLib.git", + "reference": "e9e0204f40e49fa4419946c677eccd3fa25b8cf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/5273f4724dc5288fe7a33cb08077ab9852621f2c", - "reference": "5273f4724dc5288fe7a33cb08077ab9852621f2c", + "url": "https://api.github.com/repos/ircmaxell/RandomLib/zipball/e9e0204f40e49fa4419946c677eccd3fa25b8cf4", + "reference": "e9e0204f40e49fa4419946c677eccd3fa25b8cf4", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/filesystem": "~2.3|~3.0.0" + "ircmaxell/security-lib": "^1.1", + "php": ">=5.3.2" }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^4.8|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "RandomLib": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -632,59 +702,51 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Anthony Ferrara", + "email": "ircmaxell@ircmaxell.com", + "homepage": "http://blog.ircmaxell.com" } ], - "description": "Symfony Config Component", - "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "description": "A Library For Generating Secure Random Numbers", + "homepage": "https://github.com/ircmaxell/RandomLib", + "keywords": [ + "cryptography", + "random", + "random-numbers", + "random-strings" + ], + "time": "2016-09-07T15:52:06+00:00" }, { - "name": "symfony/console", - "version": "v2.8.4", + "name": "ircmaxell/security-lib", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154" + "url": "https://github.com/ircmaxell/SecurityLib.git", + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9a5aef5fc0d4eff86853d44202b02be8d5a20154", - "reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154", + "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5", + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=5.3.2" }, "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" + "mikey179/vfsstream": "1.1.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "SecurityLib": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -692,48 +754,72 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Anthony Ferrara", + "email": "ircmaxell@ircmaxell.com", + "homepage": "http://blog.ircmaxell.com" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2016-03-17 09:19:04" + "description": "A Base Security Library", + "homepage": "https://github.com/ircmaxell/SecurityLib", + "time": "2015-03-20T14:31:23+00:00" }, { - "name": "symfony/css-selector", - "version": "v2.8.4", + "name": "monolog/monolog", + "version": "1.24.0", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "07b7ced3ae0c12918477c095453ea8595000810e" + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/07b7ced3ae0c12918477c095453ea8595000810e", - "reference": "07b7ced3ae0c12918477c095453ea8595000810e", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Monolog\\": "src/Monolog" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -741,59 +827,49 @@ ], "authors": [ { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2018-11-05T09:00:11+00:00" }, { - "name": "symfony/dom-crawler", - "version": "v3.0.4", + "name": "predis/predis", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f" + "url": "https://github.com/nrk/predis.git", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/18a06d7a9af41718c20764a674a0ebba3bc40d1f", - "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f", + "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=5.3.9" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0" + "phpunit/phpunit": "~4.8" }, "suggest": { - "symfony/css-selector": "" + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Predis\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -801,47 +877,46 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net" } ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2016-03-23 13:23:25" + "description": "Flexible and feature-complete Redis client for PHP and HHVM", + "homepage": "http://github.com/nrk/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "time": "2016-06-16T16:22:20+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v2.1.13", - "target-dir": "Symfony/Component/EventDispatcher", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "e1d18ff0ff6f3e45ac82f000bc221135df635527" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e1d18ff0ff6f3e45ac82f000bc221135df635527", - "reference": "e1d18ff0ff6f3e45ac82f000bc221135df635527", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/dependency-injection": "2.1.*" - }, - "suggest": { - "symfony/dependency-injection": "2.1.*", - "symfony/http-kernel": "2.1.*" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher": "" + "psr-4": { + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -850,48 +925,45 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "http://symfony.com", - "time": "2013-02-11 11:26:14" + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.0.4", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "f82499a459dcade2ea56df94cc58b19c8bde3d20" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/f82499a459dcade2ea56df94cc58b19c8bde3d20", - "reference": "f82499a459dcade2ea56df94cc58b19c8bde3d20", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -899,48 +971,48 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2016-03-27 10:24:39" + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "symfony/finder", - "version": "v2.8.4", + "name": "psr/log", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ca24cf2cd4e3826f571e0067e535758e73807aa1" + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ca24cf2cd4e3826f571e0067e535758e73807aa1", - "reference": "ca24cf2cd4e3826f571e0067e535758e73807aa1", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -948,115 +1020,73 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2016-03-10 10:53:53" + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" }, { - "name": "symfony/form", - "version": "v2.8.4", + "name": "sensio/framework-extra-bundle", + "version": "v5.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/form.git", - "reference": "7ef08bd80804329a38bb647f2cafba8128ef3fed" + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "5f75c4658b03301cba17baa15a840b57b72b4262" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/7ef08bd80804329a38bb647f2cafba8128ef3fed", - "reference": "7ef08bd80804329a38bb647f2cafba8128ef3fed", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/5f75c4658b03301cba17baa15a840b57b72b4262", + "reference": "5f75c4658b03301cba17baa15a840b57b72b4262", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/intl": "~2.4|~3.0.0", - "symfony/options-resolver": "~2.6", - "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "~2.3|~3.0.0" - }, - "conflict": { - "symfony/doctrine-bridge": "<2.7", - "symfony/framework-bundle": "<2.7", - "symfony/twig-bridge": "<2.7" + "doctrine/annotations": "^1.0", + "doctrine/persistence": "^1.0", + "php": ">=7.1.3", + "symfony/config": "^3.4|^4.2", + "symfony/dependency-injection": "^3.4|^4.2", + "symfony/framework-bundle": "^3.4|^4.2", + "symfony/http-kernel": "^3.4|^4.2" }, "require-dev": { - "doctrine/collections": "~1.0", - "symfony/dependency-injection": "~2.3|~3.0.0", - "symfony/http-foundation": "~2.2|~3.0.0", - "symfony/http-kernel": "~2.4|~3.0.0", - "symfony/security-csrf": "~2.4|~3.0.0", - "symfony/translation": "~2.0,>=2.0.5|~3.0.0", - "symfony/validator": "~2.8|~3.0.0" + "doctrine/doctrine-bundle": "^1.6", + "doctrine/orm": "^2.5", + "nyholm/psr7": "^1.1", + "symfony/browser-kit": "^3.4|^4.2", + "symfony/dom-crawler": "^3.4|^4.2", + "symfony/expression-language": "^3.4|^4.2", + "symfony/finder": "^3.4|^4.2", + "symfony/monolog-bridge": "^3.0|^4.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8", + "symfony/psr-http-message-bridge": "^1.1", + "symfony/security-bundle": "^3.4|^4.2", + "symfony/twig-bundle": "^3.4|^4.2", + "symfony/yaml": "^3.4|^4.2", + "twig/twig": "~1.12|~2.0" }, "suggest": { - "symfony/framework-bundle": "For templating with PHP.", - "symfony/security-csrf": "For protecting forms against CSRF attacks.", - "symfony/twig-bridge": "For templating with Twig.", - "symfony/validator": "For form validation." + "symfony/expression-language": "", + "symfony/psr-http-message-bridge": "To use the PSR-7 converters", + "symfony/security-bundle": "" }, - "type": "library", + "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Form\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Form Component", - "homepage": "https://symfony.com", - "time": "2016-03-27 10:21:58" - }, - { - "name": "symfony/http-foundation", - "version": "v2.1.13", - "target-dir": "Symfony/Component/HttpFoundation", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "79fd1ab0b85e782d342e83799b39b729fd1a30ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/79fd1ab0b85e782d342e83799b39b729fd1a30ee", - "reference": "79fd1ab0b85e782d342e83799b39b729fd1a30ee", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "Symfony\\Component\\HttpFoundation": "", - "SessionHandlerInterface": "Symfony/Component/HttpFoundation/Resources/stubs" + "Sensio\\Bundle\\FrameworkExtraBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1064,61 +1094,59 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" } ], - "description": "Symfony HttpFoundation Component", - "homepage": "http://symfony.com", - "time": "2013-08-07 13:58:42" + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "time": "2019-04-10T06:00:20+00:00" }, { - "name": "symfony/http-kernel", - "version": "v2.1.13", - "target-dir": "Symfony/Component/HttpKernel", + "name": "snc/redis-bundle", + "version": "2.1.9", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "b0fbc4d28fa9676a741f127c891eff73a36a338c" + "url": "https://github.com/snc/SncRedisBundle.git", + "reference": "af3ac967b0351ff880f646486bff87247abb5286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b0fbc4d28fa9676a741f127c891eff73a36a338c", - "reference": "b0fbc4d28fa9676a741f127c891eff73a36a338c", + "url": "https://api.github.com/repos/snc/SncRedisBundle/zipball/af3ac967b0351ff880f646486bff87247abb5286", + "reference": "af3ac967b0351ff880f646486bff87247abb5286", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/event-dispatcher": "2.1.*", - "symfony/http-foundation": "2.1.*" + "symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0" }, "require-dev": { - "symfony/browser-kit": "2.1.*", - "symfony/class-loader": "2.1.*", - "symfony/config": "2.1.*", - "symfony/console": "2.1.*", - "symfony/dependency-injection": "2.1.*", - "symfony/finder": "2.1.*", - "symfony/process": "2.1.*", - "symfony/routing": "2.1.*" + "doctrine/cache": "1.*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "predis/predis": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/phpunit-bridge": "^2.7 || ^3.0 || ^4.0" }, "suggest": { - "symfony/browser-kit": "2.1.*", - "symfony/class-loader": "2.1.*", - "symfony/config": "2.1.*", - "symfony/console": "2.1.*", - "symfony/dependency-injection": "2.1.*", - "symfony/finder": "2.1.*" + "monolog/monolog": "If you want to use the monolog redis handler.", + "predis/predis": "If you want to use predis.", + "symfony/console": "If you want to use commands to interact with the redis database", + "symfony/proxy-manager-bridge": "If you want to lazy-load some services" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } }, - "type": "library", "autoload": { - "psr-0": { - "Symfony\\Component\\HttpKernel": "" + "psr-4": { + "Snc\\RedisBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1127,55 +1155,75 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Henrik Westphal", + "email": "henrik.westphal@gmail.com" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Community contributors", + "homepage": "https://github.com/snc/SncRedisBundle/contributors" } ], - "description": "Symfony HttpKernel Component", - "homepage": "http://symfony.com", - "time": "2013-10-10 11:03:57" + "description": "A Redis bundle for Symfony", + "homepage": "https://github.com/snc/SncRedisBundle", + "keywords": [ + "nosql", + "redis", + "symfony" + ], + "time": "2019-02-20T07:03:43+00:00" }, { - "name": "symfony/intl", - "version": "v3.0.4", + "name": "symfony/cache", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/intl.git", - "reference": "020a5dcd764e426013dacc2814e7ce4ac09ac2b3" + "url": "https://github.com/symfony/cache.git", + "reference": "2edc417da273bafee589a8758f0278416d04af38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/020a5dcd764e426013dacc2814e7ce4ac09ac2b3", - "reference": "020a5dcd764e426013dacc2814e7ce4ac09ac2b3", + "url": "https://api.github.com/repos/symfony/cache/zipball/2edc417da273bafee589a8758f0278416d04af38", + "reference": "2edc417da273bafee589a8758f0278416d04af38", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-intl-icu": "~1.0" + "php": "^7.1.3", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "symfony/cache-contracts": "^1.1", + "symfony/service-contracts": "^1.1", + "symfony/var-exporter": "^4.2" }, - "require-dev": { - "symfony/filesystem": "~2.8|~3.0" + "conflict": { + "doctrine/dbal": "<2.5", + "symfony/dependency-injection": "<3.4", + "symfony/var-dumper": "<3.4" }, - "suggest": { - "ext-intl": "to use the component with locales other than \"en\"" + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.5", + "predis/predis": "~1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.1", + "symfony/var-dumper": "^4.1.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Intl\\": "" + "Symfony\\Component\\Cache\\": "" }, - "classmap": [ - "Resources/stubs" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -1186,58 +1234,52 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Eriksen Costa", - "email": "eriksen.costa@infranology.com.br" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.", + "description": "Symfony Cache component with PSR-6, PSR-16, and tags", "homepage": "https://symfony.com", "keywords": [ - "i18n", - "icu", - "internationalization", - "intl", - "l10n", - "localization" + "caching", + "psr6" ], - "time": "2016-03-23 13:23:25" + "time": "2019-06-06T10:05:02+00:00" }, { - "name": "symfony/monolog-bridge", - "version": "v2.1.13", - "target-dir": "Symfony/Bridge/Monolog", + "name": "symfony/cache-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "cdf03eef2f4e36ddea868b5b12fc9467425b5b38" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "ec5524b669744b5f1dc9c66d3c2b091eb7e7f0db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/cdf03eef2f4e36ddea868b5b12fc9467425b5b38", - "reference": "cdf03eef2f4e36ddea868b5b12fc9467425b5b38", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ec5524b669744b5f1dc9c66d3c2b091eb7e7f0db", + "reference": "ec5524b669744b5f1dc9c66d3c2b091eb7e7f0db", "shasum": "" }, "require": { - "monolog/monolog": ">=1.0,<1.3-dev", - "php": ">=5.3.3", - "symfony/http-kernel": "2.1.*" + "php": "^7.1.3", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } }, - "type": "symfony-bridge", "autoload": { - "psr-0": { - "Symfony\\Bridge\\Monolog": "" + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1246,44 +1288,67 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Monolog Bridge", - "homepage": "http://symfony.com", - "time": "2013-01-09 08:51:07" + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" }, { - "name": "symfony/options-resolver", - "version": "v2.8.4", + "name": "symfony/config", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "496d650b0137e57c2920eb14f9d366ff506761a8" + "url": "https://github.com/symfony/config.git", + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/496d650b0137e57c2920eb14f9d366ff506761a8", - "reference": "496d650b0137e57c2920eb14f9d366ff506761a8", + "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" + "Symfony\\Component\\Config\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1303,41 +1368,65 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony OptionsResolver Component", + "description": "Symfony Config Component", "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2016-03-04 07:54:35" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/polyfill-apcu", - "version": "v1.1.1", + "name": "symfony/console", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "0c901e4e65a2f7ece68f0fd249b56d6ad3adc214" + "url": "https://github.com/symfony/console.git", + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/0c901e4e65a2f7ece68f0fd249b56d6ad3adc214", - "reference": "0c901e4e65a2f7ece68f0fd249b56d6ad3adc214", + "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "files": [ - "bootstrap.php" + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1346,55 +1435,54 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "description": "Symfony Console Component", "homepage": "https://symfony.com", - "keywords": [ - "apcu", - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2016-03-03 16:49:40" + "time": "2019-06-05T13:25:51+00:00" }, { - "name": "symfony/polyfill-intl-icu", - "version": "v1.1.1", + "name": "symfony/debug", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "8328069d9f5322f0e7b3c3518485acfdc94c3942" + "url": "https://github.com/symfony/debug.git", + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/8328069d9f5322f0e7b3c3518485acfdc94c3942", - "reference": "8328069d9f5322f0e7b3c3518485acfdc94c3942", + "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/intl": "~2.3|~3.0" + "php": "^7.1.3", + "psr/log": "~1.0" }, - "suggest": { - "ext-intl": "For best performance" + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "files": [ - "bootstrap.php" + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1403,58 +1491,71 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's ICU-related data and classes", + "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" - ], - "time": "2016-02-26 16:18:12" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.1.1", + "name": "symfony/dependency-injection", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "1289d16209491b584839022f29257ad859b8532d" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", - "reference": "1289d16209491b584839022f29257ad859b8532d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.2" + }, + "conflict": { + "symfony/config": "<4.3", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { - "ext-mbstring": "For best performance" + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Component\\DependencyInjection\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1463,51 +1564,47 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2016-01-20 09:13:37" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/process", - "version": "v2.8.4", + "name": "symfony/dotenv", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "fb467471952ef5cf8497c029980e556b47545333" + "url": "https://github.com/symfony/dotenv.git", + "reference": "efd677abff68ea6fcfd9c60dbdacb96d0d97b382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/fb467471952ef5cf8497c029980e556b47545333", - "reference": "fb467471952ef5cf8497c029980e556b47545333", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/efd677abff68ea6fcfd9c60dbdacb96d0d97b382", + "reference": "efd677abff68ea6fcfd9c60dbdacb96d0d97b382", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1.3" + }, + "require-dev": { + "symfony/process": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Component\\Dotenv\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1527,36 +1624,62 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Registers environment variables from a .env file", "homepage": "https://symfony.com", - "time": "2016-03-23 13:11:46" + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2019-05-07T09:02:05+00:00" }, { - "name": "symfony/property-access", - "version": "v3.0.4", + "name": "symfony/event-dispatcher", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "475e661a0b90f0e6942a7d2fdf4e0dbf8104fef3" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/475e661a0b90f0e6942a7d2fdf4e0dbf8104fef3", - "reference": "475e661a0b90f0e6942a7d2fdf4e0dbf8104fef3", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" + "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1576,64 +1699,41 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony PropertyAccess Component", + "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" - ], - "time": "2016-03-23 13:23:25" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/routing", - "version": "v2.3.39", - "target-dir": "Symfony/Component/Routing", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "9f464f27cb127232f5c32d5a736fe769e5249442" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8fa2cf2177083dd59cf8e44ea4b6541764fbda69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9f464f27cb127232f5c32d5a736fe769e5249442", - "reference": "9f464f27cb127232f5c32d5a736fe769e5249442", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8fa2cf2177083dd59cf8e44ea4b6541764fbda69", + "reference": "8fa2cf2177083dd59cf8e44ea4b6541764fbda69", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "doctrine/common": "~2.2", - "psr/log": "~1.0", - "symfony/config": "~2.2", - "symfony/http-foundation": "~2.3", - "symfony/yaml": "~2.0,>=2.0.5" + "php": "^7.1.3" }, "suggest": { - "doctrine/common": "", - "symfony/config": "", - "symfony/yaml": "" + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1641,127 +1741,102 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", - "time": "2016-03-04 07:12:06" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-05-22T12:23:29+00:00" }, { - "name": "symfony/security", - "version": "v2.3.23", - "target-dir": "Symfony/Component/Security", + "name": "symfony/filesystem", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/security.git", - "reference": "c3100eb623f97650fa4cdede3e832a497b8e473c" + "url": "https://github.com/symfony/filesystem.git", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/c3100eb623f97650fa4cdede3e832a497b8e473c", - "reference": "c3100eb623f97650fa4cdede3e832a497b8e473c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/event-dispatcher": "~2.1", - "symfony/http-foundation": "~2.1", - "symfony/http-kernel": "~2.1" - }, - "require-dev": { - "doctrine/common": "~2.2", - "doctrine/dbal": "~2.2", - "ircmaxell/password-compat": "~1.0", - "psr/log": "~1.0", - "symfony/form": "~2.0", - "symfony/routing": "~2.2", - "symfony/validator": "~2.2" - }, - "suggest": { - "doctrine/dbal": "to use the built-in ACL implementation", - "ircmaxell/password-compat": "", - "symfony/class-loader": "", - "symfony/finder": "", - "symfony/form": "", - "symfony/routing": "", - "symfony/validator": "" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Security\\": "" - } + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Security Component", - "homepage": "http://symfony.com", - "time": "2014-12-02 19:42:47" + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2019-06-03T20:27:40+00:00" }, { - "name": "symfony/translation", - "version": "v2.8.4", + "name": "symfony/finder", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "d60b8e076d22953aabebeebda53bf334438e7aca" + "url": "https://github.com/symfony/finder.git", + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d60b8e076d22953aabebeebda53bf334438e7aca", - "reference": "d60b8e076d22953aabebeebda53bf334438e7aca", + "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/config": "<2.7" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8", - "symfony/intl": "~2.4|~3.0.0", - "symfony/yaml": "~2.2|~3.0.0" - }, - "suggest": { - "psr/log": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Translation\\": "" + "Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1781,68 +1856,158 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Translation Component", + "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-03-25 01:40:30" + "time": "2019-05-26T20:47:49+00:00" }, { - "name": "symfony/twig-bridge", - "version": "v2.8.4", + "name": "symfony/flex", + "version": "v1.2.7", "source": { "type": "git", - "url": "https://github.com/symfony/twig-bridge.git", - "reference": "11326178aea4aceb99f72c8ff0cac32d668309c7" + "url": "https://github.com/symfony/flex.git", + "reference": "8618b243d44bac71e4006062f245d807d84f7a6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/8618b243d44bac71e4006062f245d807d84f7a6c", + "reference": "8618b243d44bac71e4006062f245d807d84f7a6c", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": "^7.0" + }, + "require-dev": { + "composer/composer": "^1.0.2", + "symfony/dotenv": "^3.4|^4.0", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8", + "symfony/process": "^2.7|^3.0|^4.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + }, + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "time": "2019-06-15T07:15:42+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "fe407e6840d2b8f34c3fb67111e05c6d65319ef6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/11326178aea4aceb99f72c8ff0cac32d668309c7", - "reference": "11326178aea4aceb99f72c8ff0cac32d668309c7", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/fe407e6840d2b8f34c3fb67111e05c6d65319ef6", + "reference": "fe407e6840d2b8f34c3fb67111e05c6d65319ef6", "shasum": "" }, "require": { - "php": ">=5.3.9", - "twig/twig": "~1.23|~2.0" + "ext-xml": "*", + "php": "^7.1.3", + "symfony/cache": "~4.3", + "symfony/config": "~4.2", + "symfony/dependency-injection": "^4.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/http-foundation": "^4.3", + "symfony/http-kernel": "^4.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^4.3" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.0", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/asset": "<3.4", + "symfony/browser-kit": "<4.3", + "symfony/console": "<4.3", + "symfony/dom-crawler": "<4.3", + "symfony/dotenv": "<4.2", + "symfony/form": "<4.3", + "symfony/messenger": "<4.3", + "symfony/property-info": "<3.4", + "symfony/serializer": "<4.2", + "symfony/stopwatch": "<3.4", + "symfony/translation": "<4.3", + "symfony/twig-bridge": "<4.1.1", + "symfony/validator": "<4.1", + "symfony/workflow": "<4.3" }, "require-dev": { - "symfony/asset": "~2.7|~3.0.0", - "symfony/console": "~2.8|~3.0.0", - "symfony/expression-language": "~2.4|~3.0.0", - "symfony/finder": "~2.3|~3.0.0", - "symfony/form": "~2.8.4", - "symfony/http-kernel": "~2.8|~3.0.0", + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "fig/link-util": "^1.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/asset": "~3.4|~4.0", + "symfony/browser-kit": "^4.3", + "symfony/console": "^4.3", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dom-crawler": "^4.3", + "symfony/expression-language": "~3.4|~4.0", + "symfony/form": "^4.3", + "symfony/http-client": "^4.3", + "symfony/lock": "~3.4|~4.0", + "symfony/mailer": "^4.3", + "symfony/messenger": "^4.3", + "symfony/mime": "^4.3", "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.2|~3.0.0", - "symfony/security": "~2.6|~3.0.0", - "symfony/security-acl": "~2.6|~3.0.0", - "symfony/stopwatch": "~2.2|~3.0.0", - "symfony/templating": "~2.1|~3.0.0", - "symfony/translation": "~2.7|~3.0.0", - "symfony/var-dumper": "~2.6|~3.0.0", - "symfony/yaml": "~2.0,>=2.0.5|~3.0.0" + "symfony/process": "~3.4|~4.0", + "symfony/property-info": "~3.4|~4.0", + "symfony/security-csrf": "~3.4|~4.0", + "symfony/security-http": "~3.4|~4.0", + "symfony/serializer": "^4.3", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/twig-bundle": "~2.8|~3.2|~4.0", + "symfony/validator": "^4.1", + "symfony/var-dumper": "^4.3", + "symfony/web-link": "~3.4|~4.0", + "symfony/workflow": "^4.3", + "symfony/yaml": "~3.4|~4.0", + "twig/twig": "~1.34|~2.4" }, "suggest": { - "symfony/asset": "For using the AssetExtension", - "symfony/expression-language": "For using the ExpressionExtension", - "symfony/finder": "", - "symfony/form": "For using the FormExtension", - "symfony/http-kernel": "For using the HttpKernelExtension", - "symfony/routing": "For using the RoutingExtension", - "symfony/security": "For using the SecurityExtension", - "symfony/stopwatch": "For using the StopwatchExtension", - "symfony/templating": "For using the TwigEngine", - "symfony/translation": "For using the TranslationExtension", - "symfony/var-dumper": "For using the DumpExtension", - "symfony/yaml": "For using the YamlExtension" - }, - "type": "symfony-bridge", + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Bridge\\Twig\\": "" + "Symfony\\Bundle\\FrameworkBundle\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1862,59 +2027,42 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Twig Bridge", + "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "time": "2016-03-25 18:30:27" + "time": "2019-06-06T08:35:06+00:00" }, { - "name": "symfony/validator", - "version": "v2.8.4", + "name": "symfony/http-foundation", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "ea0ce99531c9eb82abf21011da4e111932f8ce81" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ea0ce99531c9eb82abf21011da4e111932f8ce81", - "reference": "ea0ce99531c9eb82abf21011da4e111932f8ce81", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/translation": "~2.4|~3.0.0" + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "doctrine/annotations": "~1.0", - "doctrine/cache": "~1.0", - "egulias/email-validator": "~1.2,>=1.2.1", - "symfony/config": "~2.2|~3.0.0", - "symfony/expression-language": "~2.4|~3.0.0", - "symfony/http-foundation": "~2.1|~3.0.0", - "symfony/intl": "~2.7.4|~2.8|~3.0.0", - "symfony/property-access": "~2.3|~3.0.0", - "symfony/yaml": "~2.0,>=2.0.5|~3.0.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader and metadata cache.", - "egulias/email-validator": "Strict (RFC compliant) email validation", - "symfony/config": "", - "symfony/expression-language": "For using the 2.4 Expression validator", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/property-access": "For using the 2.4 Validator API", - "symfony/yaml": "" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Validator\\": "" + "Symfony\\Component\\HttpFoundation\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1934,36 +2082,79 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Validator Component", + "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2016-03-27 12:57:53" + "time": "2019-06-06T10:05:02+00:00" }, { - "name": "symfony/yaml", - "version": "v2.8.4", + "name": "symfony/http-kernel", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/584e52cb8f788a887553ba82db6caacb1d6260bb", - "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" + }, + "conflict": { + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" + "Symfony\\Component\\HttpKernel\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1983,112 +2174,116 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "time": "2019-06-06T13:23:34+00:00" }, { - "name": "twig/twig", - "version": "v1.24.0", + "name": "symfony/mime", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8" + "url": "https://github.com/symfony/mime.git", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8", - "reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8", + "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", "shasum": "" }, "require": { - "php": ">=5.2.7" + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~2.7" + "egulias/email-validator": "^2.0", + "symfony/dependency-injection": "~3.4|^4.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.24-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "psr-0": { - "Twig_": "lib/" - } + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" + "email": "fabien@symfony.com" }, { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", "keywords": [ - "templating" + "mime", + "mime-type" ], - "time": "2016-01-25 21:22:18" - } - ], - "packages-dev": [ + "time": "2019-06-04T09:22:54+00:00" + }, { - "name": "deployer/deployer", - "version": "4.x-dev", + "name": "symfony/monolog-bridge", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/deployphp/deployer.git", - "reference": "aa0a10992c8fc2e2b34ab6adff734f1f598c0ba7" + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "64179561f09cf196090fd5d86888a5f99d86d30a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/deployphp/deployer/zipball/aa0a10992c8fc2e2b34ab6adff734f1f598c0ba7", - "reference": "aa0a10992c8fc2e2b34ab6adff734f1f598c0ba7", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/64179561f09cf196090fd5d86888a5f99d86d30a", + "reference": "64179561f09cf196090fd5d86888a5f99d86d30a", "shasum": "" }, "require": { - "deployer/phar-update": "^1.0", - "elfet/pure": "~2.0", - "php": ">=5.5.0", - "phpseclib/phpseclib": "~2.0", - "symfony/console": "~2.6|~3.0", - "symfony/finder": "~2.6|~3.0", - "symfony/process": "~2.6|~3.0", - "symfony/yaml": "~2.6|~3.0" + "monolog/monolog": "~1.19", + "php": "^7.1.3", + "symfony/http-kernel": "^4.3", + "symfony/service-contracts": "^1.1" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/http-foundation": "<3.4" }, "require-dev": { - "phpunit/phpunit": "~4.5" + "symfony/console": "~3.4|~4.0", + "symfony/security-core": "~3.4|~4.0", + "symfony/var-dumper": "~3.4|~4.0" }, "suggest": { - "ext-sockets": "For parallel deployment", - "herzult/php-ssh": "For SSH support through native SSH2 extension" + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } }, - "bin": [ - "bin/dep" - ], - "type": "library", "autoload": { "psr-4": { - "Deployer\\": "src/" - } + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2096,43 +2291,58 @@ ], "authors": [ { - "name": "Anton Medvedev", - "email": "anton@medv.io" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Deployment Tool", - "homepage": "http://deployer.org", - "time": "2016-05-18 06:50:02" + "description": "Symfony Monolog Bridge", + "homepage": "https://symfony.com", + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "deployer/phar-update", - "version": "v1.0.0", + "name": "symfony/monolog-bundle", + "version": "v3.4.0", "source": { "type": "git", - "url": "https://github.com/deployphp/phar-update.git", - "reference": "df2670056d9922b6f02e055ce9846508656b02aa" + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/deployphp/phar-update/zipball/df2670056d9922b6f02e055ce9846508656b02aa", - "reference": "df2670056d9922b6f02e055ce9846508656b02aa", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/7fbecb371c1c614642c93c6b2cbcdf723ae8809d", + "reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d", "shasum": "" }, "require": { - "herrera-io/phar-update": "~2.0", - "php": ">=5.3.3", - "symfony/console": "^2.1|^3.0" + "monolog/monolog": "~1.22", + "php": ">=5.6", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4.10|^4.0.10", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/monolog-bridge": "~3.4|~4.0" }, "require-dev": { - "herrera-io/box": "~1.0", - "herrera-io/phpunit-test-case": "1.*", - "phpunit/phpunit": "3.7.*" + "symfony/console": "~3.4|~4.0", + "symfony/phpunit-bridge": "^3.4.19|^4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } }, - "type": "library", "autoload": { "psr-4": { - "Deployer\\Component\\PharUpdate\\": "src/" - } + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2140,59 +2350,57 @@ ], "authors": [ { - "name": "Kevin Herrera", - "email": "kevin@herrera.io", - "homepage": "http://kevin.herrera.io" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" }, { - "name": "Anton Medvedev", - "email": "anton@medv.io", - "homepage": "http://medv.io" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Integrates Phar Update to Symfony Console.", - "homepage": "https://github.com/deployphp/phar-update", + "description": "Symfony MonologBundle", + "homepage": "http://symfony.com", "keywords": [ - "console", - "phar", - "update" + "log", + "logging" ], - "time": "2016-04-06 13:32:59" + "time": "2019-06-20T12:18:19+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.0.5", + "name": "symfony/polyfill-intl-idn", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2200,52 +2408,59 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", "keywords": [ - "constructor", - "instantiate" + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" ], - "time": "2015-06-14 21:17:01" + "time": "2019-03-04T13:44:35+00:00" }, { - "name": "elfet/pure", - "version": "v2.0.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/elfet/purephp.git", - "reference": "9d6422d31b89c4f79c322df2a7772936a8bc74a1" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elfet/purephp/zipball/9d6422d31b89c4f79c322df2a7772936a8bc74a1", - "reference": "9d6422d31b89c4f79c322df2a7772936a8bc74a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "shasum": "" }, "require": { - "react/react": "~0.4", - "symfony/console": "~2.6|~3.0", - "symfony/debug": "~2.6|~3.0", - "symfony/expression-language": "~2.6|~3.0" + "php": ">=5.3.3" }, - "require-dev": { - "phpunit/phpunit": "~4.4", - "symfony/finder": "~2.6|~3.0", - "symfony/process": "~2.6|~3.0" + "suggest": { + "ext-mbstring": "For best performance" }, - "bin": [ - "pure" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, "autoload": { "psr-4": { - "Pure\\": "src/" - } + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2253,40 +2468,55 @@ ], "authors": [ { - "name": "Anton Medvedev", - "email": "anton@medv.io" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Pure PHP key-value storage", - "time": "2016-03-19 14:26:03" + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "evenement/evenement", - "version": "v2.0.0", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/f6e843799fd4f4184d54d8fc7b5b3551c9fa803e", - "reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.11-dev" } }, "autoload": { - "psr-0": { - "Evenement": "src" - } + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2294,54 +2524,56 @@ ], "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch", - "homepage": "http://wiedler.ch/igor/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Événement is a very simple event dispatching library for PHP", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "event-dispatcher", - "event-emitter" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2012-11-02 14:49:47" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "1.3.0", + "name": "symfony/polyfill-php73", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "31382fef2889136415751badebbd1cb022a4ed72" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72", - "reference": "31382fef2889136415751badebbd1cb022a4ed72", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.11-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" + "Symfony\\Polyfill\\Php73\\": "" }, "files": [ - "src/functions_include.php" + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2350,58 +2582,75 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PSR-7 message implementation", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "http", - "message", - "stream", - "uri" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2016-04-13 19:56:01" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "herrera-io/json", - "version": "1.0.3", + "name": "symfony/routing", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/kherge-abandoned/php-json.git", - "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1" + "url": "https://github.com/symfony/routing.git", + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kherge-abandoned/php-json/zipball/60c696c9370a1e5136816ca557c17f82a6fa83f1", - "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", "shasum": "" }, "require": { - "ext-json": "*", - "justinrainbow/json-schema": ">=1.0,<2.0-dev", - "php": ">=5.3.3", - "seld/jsonlint": ">=1.0,<2.0-dev" + "php": "^7.1.3" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { - "herrera-io/phpunit-test-case": "1.*", - "mikey179/vfsstream": "1.1.0", - "phpunit/phpunit": "3.7.*" + "doctrine/annotations": "~1.2", + "psr/log": "~1.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "files": [ - "src/lib/json_version.php" - ], - "psr-0": { - "Herrera\\Json": "src/lib" - } + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2409,57 +2658,54 @@ ], "authors": [ { - "name": "Kevin Herrera", - "email": "kevin@herrera.io", - "homepage": "http://kevin.herrera.io" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A library for simplifying JSON linting and validation.", - "homepage": "http://herrera-io.github.com/php-json", + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", "keywords": [ - "json", - "lint", - "schema", - "validate" + "router", + "routing", + "uri", + "url" ], - "time": "2013-10-30 16:51:34" + "time": "2019-06-05T09:16:20+00:00" }, { - "name": "herrera-io/phar-update", - "version": "2.0.0", + "name": "symfony/service-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/kherge-abandoned/php-phar-update.git", - "reference": "15643c90d3d43620a4f45c910e6afb7a0ad4b488" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kherge-abandoned/php-phar-update/zipball/15643c90d3d43620a4f45c910e6afb7a0ad4b488", - "reference": "15643c90d3d43620a4f45c910e6afb7a0ad4b488", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", "shasum": "" }, "require": { - "herrera-io/json": "1.*", - "herrera-io/version": "1.*", - "php": ">=5.3.3" + "php": "^7.1.3", + "psr/container": "^1.0" }, - "require-dev": { - "herrera-io/phpunit-test-case": "1.*", - "mikey179/vfsstream": "1.1.0", - "phpunit/phpunit": "3.7.*" + "suggest": { + "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "files": [ - "src/lib/constants.php" - ], - "psr-0": { - "Herrera\\Phar\\Update": "src/lib" + "psr-4": { + "Symfony\\Contracts\\Service\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2468,50 +2714,105 @@ ], "authors": [ { - "name": "Kevin Herrera", - "email": "kevin@herrera.io", - "homepage": "http://kevin.herrera.io" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A library for self-updating Phars.", - "homepage": "http://herrera-io.github.com/php-phar-update", + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", "keywords": [ - "phar", - "update" - ], - "time": "2013-11-09 17:13:13" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" }, { - "name": "herrera-io/version", - "version": "1.1.1", + "name": "symfony/twig-bridge", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/kherge-abandoned/php-version.git", - "reference": "d39d9642b92a04d8b8a28b871b797a35a2545e85" + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "52aa76480b775be0f6465b90ca9e3c2dccc8f3cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kherge-abandoned/php-version/zipball/d39d9642b92a04d8b8a28b871b797a35a2545e85", - "reference": "d39d9642b92a04d8b8a28b871b797a35a2545e85", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/52aa76480b775be0f6465b90ca9e3c2dccc8f3cd", + "reference": "52aa76480b775be0f6465b90ca9e3c2dccc8f3cd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "twig/twig": "^1.41|^2.10" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/form": "<4.3", + "symfony/http-foundation": "<4.3", + "symfony/translation": "<4.2", + "symfony/workflow": "<4.3" }, "require-dev": { - "herrera-io/phpunit-test-case": "1.*", - "phpunit/phpunit": "3.7.*" + "egulias/email-validator": "^2.0", + "symfony/asset": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/form": "^4.3", + "symfony/http-foundation": "~4.3", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/mime": "~4.3", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~3.4|~4.0", + "symfony/security-acl": "~2.8|~3.0", + "symfony/security-csrf": "~3.4|~4.0", + "symfony/security-http": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "^4.2.1", + "symfony/var-dumper": "~3.4|~4.0", + "symfony/web-link": "~3.4|~4.0", + "symfony/workflow": "~4.3", + "symfony/yaml": "~3.4|~4.0" }, - "type": "library", + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/templating": "For using the TwigEngine", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "psr-0": { - "Herrera\\Version": "src/lib" - } + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2519,159 +2820,194 @@ ], "authors": [ { - "name": "Kevin Herrera", - "email": "kevin@herrera.io", - "homepage": "http://kevin.herrera.io" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A library for creating, editing, and comparing semantic versioning numbers.", - "homepage": "http://github.com/herrera-io/php-version", - "keywords": [ - "semantic", - "version" - ], - "time": "2014-05-27 05:29:25" + "description": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "time": "2019-06-01T07:11:44+00:00" }, { - "name": "justinrainbow/json-schema", - "version": "1.6.1", + "name": "symfony/twig-bundle", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341" + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "b8e1c193a474b97b608de74fe0a01214678bfd89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341", - "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/b8e1c193a474b97b608de74fe0a01214678bfd89", + "reference": "b8e1c193a474b97b608de74fe0a01214678bfd89", "shasum": "" }, "require": { - "php": ">=5.3.29" + "php": "^7.1.3", + "symfony/config": "~4.2", + "symfony/http-foundation": "~4.3", + "symfony/http-kernel": "~4.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/twig-bridge": "^4.3", + "twig/twig": "~1.41|~2.10" }, - "require-dev": { - "json-schema/json-schema-test-suite": "1.1.0", - "phpdocumentor/phpdocumentor": "~2", - "phpunit/phpunit": "~3.7" + "conflict": { + "symfony/dependency-injection": "<4.1", + "symfony/framework-bundle": "<4.3", + "symfony/translation": "<4.2" }, - "bin": [ - "bin/validate-json" - ], - "type": "library", + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "symfony/asset": "~3.4|~4.0", + "symfony/dependency-injection": "^4.2.5", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/form": "~3.4|~4.0", + "symfony/framework-bundle": "~4.3", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "^4.2", + "symfony/web-link": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "time": "2016-01-25 15:43:01" + "description": "Symfony TwigBundle", + "homepage": "https://symfony.com", + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.5.1", + "name": "symfony/var-exporter", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "a8773992b362b58498eed24bf85005f363c34771" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "2b7c857d553423b2317ac0741fb2581d9bfd8fb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a8773992b362b58498eed24bf85005f363c34771", - "reference": "a8773992b362b58498eed24bf85005f363c34771", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2b7c857d553423b2317ac0741fb2581d9bfd8fb7", + "reference": "2b7c857d553423b2317ac0741fb2581d9bfd8fb7", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.1.3" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "symfony/var-dumper": "^4.1.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", "keywords": [ "clone", - "copy", - "duplicate", - "object", - "object graph" + "construct", + "export", + "hydrate", + "instantiate", + "serialize" ], - "time": "2015-11-20 12:04:31" + "time": "2019-04-10T19:42:49+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0", + "name": "symfony/yaml", + "version": "v4.3.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "url": "https://github.com/symfony/yaml.git", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2679,1230 +3015,862 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-12-27 11:43:31" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-06-10 09:48:41" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2016-06-10 07:14:17" - }, - { - "name": "phpseclib/phpseclib", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "3d265f7c079f5b37d33475f996d7a383c5fc8aeb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/3d265f7c079f5b37d33475f996d7a383c5fc8aeb", - "reference": "3d265f7c079f5b37d33475f996d7a383c5fc8aeb", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "time": "2016-05-13 01:15:21" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2019-04-06T14:04:46+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.6.1", + "name": "twig/twig", + "version": "v2.11.3", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "url": "https://github.com/twigphp/Twig.git", + "reference": "699ed2342557c88789a15402de5eb834dedd6792" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/699ed2342557c88789a15402de5eb834dedd6792", + "reference": "699ed2342557c88789a15402de5eb834dedd6792", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "php": "^7.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "2.11-dev" } }, "autoload": { "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "Twig_": "lib/" }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2016-06-07 08:13:47" - }, - { - "name": "phpunit/php-code-coverage", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "900370c81280cc0d942ffbc5912d80464eaee7e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/900370c81280cc0d942ffbc5912d80464eaee7e9", - "reference": "900370c81280cc0d942ffbc5912d80464eaee7e9", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0|~2.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2016-06-03 05:03:56" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" + "psr-4": { + "Twig\\": "src/" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2015-06-21 13:08:43" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4|~5" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", + "role": "Contributors" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", "keywords": [ - "timer" + "templating" ], - "time": "2016-05-12 18:03:57" - }, + "time": "2019-06-18T15:37:11+00:00" + } + ], + "packages-dev": [ { - "name": "phpunit/php-token-stream", - "version": "1.4.8", + "name": "doctrine/instantiator", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-09-15 10:49:45" - }, - { - "name": "phpunit/phpunit", - "version": "5.4.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "6c8a756c17a1a92a066c99860eb57922e8b723da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6c8a756c17a1a92a066c99860eb57922e8b723da", - "reference": "6c8a756c17a1a92a066c99860eb57922e8b723da", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2016-07-21 06:55:27" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "3.2.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "b13d0d9426ced06958bd32104653526a6c998a52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/b13d0d9426ced06958bd32104653526a6c998a52", - "reference": "b13d0d9426ced06958bd32104653526a6c998a52", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2" - }, - "conflict": { - "phpunit/phpunit": "<5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev" + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ - "mock", - "xunit" + "constructor", + "instantiate" ], - "time": "2016-06-12 07:37:26" + "time": "2019-03-17T17:37:11+00:00" }, { - "name": "psr/http-message", - "version": "1.0", + "name": "myclabs/deep-copy", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" - } + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], - "time": "2015-05-04 20:22:00" + "time": "2019-04-07T13:18:21+00:00" }, { - "name": "psr/log", - "version": "1.0.0", + "name": "phar-io/manifest", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" }, { - "name": "react/cache", - "version": "v0.4.1", + "name": "phar-io/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "558f614891341b1d817a8cdf9a358948ec49638f" + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/558f614891341b1d817a8cdf9a358948ec49638f", - "reference": "558f614891341b1d817a8cdf9a358948ec49638f", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/promise": "~2.0|~1.1" + "php": "^5.6 || ^7.0" }, "type": "library", "autoload": { - "psr-4": { - "React\\Cache\\": "src\\" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Async caching.", - "keywords": [ - "cache" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], - "time": "2016-02-25 18:17:16" + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" }, { - "name": "react/child-process", - "version": "v0.4.0", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/reactphp/child-process.git", - "reference": "8bf211533bcbb2034e00528a47400367570dc3d7" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/8bf211533bcbb2034e00528a47400367570dc3d7", - "reference": "8bf211533bcbb2034e00528a47400367570dc3d7", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "evenement/evenement": "~2.0", - "php": ">=5.4.0", - "react/event-loop": "0.4.*", - "react/stream": "0.4.*" + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "React\\ChildProcess\\": "" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Library for executing child processes.", + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "process" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], - "time": "2014-02-02 01:11:26" + "time": "2017-09-11T18:02:19+00:00" }, { - "name": "react/dns", - "version": "v0.4.2", + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.1", "source": { "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "62f6201e487df8add209cc42f05ffca33ee1ba05" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/62f6201e487df8add209cc42f05ffca33ee1ba05", - "reference": "62f6201e487df8add209cc42f05ffca33ee1ba05", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/cache": "~0.4.0|~0.3.0", - "react/promise": "~2.0|~1.1", - "react/socket": "~0.4.0|~0.3.0" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "React\\Dns\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Async DNS resolver.", - "keywords": [ - "dns", - "dns-resolver" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2016-02-24 23:45:36" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2019-04-30T17:48:53+00:00" }, { - "name": "react/event-loop", - "version": "v0.4.2", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", "source": { "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "164799f73175e1c80bba92a220ea35df6ca371dd" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/164799f73175e1c80bba92a220ea35df6ca371dd", - "reference": "164799f73175e1c80bba92a220ea35df6ca371dd", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, - "suggest": { - "ext-event": "~1.0", - "ext-libev": "*", - "ext-libevent": ">=0.1.0" + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.5-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "React\\EventLoop\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Event loop abstraction layer that libraries can use for evented I/O.", - "keywords": [ - "asynchronous", - "event-loop" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2016-03-08 02:09:32" + "time": "2017-07-14T14:27:02+00:00" }, { - "name": "react/http", - "version": "v0.4.1", + "name": "phpspec/prophecy", + "version": "1.8.1", "source": { "type": "git", - "url": "https://github.com/reactphp/http.git", - "reference": "f575989d67b7db0a65f5dd7e431d8f47af6c2f7b" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/http/zipball/f575989d67b7db0a65f5dd7e431d8f47af6c2f7b", - "reference": "f575989d67b7db0a65f5dd7e431d8f47af6c2f7b", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { - "evenement/evenement": "^2.0", - "guzzlehttp/psr7": "^1.0", - "php": ">=5.4.0", - "react/socket": "^0.4", - "react/stream": "^0.4" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.5-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { "psr-4": { - "React\\Http\\": "src" + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Library for building an evented http server.", + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "http" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "time": "2015-05-21 20:12:09" + "time": "2019-06-13T12:50:23+00:00" }, { - "name": "react/http-client", - "version": "v0.4.10", + "name": "phpunit/php-code-coverage", + "version": "7.0.5", "source": { "type": "git", - "url": "https://github.com/reactphp/http-client.git", - "reference": "1a37937274cc7bf7ef194381c83f5a4ad5253575" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "aed67b57d459dcab93e84a5c9703d3deb5025dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/http-client/zipball/1a37937274cc7bf7ef194381c83f5a4ad5253575", - "reference": "1a37937274cc7bf7ef194381c83f5a4ad5253575", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aed67b57d459dcab93e84a5c9703d3deb5025dff", + "reference": "aed67b57d459dcab93e84a5c9703d3deb5025dff", "shasum": "" }, "require": { - "evenement/evenement": "~2.0", - "guzzlehttp/psr7": "^1.0", - "php": ">=5.4.0", - "react/dns": "0.4.*", - "react/event-loop": "0.4.*", - "react/promise": "~2.2", - "react/socket-client": "^0.5 || ^0.4 || ^0.3", - "react/stream": "0.4.*" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.1", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-xdebug": "^2.6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.5-dev" + "dev-master": "7.0-dev" } }, "autoload": { - "psr-4": { - "React\\HttpClient\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "description": "Asynchronous HTTP client library.", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "http" + "coverage", + "testing", + "xunit" ], - "time": "2016-03-21 14:01:16" + "time": "2019-06-06T12:28:18+00:00" }, { - "name": "react/promise", - "version": "v2.4.1", + "name": "phpunit/php-file-iterator", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "8025426794f1944de806618671d4fa476dc7626f" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8025426794f1944de806618671d4fa476dc7626f", - "reference": "8025426794f1944de806618671d4fa476dc7626f", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "time": "2016-05-03 17:50:52" + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" }, { - "name": "react/react", - "version": "v0.4.2", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/reactphp/react.git", - "reference": "457b6b8a16a37c11278cac0870d6d2ff911c5765" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/react/zipball/457b6b8a16a37c11278cac0870d6d2ff911c5765", - "reference": "457b6b8a16a37c11278cac0870d6d2ff911c5765", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.4.0", - "react/cache": "0.4.*", - "react/child-process": "0.4.*", - "react/dns": "0.4.*", - "react/event-loop": "0.4.*", - "react/http": "0.4.*", - "react/http-client": "0.4.*", - "react/promise": "~2.1", - "react/socket": "0.4.*", - "react/socket-client": "0.4.*", - "react/stream": "0.4.*" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "ext-event": "Allows for use of a more performant event-loop implementation.", - "ext-libev": "Allows for use of a more performant event-loop implementation.", - "ext-libevent": "Allows for use of a more performant event-loop implementation." + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5-dev" - } + "autoload": { + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "description": "Nuclear Reactor written in PHP.", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "asynchronous", - "event-loop", - "reactor" + "template" ], - "time": "2014-12-11 02:06:55" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "react/socket", - "version": "v0.4.3", + "name": "phpunit/php-timer", + "version": "2.1.2", "source": { "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "ce015ec5879b96f5d30905f035f223aa85013fcc" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/ce015ec5879b96f5d30905f035f223aa85013fcc", - "reference": "ce015ec5879b96f5d30905f035f223aa85013fcc", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { - "evenement/evenement": "~2.0|~1.0", - "php": ">=5.3.0", - "react/event-loop": "0.4.*|0.3.*", - "react/stream": "0.4.*|0.3.*" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "psr-4": { - "React\\Socket\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "description": "Library for building an evented socket server.", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "Socket" + "timer" ], - "time": "2016-03-01 20:10:35" + "time": "2019-06-07T04:22:29+00:00" }, { - "name": "react/socket-client", - "version": "v0.4.5", + "name": "phpunit/php-token-stream", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/reactphp/socket-client.git", - "reference": "a25539f2cd30b4be56e35de9f96f6aa744246cc2" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket-client/zipball/a25539f2cd30b4be56e35de9f96f6aa744246cc2", - "reference": "a25539f2cd30b4be56e35de9f96f6aa744246cc2", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", + "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", "shasum": "" }, "require": { - "php": ">=5.4.0", - "react/dns": "0.4.*", - "react/event-loop": "0.4.*", - "react/promise": "~2.0", - "react/stream": "0.4.*" + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "React\\SocketClient\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "description": "Async connector to open TCP/IP and SSL/TLS based connections.", + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "Socket" + "tokenizer" ], - "time": "2016-03-27 18:31:39" + "time": "2018-10-30T05:52:18+00:00" }, { - "name": "react/stream", - "version": "v0.4.3", + "name": "phpunit/phpunit", + "version": "8.2.3", "source": { "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "305b2328d2a2e157bc13b61a0f5c6e41b666b188" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f67ca36860ebca7224d4573f107f79bd8ed0ba03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/305b2328d2a2e157bc13b61a0f5c6e41b666b188", - "reference": "305b2328d2a2e157bc13b61a0f5c6e41b666b188", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f67ca36860ebca7224d4573f107f79bd8ed0ba03", + "reference": "f67ca36860ebca7224d4573f107f79bd8ed0ba03", "shasum": "" }, "require": { - "evenement/evenement": "^2.0|^1.0", - "php": ">=5.3.8" + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.2", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^7.0.5", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.2", + "sebastian/exporter": "^3.1.0", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.0", + "sebastian/version": "^2.0.1" }, "require-dev": { - "react/event-loop": "^0.4|^0.3", - "react/promise": "^2.0|^1.0" + "ext-pdo": "*" }, "suggest": { - "react/event-loop": "^0.4", - "react/promise": "^2.0" + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "0.5-dev" + "dev-master": "8.2-dev" } }, "autoload": { - "psr-4": { - "React\\Stream\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "description": "Basic readable and writable stream interfaces that support piping.", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "pipe", - "stream" + "phpunit", + "testing", + "xunit" ], - "time": "2015-10-07 18:32:58" + "time": "2019-06-19T12:03:56+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -3927,34 +3895,34 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", - "version": "1.2.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3985,38 +3953,39 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2015-07-26 15:48:44" + "time": "2018-07-12T15:12:46+00:00" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4041,34 +4010,40 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2015-12-08 07:14:41" + "time": "2019-02-04T06:01:07+00:00" }, { "name": "sebastian/environment", - "version": "1.3.7", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" + "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", + "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -4093,34 +4068,34 @@ "environment", "hhvm" ], - "time": "2016-05-17 03:18:57" + "time": "2019-05-05T09:05:15+00:00" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -4160,27 +4135,30 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2017-04-03T13:19:02+00:00" }, { "name": "sebastian/global-state", - "version": "1.1.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" @@ -4188,7 +4166,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4211,33 +4189,34 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2019-02-01T05:30:01+00:00" }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -4257,32 +4236,32 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2017-08-03T12:35:26+00:00" }, { - "name": "sebastian/recursion-context", - "version": "1.0.2", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -4295,44 +4274,39 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" }, { - "name": "sebastian/resource-operations", - "version": "1.0.0", + "name": "sebastian/recursion-context", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -4345,36 +4319,44 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" }, { - "name": "sebastian/version", - "version": "2.0.0", + "name": "sebastian/resource-operations", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4389,253 +4371,168 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" - }, - { - "name": "seld/jsonlint", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "66834d3e3566bb5798db7294619388786ae99394" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394", - "reference": "66834d3e3566bb5798db7294619388786ae99394", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "email": "sebastian@phpunit.de" } ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "time": "2015-11-21 02:21:41" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" }, { - "name": "symfony/debug", - "version": "v3.1.0", + "name": "sebastian/type", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "c9ed5a44dbc783a352f06b20440863c7463de907" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "251ca774d58181fe1d3eda68843264eaae7e07ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/c9ed5a44dbc783a352f06b20440863c7463de907", - "reference": "c9ed5a44dbc783a352f06b20440863c7463de907", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/251ca774d58181fe1d3eda68843264eaae7e07ef", + "reference": "251ca774d58181fe1d3eda68843264eaae7e07ef", "shasum": "" }, "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "php": "^7.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2016-05-24 10:06:56" + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2019-06-19T06:39:12+00:00" }, { - "name": "symfony/expression-language", - "version": "v3.1.0", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/expression-language.git", - "reference": "9db6f176064fbd3f5ced4865be60b335b6a12723" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/9db6f176064fbd3f5ced4865be60b335b6a12723", - "reference": "9db6f176064fbd3f5ced4865be60b335b6a12723", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\ExpressionLanguage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony ExpressionLanguage Component", - "homepage": "https://symfony.com", - "time": "2016-03-10 11:16:56" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "symfony/var-dumper", - "version": "v3.1.0", + "name": "theseer/tokenizer", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "436195b421e8c0493ca3e390c1fbecd8ee08c546" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/436195b421e8c0493ca3e390c1fbecd8ee08c546", - "reference": "436195b421e8c0493ca3e390c1fbecd8ee08c546", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "twig/twig": "~1.20|~2.0" - }, - "suggest": { - "ext-symfony_debug": "" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "time": "2016-05-24 10:06:56" + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" }, { "name": "webmozart/assert", - "version": "1.0.2", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -4659,21 +4556,18 @@ "check", "validate" ], - "time": "2015-08-24 13:29:44" + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "twig/twig": 20, - "monolog/monolog": 20, - "dms/meetup-api-client": 20, - "deployer/deployer": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.3.3" + "php": "^7.1.3", + "ext-ctype": "*", + "ext-iconv": "*" }, "platform-dev": [] } diff --git a/config/bootstrap.php b/config/bootstrap.php new file mode 100644 index 0000000..7810896 --- /dev/null +++ b/config/bootstrap.php @@ -0,0 +1,8 @@ + ['all' => true], + Snc\RedisBundle\SncRedisBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], +]; diff --git a/config/dev.php b/config/dev.php deleted file mode 100644 index ecd399d..0000000 --- a/config/dev.php +++ /dev/null @@ -1,13 +0,0 @@ -register(new MonologServiceProvider(), array( - 'monolog.logfile' => __DIR__.'/../logs/silex.log', -)); diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..adc74ff --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,7 @@ +framework: + cache: + pools: + cache.default: + adapter: cache.adapter.redis + default_lifetime: 900 + provider: snc_redis.cache diff --git a/config/packages/dev/monolog.yaml b/config/packages/dev/monolog.yaml new file mode 100644 index 0000000..7155458 --- /dev/null +++ b/config/packages/dev/monolog.yaml @@ -0,0 +1,11 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/config/packages/dev/routing.yaml b/config/packages/dev/routing.yaml new file mode 100644 index 0000000..4116679 --- /dev/null +++ b/config/packages/dev/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: true diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..bc8ccec --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,8 @@ +framework: + secret: '%secret%' + session: + handler_id: ~ + cookie_secure: auto + cookie_samesite: lax + php_errors: + log: true diff --git a/config/packages/prod/monolog.yaml b/config/packages/prod/monolog.yaml new file mode 100644 index 0000000..5bcdf06 --- /dev/null +++ b/config/packages/prod/monolog.yaml @@ -0,0 +1,23 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log" + deprecation_filter: + type: filter + handler: deprecation + max_level: info + channels: ["php"] diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..a15c4ec --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,4 @@ +framework: + router: + strict_requirements: ~ + utf8: true diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..1821ccc --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/config/packages/snc_redis.yaml b/config/packages/snc_redis.yaml new file mode 100644 index 0000000..ab4b76b --- /dev/null +++ b/config/packages/snc_redis.yaml @@ -0,0 +1,6 @@ +snc_redis: + clients: + default: + type: predis + alias: default + dsn: '%redis_dsn%' diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml new file mode 100644 index 0000000..d051c84 --- /dev/null +++ b/config/packages/test/framework.yaml @@ -0,0 +1,4 @@ +framework: + test: true + session: + storage_id: session.storage.mock_file diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml new file mode 100644 index 0000000..2762653 --- /dev/null +++ b/config/packages/test/monolog.yaml @@ -0,0 +1,7 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] diff --git a/config/packages/test/routing.yaml b/config/packages/test/routing.yaml new file mode 100644 index 0000000..4116679 --- /dev/null +++ b/config/packages/test/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: true diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..d1582a2 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,4 @@ +twig: + default_path: '%kernel.project_dir%/templates' + debug: '%kernel.debug%' + strict_variables: '%kernel.debug%' diff --git a/config/prod.php b/config/prod.php deleted file mode 100644 index eb2ebb2..0000000 --- a/config/prod.php +++ /dev/null @@ -1,3 +0,0 @@ -meetupService = $meetupService; + $this->randomService = $randomService; + $this->predis = $predis; + $this->twig = $twig; + } + + /** + * @Route(name="homepage", path="/", methods={"GET"}) + */ + public function index(Request $request): Response + { + $cacheBusting = filter_var($request->get('cache_busting', false), FILTER_VALIDATE_BOOLEAN); + + return new Response($this->twig->render( + 'index.html.twig', + ['meetups' => $this->meetupService->getPresentAndPastEvents($cacheBusting)] + )); + } + + /** + * @Route(name="event", path="/event/{id}", methods={"GET"}) + */ + public function event(string $id): Response + { + $event = $this->meetupService->getEvent($id); + + $checkins = array_filter($this->predis->lrange('checkin_'.$id, 0, 300)); + + $winners = (count($checkins) > 0)? $this->randomService->getRandomNumbers(count($checkins)) : []; + return new Response($this->twig->render( + 'event.html.twig', + ['event' => $event, 'winners' => $winners, 'checkins' => $checkins] + )); + } + + /** + * @Route(name="event_checkin", path="/event/{eventId}/checkin", methods={"GET", "POST"}) + */ + public function checkIn(Request $request, string $eventId): Response + { + if ($request->isMethod(Request::METHOD_POST)) { + $userId = $request->request->get('user_id'); + + $this->predis->lpush('checkin_'.$eventId, $userId); + + return new JsonResponse(['result' => 'ok']); + } + + $event = $this->meetupService->getEvent($eventId); + $checkins = array_filter($this->predis->lrange('checkin_'.$eventId, 0, 300)); + + return new Response($this->twig->render( + 'event_checkin.html.twig', + ['event' => $event, 'checkins' => $checkins] + )); + } +} diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..bb38abb --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,54 @@ +getProjectDir().'/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + public function getProjectDir(): string + { + return \dirname(__DIR__); + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = $this->getProjectDir().'/config'; + + $loader->load($confDir.'/parameters'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{packages}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); + } + + protected function configureRoutes(RouteCollectionBuilder $routes): void + { + $confDir = $this->getProjectDir().'/config'; + + $routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); + } +} diff --git a/src/Raffle/MeetupService.php b/src/Raffle/MeetupService.php index cc74c63..419668f 100644 --- a/src/Raffle/MeetupService.php +++ b/src/Raffle/MeetupService.php @@ -1,10 +1,11 @@ client = $client; $this->group = $group; @@ -44,12 +37,8 @@ public function __construct(AbstractMeetupClient $client, $group, Client $cache) /** * Fetch all events in the past and up to a day in the future. - * - * @param bool $bustCache - * - * @return MultiResultResponse */ - private function getEvents($bustCache = false) + private function getEvents(bool $bustCache = false): MultiResultResponse { $cached = $this->getFromCache('events_cache'); if ($bustCache == false && $cached !== null) { @@ -70,12 +59,7 @@ private function getEvents($bustCache = false) return $events; } - /** - * @param bool $bustCache - * - * @return mixed - */ - public function getPresentAndPastEvents($bustCache = false) + public function getPresentAndPastEvents(bool $bustCache = false): array { $events = $this->getEvents($bustCache); @@ -88,34 +72,30 @@ public function getPresentAndPastEvents($bustCache = false) /** * Get a single event. - * - * @param string $id - * @return array */ - public function getEvent($id) + public function getEvent(string $id): array { - $cached = $this->getFromCache('event_cache_'.$id); if ($cached !== null) { return $cached; } // Fetch, event, checkins and RSVPs (only the latter has pictures) - $event = $this->client->getEvent(array('id' => $id)); + $event = $this->client->getEvents(['event_id' => $id]); - $rsvps = $this->client->getRSVPs( - array('event_id' => $id, 'rsvp' => 'yes', 'order' => 'name', 'fields' => 'host', 'page' => 300) + $rsvps = $this->client->getRsvps( + ['event_id' => $id, 'rsvp' => 'yes', 'order' => 'name', 'fields' => 'host', 'page' => 300] ); - $event = $event->toArray(); - $event['checkins'] = array(); - $event['rsvps'] = array(); + $event = $event->toArray()[0]; + $event['checkins'] = []; + $event['rsvps'] = []; foreach ($rsvps as $rsvp) { $event['rsvps'][] = array( - 'id' => $rsvp['member']['member_id'], - 'name' => $rsvp['member']['name'], - 'photo' => isset($rsvp['member_photo']) ? $rsvp['member_photo'] : null, - 'host' => $rsvp['host'] + 'id' => $rsvp['member']['member_id'], + 'name' => $rsvp['member']['name'], + 'photo' => $rsvp['member_photo'] ?? null, + 'host' => $rsvp['host'] ); } @@ -124,22 +104,14 @@ public function getEvent($id) return $event; } - /** - * @param string $key - * @param mixed $data - */ - private function saveInCache($key, $data) + private function saveInCache(string $key, $data): void { $value = serialize($data); $this->cache->set($key, $value); $this->cache->expire($key, 3600); } - /** - * @param string $key - * @return mixed|null - */ - private function getFromCache($key) + private function getFromCache(string $key) { if (! $this->cache->exists($key)) { return null; diff --git a/src/Raffle/RandomService.php b/src/Raffle/RandomService.php index 0d88511..97ca400 100644 --- a/src/Raffle/RandomService.php +++ b/src/Raffle/RandomService.php @@ -1,6 +1,7 @@ getGenerator(new Strength(Strength::MEDIUM)); $numbers = []; - while(count($numbers) < $amount) { + while (count($numbers) < $amount) { // Amount minus 1 since we want results ranging from zero till amount $numbers[] = $generator->generateInt(0, $amount - 1); $numbers = array_unique($numbers); diff --git a/src/app.php b/src/app.php deleted file mode 100644 index c8599b5..0000000 --- a/src/app.php +++ /dev/null @@ -1,52 +0,0 @@ -register(new UrlGeneratorServiceProvider()); -$app->register(new ValidatorServiceProvider()); - -// Twig Configuration -$app->register(new TwigServiceProvider(), array( - 'twig.path' => array(__DIR__.'/../templates'), - 'twig.options' => array('cache' => __DIR__.'/../cache'), -)); -$app['twig'] = $app->share($app->extend('twig', function($twig) { - return $twig; -})); -$app->register(new Silex\Provider\UrlGeneratorServiceProvider()); - -// Session -$app->register(new Silex\Provider\SessionServiceProvider()); - -// Meetup service -$config = [ - 'key' => '', -]; - -if (isset($app['config']['meetup_api_key'])) { - $config['key'] = $app['config']['meetup_api_key']; -} - -$app['meetup'] = new MeetupService( - MeetupKeyAuthClient::factory($config), - $app['config']['meetup_group'], - new Client() -); - -// Random service -$app['random'] = new RandomService(); - -return $app; diff --git a/src/controllers.php b/src/controllers.php deleted file mode 100644 index 12a0e4a..0000000 --- a/src/controllers.php +++ /dev/null @@ -1,83 +0,0 @@ -get('/', function (Request $request) use ($app) { - $cacheBusting = filter_var($request->get('cache_busting', false), FILTER_VALIDATE_BOOLEAN); - - /** @var \Raffle\MeetupService $meetupService */ - $meetupService = $app['meetup']; - - return $app['twig']->render( - 'index.html.twig', - array('meetups' => $meetupService->getPresentAndPastEvents($cacheBusting)) - ); -})->bind('homepage'); - -// Specific event -$app->get('/event/{id}', function ($id) use ($app) { - $event = $app['meetup']->getEvent($id); - - /** @var RandomService $randomService */ - $randomService = $app['random']; - - $client = new Client(); - $checkins = array_filter($client->lrange('checkin_'.$id, 0, 300)); - - $winners = (count($checkins) > 0)? $randomService->getRandomNumbers(count($checkins)) : array(); - return $app['twig']->render( - 'event.html.twig', - array('event' => $event, 'winners' => $winners, 'checkins' => $checkins) - ); -})->bind('event'); - -// Check-in page for Event -$app->get('/event/{id}/checkin', function ($id, Request $request) use ($app) { - - $event = $app['meetup']->getEvent($id); - $client = new Client(); - $checkins = array_filter($client->lrange('checkin_'.$id, 0, 300)); - - return $app['twig']->render( - 'event_checkin.html.twig', - array('event' => $event, 'checkins' => $checkins) - ); -})->bind('event_checkin'); - -// Checks a user into an event -$app->post('/user/checkin', function (Request $request) use ($app) { - - $userId = $request->get('user_id'); - $eventId = $request->get('event_id'); - - $client = new Client(); - $client->lpush('checkin_'.$eventId, $userId); - - return new Response( - json_encode(array('result' => 'ok')), - 200, - array('Content-Type' => 'application/json') - ); - -})->bind('user_checkin'); - -// Error page -$app->error(function (\Exception $e, $code) use ($app) { - if ($app['debug']) { - return; - } - - $page = 404 == $code ? '404.html' : '500.html'; - - return new Response($app['twig']->render($page, array('code' => $code)), $code); -}); diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 0000000..481f4e3 --- /dev/null +++ b/symfony.lock @@ -0,0 +1,335 @@ +{ + "dms/meetup-api-client": { + "version": "v2.3.1" + }, + "doctrine/annotations": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "cb4152ebcadbe620ea2261da1a1c5a9b8cea7672" + }, + "files": [ + "config/routes/annotations.yaml" + ] + }, + "doctrine/cache": { + "version": "v1.8.0" + }, + "doctrine/collections": { + "version": "v1.6.2" + }, + "doctrine/event-manager": { + "version": "v1.0.0" + }, + "doctrine/instantiator": { + "version": "1.2.0" + }, + "doctrine/lexer": { + "version": "1.0.2" + }, + "doctrine/persistence": { + "version": "1.1.1" + }, + "doctrine/reflection": { + "version": "v1.0.0" + }, + "guzzle/guzzle": { + "version": "v3.8.1" + }, + "ircmaxell/random-lib": { + "version": "v1.2.0" + }, + "ircmaxell/security-lib": { + "version": "v1.1.0" + }, + "monolog/monolog": { + "version": "1.24.0" + }, + "myclabs/deep-copy": { + "version": "1.9.1" + }, + "phar-io/manifest": { + "version": "1.0.3" + }, + "phar-io/version": { + "version": "2.0.1" + }, + "phpdocumentor/reflection-common": { + "version": "1.0.1" + }, + "phpdocumentor/reflection-docblock": { + "version": "4.3.1" + }, + "phpdocumentor/type-resolver": { + "version": "0.4.0" + }, + "phpspec/prophecy": { + "version": "1.8.1" + }, + "phpunit/php-code-coverage": { + "version": "7.0.5" + }, + "phpunit/php-file-iterator": { + "version": "2.0.2" + }, + "phpunit/php-text-template": { + "version": "1.2.1" + }, + "phpunit/php-timer": { + "version": "2.1.2" + }, + "phpunit/php-token-stream": { + "version": "3.0.1" + }, + "phpunit/phpunit": { + "version": "4.7", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.7", + "ref": "f6f9ee3a511e9d9ad6a53d92fbaa1a709ed8c1ca" + }, + "files": [ + ".env.test", + "phpunit.xml.dist", + "config/bootstrap.php", + "tests/.gitignore" + ] + }, + "predis/predis": { + "version": "v1.1.1" + }, + "psr/cache": { + "version": "1.0.1" + }, + "psr/container": { + "version": "1.0.0" + }, + "psr/log": { + "version": "1.1.0" + }, + "sebastian/code-unit-reverse-lookup": { + "version": "1.0.1" + }, + "sebastian/comparator": { + "version": "3.0.2" + }, + "sebastian/diff": { + "version": "3.0.2" + }, + "sebastian/environment": { + "version": "4.2.2" + }, + "sebastian/exporter": { + "version": "3.1.0" + }, + "sebastian/global-state": { + "version": "3.0.0" + }, + "sebastian/object-enumerator": { + "version": "3.0.3" + }, + "sebastian/object-reflector": { + "version": "1.1.1" + }, + "sebastian/recursion-context": { + "version": "3.0.0" + }, + "sebastian/resource-operations": { + "version": "2.0.1" + }, + "sebastian/type": { + "version": "1.1.2" + }, + "sebastian/version": { + "version": "2.0.1" + }, + "sensio/framework-extra-bundle": { + "version": "5.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.2", + "ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b" + }, + "files": [ + "config/packages/sensio_framework_extra.yaml" + ] + }, + "snc/redis-bundle": { + "version": "2.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "2.0", + "ref": "e9c58bfc414cfb7f06e8e5ae9f589868498f5d6a" + }, + "files": [ + "config/packages/snc_redis.yaml" + ] + }, + "symfony/cache": { + "version": "v4.3.1" + }, + "symfony/cache-contracts": { + "version": "v1.1.1" + }, + "symfony/config": { + "version": "v4.3.1" + }, + "symfony/console": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "482d233eb8de91ebd042992077bbd5838858890c" + }, + "files": [ + "bin/console", + "config/bootstrap.php" + ] + }, + "symfony/debug": { + "version": "v4.3.1" + }, + "symfony/dependency-injection": { + "version": "v4.3.1" + }, + "symfony/dotenv": { + "version": "v4.3.1" + }, + "symfony/event-dispatcher": { + "version": "v4.3.1" + }, + "symfony/event-dispatcher-contracts": { + "version": "v1.1.1" + }, + "symfony/filesystem": { + "version": "v4.3.1" + }, + "symfony/finder": { + "version": "v4.3.1" + }, + "symfony/flex": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "dc3fc2e0334a4137c47cfd5a3ececc601fa61a0b" + }, + "files": [ + ".env" + ] + }, + "symfony/framework-bundle": { + "version": "4.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.2", + "ref": "0dfae0b1cd8349ae47659b35602f772b4a7e2280" + }, + "files": [ + "config/bootstrap.php", + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/packages/test/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/http-foundation": { + "version": "v4.3.1" + }, + "symfony/http-kernel": { + "version": "v4.3.1" + }, + "symfony/mime": { + "version": "v4.3.1" + }, + "symfony/monolog-bridge": { + "version": "v4.3.1" + }, + "symfony/monolog-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "6240c6d43e8237a32452f057f81816820fd56ab6" + }, + "files": [ + "config/packages/dev/monolog.yaml", + "config/packages/prod/monolog.yaml", + "config/packages/test/monolog.yaml" + ] + }, + "symfony/polyfill-intl-idn": { + "version": "v1.11.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.11.0" + }, + "symfony/polyfill-php72": { + "version": "v1.11.0" + }, + "symfony/polyfill-php73": { + "version": "v1.11.0" + }, + "symfony/routing": { + "version": "4.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.2", + "ref": "5374e24d508ba8fd6ba9eb15170255fdb778316a" + }, + "files": [ + "config/packages/dev/routing.yaml", + "config/packages/routing.yaml", + "config/packages/test/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/service-contracts": { + "version": "v1.1.2" + }, + "symfony/twig-bridge": { + "version": "v4.3.1" + }, + "symfony/twig-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "369b5b29dc52b2c190002825ae7ec24ab6f962dd" + }, + "files": [ + "config/packages/twig.yaml", + "config/routes/dev/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/var-exporter": { + "version": "v4.3.1" + }, + "symfony/yaml": { + "version": "v4.3.1" + }, + "theseer/tokenizer": { + "version": "1.1.3" + }, + "twig/twig": { + "version": "v2.11.3" + }, + "webmozart/assert": { + "version": "1.4.0" + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig new file mode 100644 index 0000000..043f42d --- /dev/null +++ b/templates/base.html.twig @@ -0,0 +1,12 @@ + + + + + {% block title %}Welcome!{% endblock %} + {% block stylesheets %}{% endblock %} + + + {% block body %}{% endblock %} + {% block javascripts %}{% endblock %} + + diff --git a/templates/404.html b/templates/bundles/TwigBundle/Exception/error404.html.twig similarity index 100% rename from templates/404.html rename to templates/bundles/TwigBundle/Exception/error404.html.twig diff --git a/templates/500.html b/templates/bundles/TwigBundle/Exception/error500.html.twig similarity index 100% rename from templates/500.html rename to templates/bundles/TwigBundle/Exception/error500.html.twig diff --git a/templates/event.html.twig b/templates/event.html.twig index fbc0990..569e2b3 100644 --- a/templates/event.html.twig +++ b/templates/event.html.twig @@ -7,7 +7,7 @@

{{ event.name }}

- + {% for checkin in event.rsvps if checkin.id in checkins %}
diff --git a/templates/event_checkin.html.twig b/templates/event_checkin.html.twig index 92c7b88..3a3920e 100644 --- a/templates/event_checkin.html.twig +++ b/templates/event_checkin.html.twig @@ -33,12 +33,11 @@ var params, $rsvpBlock = $(this); params = { - user_id: $rsvpBlock.attr('data-user-id'), - event_id: "{{ event.id }}" + user_id: $rsvpBlock.attr('data-user-id') }; if (window.confirm("Checkin as " + $rsvpBlock.attr('data-user-name') + "?")) { - $.post("/user/checkin", params, function() { + $.post(window.location, params, function() { $rsvpBlock.addClass('checked_in'); $rsvpBlock.removeClass('not_checked_in'); $rsvpBlock.unbind('click'); diff --git a/tests/unit/Raffle/RandomServiceTest.php b/tests/unit/Raffle/RandomServiceTest.php index b1b6255..437218b 100644 --- a/tests/unit/Raffle/RandomServiceTest.php +++ b/tests/unit/Raffle/RandomServiceTest.php @@ -1,39 +1,42 @@ service = new RandomService(); } - public function test_amount_of_random_numbers_returned() + public function test_amount_of_random_numbers_returned(): void { $numbers = $this->service->getRandomNumbers(10); $this->assertCount(10, $numbers); } - public function test_list_of_random_numbers_are_unique() + public function test_list_of_random_numbers_are_unique(): void { $numbers = $this->service->getRandomNumbers(10); $uniqueNumbers = array_unique($numbers); $this->assertSame($numbers, $uniqueNumbers); } - public function test_list_is_empty_when_amount_zero() + public function test_list_is_empty_when_amount_zero(): void { // The service should not return any numbers if the amount is zero $this->assertEmpty($this->service->getRandomNumbers(0)); } - public function test_list_includes_zero() + public function test_list_includes_zero(): void { // The service should return _all_ numbers for $amount in random order $this->assertContains(0, $this->service->getRandomNumbers(1)); diff --git a/web/index.php b/web/index.php index 2f21359..e30f90c 100644 --- a/web/index.php +++ b/web/index.php @@ -1,27 +1,27 @@ run(); +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$request = Request::createFromGlobals(); +$response = $kernel->handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/web/index_dev.php b/web/index_dev.php deleted file mode 100644 index 0ff2392..0000000 --- a/web/index_dev.php +++ /dev/null @@ -1,20 +0,0 @@ -run(); From b25c982626b4a45d18fca2ad8039516992814132 Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Sat, 22 Jun 2019 11:29:21 +0200 Subject: [PATCH 3/8] Introduce CheckInService to abstract away from Predis in controller --- src/Controller/EventController.php | 16 ++++++++-------- src/Raffle/CheckInService.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 src/Raffle/CheckInService.php diff --git a/src/Controller/EventController.php b/src/Controller/EventController.php index 6e25af2..d023a9e 100644 --- a/src/Controller/EventController.php +++ b/src/Controller/EventController.php @@ -3,9 +3,9 @@ namespace App\Controller; +use App\Raffle\CheckInService; use App\Raffle\MeetupService; use App\Raffle\RandomService; -use Predis\ClientInterface; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -25,9 +25,9 @@ final class EventController private $randomService; /** - * @var ClientInterface + * @var CheckInService */ - private $predis; + private $checkInService; /** * @var Environment @@ -37,12 +37,12 @@ final class EventController public function __construct( MeetupService $meetupService, RandomService $randomService, - ClientInterface $predis, + CheckInService $checkInService, Environment $twig ) { $this->meetupService = $meetupService; $this->randomService = $randomService; - $this->predis = $predis; + $this->checkInService = $checkInService; $this->twig = $twig; } @@ -66,7 +66,7 @@ public function event(string $id): Response { $event = $this->meetupService->getEvent($id); - $checkins = array_filter($this->predis->lrange('checkin_'.$id, 0, 300)); + $checkins = $this->checkInService->getCheckInsForEvent($id); $winners = (count($checkins) > 0)? $this->randomService->getRandomNumbers(count($checkins)) : []; return new Response($this->twig->render( @@ -83,13 +83,13 @@ public function checkIn(Request $request, string $eventId): Response if ($request->isMethod(Request::METHOD_POST)) { $userId = $request->request->get('user_id'); - $this->predis->lpush('checkin_'.$eventId, $userId); + $this->checkInService->checkIn($eventId, $userId); return new JsonResponse(['result' => 'ok']); } $event = $this->meetupService->getEvent($eventId); - $checkins = array_filter($this->predis->lrange('checkin_'.$eventId, 0, 300)); + $checkins = $this->checkInService->getCheckInsForEvent($eventId); return new Response($this->twig->render( 'event_checkin.html.twig', diff --git a/src/Raffle/CheckInService.php b/src/Raffle/CheckInService.php new file mode 100644 index 0000000..a971914 --- /dev/null +++ b/src/Raffle/CheckInService.php @@ -0,0 +1,30 @@ +predis = $predis; + } + + public function checkIn(string $eventId, string $userId): void + { + $this->predis->lpush('checkin_'.$eventId, [$userId]); + } + + public function getCheckInsForEvent(string $eventId): array + { + return array_filter($this->predis->lrange('checkin_'.$eventId, 0, 300)); + } +} From 828e66f9b2ff04f31214cde3310e1bc841ba01c6 Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Sat, 22 Jun 2019 11:57:31 +0200 Subject: [PATCH 4/8] Use Symfony's cache for events --- composer.json | 1 + composer.lock | 372 +++++++++++++++++++++- config/bundles.php | 2 + config/packages/cache.yaml | 2 +- config/packages/dev/debug.yaml | 4 + config/packages/dev/easy_log_handler.yaml | 16 + config/packages/dev/web_profiler.yaml | 6 + config/packages/test/web_profiler.yaml | 6 + config/routes/dev/web_profiler.yaml | 7 + config/services.yaml | 4 + src/Controller/EventController.php | 12 +- src/Raffle/CachingMeetupService.php | 73 +++++ src/Raffle/MeetupService.php | 67 +--- src/Raffle/MeetupServiceInterface.php | 10 + symfony.lock | 50 +++ 15 files changed, 563 insertions(+), 69 deletions(-) create mode 100644 config/packages/dev/debug.yaml create mode 100644 config/packages/dev/easy_log_handler.yaml create mode 100644 config/packages/dev/web_profiler.yaml create mode 100644 config/packages/test/web_profiler.yaml create mode 100644 config/routes/dev/web_profiler.yaml create mode 100644 src/Raffle/CachingMeetupService.php create mode 100644 src/Raffle/MeetupServiceInterface.php diff --git a/composer.json b/composer.json index 0636fbc..812a602 100644 --- a/composer.json +++ b/composer.json @@ -12,6 +12,7 @@ "sensio/framework-extra-bundle": "^5.3", "snc/redis-bundle": "^2.1", "symfony/console": "4.3.*", + "symfony/debug-pack": "^1.0", "symfony/dotenv": "4.3.*", "symfony/flex": "^1.1", "symfony/framework-bundle": "4.3.*", diff --git a/composer.lock b/composer.lock index f3dd9da..a3aaacd 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "dc543d4bd5dfe615b3871acf3a492d70", + "content-hash": "e049e53cdcc175adfd7eb007d3c30922", "packages": [ { "name": "dms/meetup-api-client", @@ -569,6 +569,56 @@ ], "time": "2018-06-14T14:45:07+00:00" }, + { + "name": "easycorp/easy-log-handler", + "version": "v1.0.7", + "source": { + "type": "git", + "url": "https://github.com/EasyCorp/easy-log-handler.git", + "reference": "5f95717248d20684f88cfb878d8bf3d78aadcbba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/EasyCorp/easy-log-handler/zipball/5f95717248d20684f88cfb878d8bf3d78aadcbba", + "reference": "5f95717248d20684f88cfb878d8bf3d78aadcbba", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.6", + "php": ">=5.3.0", + "symfony/yaml": "~2.3|~3.0|~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "EasyCorp\\EasyLog\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Javier Eguiluz", + "email": "javiereguiluz@gmail.com" + }, + { + "name": "Project Contributors", + "homepage": "https://github.com/EasyCorp/easy-log-handler" + } + ], + "description": "A handler for Monolog that optimizes log messages to be processed by humans instead of software. Improve your productivity with logs that are easy to understand.", + "homepage": "https://github.com/EasyCorp/easy-log-handler", + "keywords": [ + "easy", + "log", + "logging", + "monolog", + "productivity" + ], + "time": "2018-07-27T15:41:37+00:00" + }, { "name": "guzzle/guzzle", "version": "v3.8.1", @@ -1503,6 +1553,102 @@ "homepage": "https://symfony.com", "time": "2019-05-30T16:10:05+00:00" }, + { + "name": "symfony/debug-bundle", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "9b80d1c97c11950f3e49c12fef3c8ccc8a42e601" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/9b80d1c97c11950f3e49c12fef3c8ccc8a42e601", + "reference": "9b80d1c97c11950f3e49c12fef3c8ccc8a42e601", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^7.1.3", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/twig-bridge": "~3.4|~4.0", + "symfony/var-dumper": "^4.1.1" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/web-profiler-bundle": "~3.4|~4.0" + }, + "suggest": { + "symfony/config": "For service container configuration", + "symfony/dependency-injection": "For using as a service from the container" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DebugBundle", + "homepage": "https://symfony.com", + "time": "2019-04-11T12:10:52+00:00" + }, + { + "name": "symfony/debug-pack", + "version": "v1.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-pack.git", + "reference": "09a4a1e9bf2465987d4f79db0ad6c11cc632bc79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-pack/zipball/09a4a1e9bf2465987d4f79db0ad6c11cc632bc79", + "reference": "09a4a1e9bf2465987d4f79db0ad6c11cc632bc79", + "shasum": "" + }, + "require": { + "easycorp/easy-log-handler": "^1.0.7", + "php": "^7.0", + "symfony/debug-bundle": "*", + "symfony/monolog-bundle": "^3.0", + "symfony/profiler-pack": "*", + "symfony/var-dumper": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A debug pack for Symfony projects", + "time": "2018-12-10T12:11:11+00:00" + }, { "name": "symfony/dependency-injection", "version": "v4.3.1", @@ -2600,6 +2746,34 @@ ], "time": "2019-02-06T07:57:58+00:00" }, + { + "name": "symfony/profiler-pack", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/profiler-pack.git", + "reference": "99c4370632c2a59bb0444852f92140074ef02209" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209", + "reference": "99c4370632c2a59bb0444852f92140074ef02209", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/stopwatch": "*", + "symfony/twig-bundle": "*", + "symfony/web-profiler-bundle": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony web profiler", + "time": "2018-12-10T12:11:44+00:00" + }, { "name": "symfony/routing", "version": "v4.3.1", @@ -2734,6 +2908,56 @@ ], "time": "2019-06-13T11:15:36+00:00" }, + { + "name": "symfony/stopwatch", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6b100e9309e8979cf1978ac1778eb155c1f7d93b", + "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/service-contracts": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2019-05-27T08:16:38+00:00" + }, { "name": "symfony/twig-bridge", "version": "v4.3.1", @@ -2908,6 +3132,82 @@ "homepage": "https://symfony.com", "time": "2019-05-30T16:10:05+00:00" }, + { + "name": "symfony/var-dumper", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "twig/twig": "~1.34|~2.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2019-06-05T02:08:12+00:00" + }, { "name": "symfony/var-exporter", "version": "v4.3.1", @@ -2968,6 +3268,72 @@ ], "time": "2019-04-10T19:42:49+00:00" }, + { + "name": "symfony/web-profiler-bundle", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "ca3a3c8558bc641df7c8c2c546381ccd78d0777a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ca3a3c8558bc641df7c8c2c546381ccd78d0777a", + "reference": "ca3a3c8558bc641df7c8c2c546381ccd78d0777a", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/config": "^4.2", + "symfony/http-kernel": "^4.3", + "symfony/routing": "~3.4|~4.0", + "symfony/twig-bundle": "~4.2", + "symfony/var-dumper": "~3.4|~4.0", + "twig/twig": "^1.41|^2.10" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/form": "<4.3", + "symfony/messenger": "<4.2", + "symfony/var-dumper": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebProfilerBundle", + "homepage": "https://symfony.com", + "time": "2019-05-30T16:10:05+00:00" + }, { "name": "symfony/yaml", "version": "v4.3.1", @@ -4565,7 +4931,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.1.3", + "php": "^7.2", "ext-ctype": "*", "ext-iconv": "*" }, diff --git a/config/bundles.php b/config/bundles.php index 33d80d3..bf9a543 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -6,4 +6,6 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], ]; diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml index adc74ff..01f3d9f 100644 --- a/config/packages/cache.yaml +++ b/config/packages/cache.yaml @@ -4,4 +4,4 @@ framework: cache.default: adapter: cache.adapter.redis default_lifetime: 900 - provider: snc_redis.cache + provider: snc_redis.default diff --git a/config/packages/dev/debug.yaml b/config/packages/dev/debug.yaml new file mode 100644 index 0000000..26d4e53 --- /dev/null +++ b/config/packages/dev/debug.yaml @@ -0,0 +1,4 @@ +debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/dev/easy_log_handler.yaml b/config/packages/dev/easy_log_handler.yaml new file mode 100644 index 0000000..27bfc60 --- /dev/null +++ b/config/packages/dev/easy_log_handler.yaml @@ -0,0 +1,16 @@ +services: + EasyCorp\EasyLog\EasyLogHandler: + public: false + arguments: ['%kernel.logs_dir%/%kernel.environment%.log'] + +#// FIXME: How to add this configuration automatically without messing up with the monolog configuration? +#monolog: +# handlers: +# buffered: +# type: buffer +# handler: easylog +# channels: ['!event'] +# level: debug +# easylog: +# type: service +# id: EasyCorp\EasyLog\EasyLogHandler diff --git a/config/packages/dev/web_profiler.yaml b/config/packages/dev/web_profiler.yaml new file mode 100644 index 0000000..e92166a --- /dev/null +++ b/config/packages/dev/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: true + intercept_redirects: false + +framework: + profiler: { only_exceptions: false } diff --git a/config/packages/test/web_profiler.yaml b/config/packages/test/web_profiler.yaml new file mode 100644 index 0000000..03752de --- /dev/null +++ b/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/config/routes/dev/web_profiler.yaml b/config/routes/dev/web_profiler.yaml new file mode 100644 index 0000000..c82beff --- /dev/null +++ b/config/routes/dev/web_profiler.yaml @@ -0,0 +1,7 @@ +web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + prefix: /_wdt + +web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + prefix: /_profiler diff --git a/config/services.yaml b/config/services.yaml index 5059114..2c02ed9 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -20,3 +20,7 @@ services: key: '%meetup_api_key%' Predis\ClientInterface: '@snc_redis.default' + + App\Raffle\MeetupServiceInterface: '@App\Raffle\MeetupService' + App\Raffle\CachingMeetupService: + decorates: 'App\Raffle\MeetupService' diff --git a/src/Controller/EventController.php b/src/Controller/EventController.php index d023a9e..40ac5ae 100644 --- a/src/Controller/EventController.php +++ b/src/Controller/EventController.php @@ -4,7 +4,7 @@ namespace App\Controller; use App\Raffle\CheckInService; -use App\Raffle\MeetupService; +use App\Raffle\MeetupServiceInterface; use App\Raffle\RandomService; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; @@ -15,7 +15,7 @@ final class EventController { /** - * @var MeetupService + * @var MeetupServiceInterface */ private $meetupService; @@ -35,7 +35,7 @@ final class EventController private $twig; public function __construct( - MeetupService $meetupService, + MeetupServiceInterface $meetupService, RandomService $randomService, CheckInService $checkInService, Environment $twig @@ -49,13 +49,11 @@ public function __construct( /** * @Route(name="homepage", path="/", methods={"GET"}) */ - public function index(Request $request): Response + public function index(): Response { - $cacheBusting = filter_var($request->get('cache_busting', false), FILTER_VALIDATE_BOOLEAN); - return new Response($this->twig->render( 'index.html.twig', - ['meetups' => $this->meetupService->getPresentAndPastEvents($cacheBusting)] + ['meetups' => $this->meetupService->getPresentAndPastEvents()] )); } diff --git a/src/Raffle/CachingMeetupService.php b/src/Raffle/CachingMeetupService.php new file mode 100644 index 0000000..99a8dfd --- /dev/null +++ b/src/Raffle/CachingMeetupService.php @@ -0,0 +1,73 @@ +inner = $inner; + $this->cacheItemPool = $cacheItemPool; + $this->requestStack = $requestStack; + } + + public function getPresentAndPastEvents(): array + { + if ($this->requestStack->getMasterRequest()->query->get('cache_busting', false)) { + return $this->inner->getPresentAndPastEvents(); + } + + $cachedEvents = $this->cacheItemPool->getItem('events_cache'); + if ($cachedEvents->isHit()) { + return $cachedEvents->get(); + } + + $events = $this->inner->getPresentAndPastEvents(); + + $cachedEvents->set($events); + $cachedEvents->expiresAfter(self::ONE_HOUR); + $this->cacheItemPool->save($cachedEvents); + + return $events; + } + + public function getEvent(string $id): array + { + $cachedEvent = $this->cacheItemPool->getItem('event_cache_'.$id); + if ($cachedEvent->isHit()) { + return $cachedEvent->get(); + } + + $event = $this->inner->getEvent($id); + + $cachedEvent->set($event); + $cachedEvent->expiresAfter(self::ONE_HOUR); + $this->cacheItemPool->save($cachedEvent); + + return $event; + } +} diff --git a/src/Raffle/MeetupService.php b/src/Raffle/MeetupService.php index 419668f..75839d3 100644 --- a/src/Raffle/MeetupService.php +++ b/src/Raffle/MeetupService.php @@ -4,10 +4,8 @@ namespace App\Raffle; use DMS\Service\Meetup\AbstractMeetupClient; -use DMS\Service\Meetup\Response\MultiResultResponse; -use Predis\ClientInterface; -final class MeetupService +final class MeetupService implements MeetupServiceInterface { /** * Meetup client @@ -23,46 +21,22 @@ final class MeetupService */ private $group; - /** - * @var ClientInterface - */ - private $cache; - - public function __construct(AbstractMeetupClient $client, string $group, ClientInterface $cache) + public function __construct(AbstractMeetupClient $client, string $group) { $this->client = $client; $this->group = $group; - $this->cache = $cache; } - /** - * Fetch all events in the past and up to a day in the future. - */ - private function getEvents(bool $bustCache = false): MultiResultResponse + public function getPresentAndPastEvents(): array { - $cached = $this->getFromCache('events_cache'); - if ($bustCache == false && $cached !== null) { - return $cached; - } - - // Fetch past and future events (only upcoming contains the current event) $events = $this->client->getEvents( - array( + [ 'group_urlname' => $this->group, 'status' => 'past,upcoming', 'desc' => 'desc' - ) + ] ); - $this->saveInCache('events_cache', $events); - - return $events; - } - - public function getPresentAndPastEvents(bool $bustCache = false): array - { - $events = $this->getEvents($bustCache); - // Filter out events further in the future than a day $dayFromNow = (time() + (24 * 60 * 60)) * 1000; return $events->filter(function($value) use ($dayFromNow) { @@ -75,11 +49,6 @@ public function getPresentAndPastEvents(bool $bustCache = false): array */ public function getEvent(string $id): array { - $cached = $this->getFromCache('event_cache_'.$id); - if ($cached !== null) { - return $cached; - } - // Fetch, event, checkins and RSVPs (only the latter has pictures) $event = $this->client->getEvents(['event_id' => $id]); @@ -89,34 +58,16 @@ public function getEvent(string $id): array $event = $event->toArray()[0]; $event['checkins'] = []; - $event['rsvps'] = []; + $event['rsvps'] = []; foreach ($rsvps as $rsvp) { $event['rsvps'][] = array( - 'id' => $rsvp['member']['member_id'], - 'name' => $rsvp['member']['name'], + 'id' => $rsvp['member']['member_id'], + 'name' => $rsvp['member']['name'], 'photo' => $rsvp['member_photo'] ?? null, - 'host' => $rsvp['host'] + 'host' => $rsvp['host'] ); } - $this->saveInCache('event_cache_'.$id, $event); - return $event; } - - private function saveInCache(string $key, $data): void - { - $value = serialize($data); - $this->cache->set($key, $value); - $this->cache->expire($key, 3600); - } - - private function getFromCache(string $key) - { - if (! $this->cache->exists($key)) { - return null; - } - - return unserialize($this->cache->get($key)); - } } diff --git a/src/Raffle/MeetupServiceInterface.php b/src/Raffle/MeetupServiceInterface.php new file mode 100644 index 0000000..a122d92 --- /dev/null +++ b/src/Raffle/MeetupServiceInterface.php @@ -0,0 +1,10 @@ + Date: Sat, 22 Jun 2019 15:07:04 +0200 Subject: [PATCH 5/8] Replace Gulp with Symfony Encore --- .gitignore | 7 + Makefile | 22 ++ README.md | 26 +-- Vagrantfile | 2 +- assets/css/app.css | 3 + assets/js/app.js | 14 ++ circle.yml | 2 +- composer.json | 1 + composer.lock | 187 +++++++++++++++- config/bundles.php | 1 + config/packages/assets.yaml | 3 + config/packages/prod/webpack_encore.yaml | 4 + config/packages/webpack_encore.yaml | 14 ++ gulpfile.js | 55 ----- package.json | 22 +- post-install.sh | 4 - source/js/raffler.js | 10 +- source/scss/main.scss | 23 +- symfony.lock | 24 ++ templates/event.html.twig | 13 +- templates/event_checkin.html.twig | 2 +- templates/layout.html.twig | 7 +- web/assets/entrypoints.json | 14 ++ web/assets/images/avatar.3d50e83f.png | Bin 0 -> 3594 bytes web/assets/images/logo.de0bea12.png | Bin 0 -> 13318 bytes web/assets/main.1fe516e942e8297eae97.css | 169 ++++++++++++++ web/assets/manifest.json | 6 + web/assets/raffler.7844e51a893abf22f9fc.js | 244 +++++++++++++++++++++ webpack.config.js | 26 +++ 29 files changed, 779 insertions(+), 126 deletions(-) create mode 100644 Makefile create mode 100644 assets/css/app.css create mode 100644 assets/js/app.js create mode 100644 config/packages/assets.yaml create mode 100644 config/packages/prod/webpack_encore.yaml create mode 100644 config/packages/webpack_encore.yaml delete mode 100644 gulpfile.js delete mode 100644 post-install.sh create mode 100644 web/assets/entrypoints.json create mode 100644 web/assets/images/avatar.3d50e83f.png create mode 100644 web/assets/images/logo.de0bea12.png create mode 100644 web/assets/main.1fe516e942e8297eae97.css create mode 100644 web/assets/manifest.json create mode 100644 web/assets/raffler.7844e51a893abf22f9fc.js create mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore index fa28c8a..ea712b5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,10 @@ web/js/* /.phpunit.result.cache /var/ !/var/.gitkeep + +###> symfony/webpack-encore-bundle ### +/node_modules/ +/web/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2351259 --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +ENV?=dev + +help: ## Show help + @echo + @echo "Usage: make [target]" + @echo + @printf "\033[1;93mAvailable targets:\033[0m\n" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-30s\033[0m %s\n", $$1, $$2}' + @echo + +install: vendor node_modules build-assets ## Install all project dependencies + +build-assets: ## Build JS, CSS and images + node_modules/.bin/encore $(ENV) + +vendor: composer.json composer.lock + composer install + +node_modules: package.json + npm install + +.PHONY: build-assets diff --git a/README.md b/README.md index 33d571b..be0c54e 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ This application enables us to raffle off stuff to our meetup attendees. It uses Ensure that [VirtualBox](https://www.virtualbox.org), [Vagrant](http://www.vagrantup.com), and [Ansible](http://www.ansible.com) are installed. 1. `git clone git@github.com:AmsterdamPHP/meetup-raffle-machine.git --recursive` -2. run `vagrant up` -3. create `config/parameters.yml` (get your API key from [meetup.com](https://secure.meetup.com/meetup_api/key/)) +1. run `vagrant up` +1. create `config/parameters.yml` (get your API key from [meetup.com](https://secure.meetup.com/meetup_api/key/)) ``` parameters: @@ -19,34 +19,26 @@ Ensure that [VirtualBox](https://www.virtualbox.org), [Vagrant](http://www.vagra secret: SomeRandomSecretToSeedSymfony redis_dsn: redis://locahost ``` -4. Add the following to your hosts file: `10.10.10.10 raffler.local` +1. Add the following to your hosts file: `10.10.10.10 raffler.local` All done! Now you can access the application at [http://raffler.local/](http://raffler.local/). ### Install directly onto your host machine. 1. Get code -2. Give permissions +1. Give permissions ``` sudo chmod -Rf +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" cache logs sudo chmod -Rf +a " allow delete,write,append,file_inherit,directory_inherit" cache logs ``` -3. Install Dependencies +1. Install Dependencies ``` - composer install - npm install + make install ``` - -4. Compile assets - - ``` - ./node_modules/.bin/gulp - ``` - -5. Create config/parameters.yml +1. Create config/parameters.yml ``` parameters: @@ -59,7 +51,7 @@ All done! Now you can access the application at [http://raffler.local/](http://r ## How to use it 1. Open the app index page to be presented with a list of meetups. -2. Click on a meetup. -3. Press [space] or [page down] to start raffles. +1. Click on a meetup. +1. Press [space] or [page down] to start raffles. The page down key allows us to use most presentation remotes as well. diff --git a/Vagrantfile b/Vagrantfile index 40fb428..a06da45 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -57,6 +57,6 @@ Vagrant.configure("2") do |config| end config.vm.provision "shell" do |s| - s.inline = "sh /vagrant/post-install.sh" + s.inline = "cd /vagrant; make install" end end diff --git a/assets/css/app.css b/assets/css/app.css new file mode 100644 index 0000000..cb33b13 --- /dev/null +++ b/assets/css/app.css @@ -0,0 +1,3 @@ +body { + background-color: lightgray; +} diff --git a/assets/js/app.js b/assets/js/app.js new file mode 100644 index 0000000..0648e87 --- /dev/null +++ b/assets/js/app.js @@ -0,0 +1,14 @@ +/* + * Welcome to your app's main JavaScript file! + * + * We recommend including the built version of this JavaScript file + * (and its CSS file) in your base layout (base.html.twig). + */ + +// any CSS you require will output into a single css file (app.css in this case) +require('../css/app.css'); + +// Need jQuery? Install it with "yarn add jquery", then uncomment to require it. +// const $ = require('jquery'); + +console.log('Hello Webpack Encore! Edit me in assets/js/app.js'); diff --git a/circle.yml b/circle.yml index ccbcefe..24b1557 100644 --- a/circle.yml +++ b/circle.yml @@ -6,7 +6,7 @@ dependencies: override: - composer install --dev --no-progress --no-interaction --prefer-dist - npm install - - ./node_modules/.bin/gulp + - node_modules/.bin/encore prod post: - mkdir -p $CIRCLE_TEST_REPORTS/phpunit diff --git a/composer.json b/composer.json index 812a602..bbfc776 100644 --- a/composer.json +++ b/composer.json @@ -18,6 +18,7 @@ "symfony/framework-bundle": "4.3.*", "symfony/monolog-bundle": "^3.4", "symfony/twig-bundle": "4.3.*", + "symfony/webpack-encore-bundle": "^1.6", "symfony/yaml": "4.3.*" }, "config": { diff --git a/composer.lock b/composer.lock index a3aaacd..ac6a18a 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e049e53cdcc175adfd7eb007d3c30922", + "content-hash": "989c7826bf6cb5bfb4ab06b38205c60b", "packages": [ { "name": "dms/meetup-api-client", @@ -1222,6 +1222,62 @@ ], "time": "2019-02-20T07:03:43+00:00" }, + { + "name": "symfony/asset", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "eecf6d6c952c2c80c9b4fa3ec089d222420f1569" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/eecf6d6c952c2c80c9b4fa3ec089d222420f1569", + "reference": "eecf6d6c952c2c80c9b4fa3ec089d222420f1569", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "symfony/http-foundation": "~3.4|~4.0", + "symfony/http-kernel": "~3.4|~4.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Asset Component", + "homepage": "https://symfony.com", + "time": "2019-05-30T16:10:05+00:00" + }, { "name": "symfony/cache", "version": "v4.3.1", @@ -1497,6 +1553,77 @@ "homepage": "https://symfony.com", "time": "2019-06-05T13:25:51+00:00" }, + { + "name": "symfony/contracts", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "d3636025e8253c6144358ec0a62773cae588395b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", + "reference": "d3636025e8253c6144358ec0a62773cae588395b", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-04-27T14:29:50+00:00" + }, { "name": "symfony/debug", "version": "v4.3.1", @@ -3334,6 +3461,62 @@ "homepage": "https://symfony.com", "time": "2019-05-30T16:10:05+00:00" }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "f1ec2fea7fb6a7c7a444ac17e711fab3bbf5e015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/f1ec2fea7fb6a7c7a444ac17e711fab3bbf5e015", + "reference": "f1ec2fea7fb6a7c7a444ac17e711fab3bbf5e015", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/asset": "^3.4 || ^4.0", + "symfony/config": "^3.4 || ^4.0", + "symfony/contracts": "^1.0", + "symfony/dependency-injection": "^3.4 || ^4.0", + "symfony/http-kernel": "^3.4 || ^4.0" + }, + "require-dev": { + "fig/link-util": "^1.0", + "friendsofphp/php-cs-fixer": "^2.14", + "symfony/framework-bundle": "^3.4 || ^4.0", + "symfony/phpunit-bridge": "^3.4 || ^4.1", + "symfony/twig-bundle": "^3.4 || ^4.0", + "symfony/web-link": "^3.4 || ^4.0", + "twig/twig": "^1.35 || ^2.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/webpack-encore", + "url": "https://github.com/symfony/webpack-encore" + } + }, + "autoload": { + "psr-4": { + "Symfony\\WebpackEncoreBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration with your Symfony app & Webpack Encore!", + "time": "2019-05-26T18:09:46+00:00" + }, { "name": "symfony/yaml", "version": "v4.3.1", diff --git a/config/bundles.php b/config/bundles.php index bf9a543..4dcca2f 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -8,4 +8,5 @@ Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], ]; diff --git a/config/packages/assets.yaml b/config/packages/assets.yaml new file mode 100644 index 0000000..79f3e38 --- /dev/null +++ b/config/packages/assets.yaml @@ -0,0 +1,3 @@ +framework: + assets: + json_manifest_path: '%kernel.project_dir%/web/assets/manifest.json' diff --git a/config/packages/prod/webpack_encore.yaml b/config/packages/prod/webpack_encore.yaml new file mode 100644 index 0000000..d0b3ba8 --- /dev/null +++ b/config/packages/prod/webpack_encore.yaml @@ -0,0 +1,4 @@ +#webpack_encore: + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) + # Available in version 1.2 + #cache: true diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml new file mode 100644 index 0000000..1ad206b --- /dev/null +++ b/config/packages/webpack_encore.yaml @@ -0,0 +1,14 @@ +webpack_encore: + # The path where Encore is building the assets. + # This should match Encore.setOutputPath() in webpack.config.js. + output_path: '%kernel.project_dir%/public/build' + # If multiple builds are defined (as shown below), you can disable the default build: + # output_path: false + + # if using Encore.enableIntegrityHashes() specify the crossorigin attribute value (default: false, or use 'anonymous' or 'use-credentials') + # crossorigin: 'anonymous' + + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes). + # To enable caching for the production environment, creating a webpack_encore.yaml in the config/packages/prod directory with this value set to true + # Available in version 1.2 + #cache: 'false' diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 9257423..0000000 --- a/gulpfile.js +++ /dev/null @@ -1,55 +0,0 @@ -var gulp = require('gulp'), - plumber = require('gulp-plumber'), - rename = require('gulp-rename'); -var autoprefixer = require('gulp-autoprefixer'); -var concat = require('gulp-concat'); -var uglify = require('gulp-uglify'); -var imagemin = require('gulp-imagemin'), - cache = require('gulp-cache'); -var minifycss = require('gulp-minify-css'); -var sass = require('gulp-sass'); -var sassIncl = require('sass-include-paths'); - -gulp.task('images', function(){ - gulp.src('source/images/**/*') - .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))) - .pipe(gulp.dest('web/img/')); -}); - -gulp.task('styles', function(){ - gulp.src(['source/scss/**/*.scss']) - .pipe(plumber({ - errorHandler: function (error) { - console.log(error.message); - this.emit('end'); - }})) - .pipe(sass({ - includePaths: sassIncl.nodeModulesSync() - })) - .pipe(autoprefixer('last 2 versions')) - .pipe(gulp.dest('web/css/')) - .pipe(rename({suffix: '.min'})) - .pipe(minifycss()) - .pipe(gulp.dest('web/css/')) -}); - -gulp.task('scripts', function(){ - return gulp.src('source/js/**/*.js') - .pipe(plumber({ - errorHandler: function (error) { - console.log(error.message); - this.emit('end'); - }})) - .pipe(concat('main.js')) - .pipe(gulp.dest('web/js/')) - .pipe(rename({suffix: '.min'})) - .pipe(uglify()) - .pipe(gulp.dest('web/js/')) -}); - -gulp.task('default', ['images', 'styles', 'scripts']); - -gulp.task('watch', function(){ - gulp.watch("source/scss/**/*.scss", ['styles']); - gulp.watch("source/js/**/*.js", ['scripts']); -}); diff --git a/package.json b/package.json index 52cfa9d..e888c2d 100644 --- a/package.json +++ b/package.json @@ -2,27 +2,13 @@ "name": "AmsterdamPHP-Raffler", "version": "1.0.0", "description": "Raffle system for meetup groups", - "main": "gulpfile.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, "author": "AmsterdamPHP", "license": "MIT", "devDependencies": { + "@symfony/webpack-encore": "^0.27.0", + "compass": "^0.1.1", "compass-mixins": "^0.12.10", - "gulp": "^3.9", - "gulp-autoprefixer": "^2.1.0", - "gulp-cache": "^0.2.8", - "gulp-concat": "^2.5.2", - "gulp-imagemin": "^2.2.1", - "gulp-minify-css": "^1.0.0", - "gulp-plumber": "^1.0.0", - "gulp-rename": "^1.2.2", - "gulp-sass": "^2.1", - "gulp-uglify": "^1.5", - "jquery-color-animation": "^1.5.1", - "sass-include-paths": "^4.5.0", - "sass-loader": "^3.2.0", - "susy": "^2.2.12" + "node-sass": "^4.12.0", + "sass-loader": "^7.1.0" } } diff --git a/post-install.sh b/post-install.sh deleted file mode 100644 index 48e3671..0000000 --- a/post-install.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -# Install dependencies and build assets -su vagrant -c 'cd /vagrant && npm install && composer install --prefer-dist && node_modules/.bin/gulp' diff --git a/source/js/raffler.js b/source/js/raffler.js index 50bdd6f..322739d 100644 --- a/source/js/raffler.js +++ b/source/js/raffler.js @@ -13,7 +13,7 @@ var Raffler = { currentCycle: 0, /** - * Array of truely random numbers from random.org. This is populated + * Array of truely random numbers. This is populated * on page load. We select the winners from this array. */ winners: [], @@ -26,7 +26,8 @@ var Raffler = { /** * Initialize */ - init: function() { + init: function(winners) { + Raffler.winners = winners; $(document).on('keydown', Raffler.onKeyDown); }, @@ -146,3 +147,8 @@ var Raffler = { return($('.checkin').eq(random)); } }; + +let $checkins = $('.checkins[data-winners]'); +if ($checkins.length > 0) { + Raffler.init($checkins.data('winners').split(',')); +} diff --git a/source/scss/main.scss b/source/scss/main.scss index 47d8379..ff8634d 100644 --- a/source/scss/main.scss +++ b/source/scss/main.scss @@ -4,11 +4,8 @@ $gutter-width: 1em; $grid-padding: $gutter-width; /* compass */ -@import "compass/reset"; -@import "compass/css3"; - -/* other plugins */ -@import "susy"; +@import "~compass-mixins/lib/compass/reset"; +@import "~compass-mixins/lib/compass/css3"; body { color: #ffffff; @@ -18,8 +15,16 @@ body { font-weight: 300; } -.container { - @include container; +.container{ + max-width: 100%; + margin-left: auto; + margin-right: auto; + + &:after{ + content: " "; + display: block; + clear: both; + } } .logo { @@ -37,7 +42,7 @@ body { width: 444px; height: 80px; text-indent: -9999px; - background-image: url("/img/logo.png"); + background-image: url("../images/logo.png"); } .secondary { display: inline-block; @@ -46,7 +51,7 @@ body { } } -@include susy-breakpoint(0em 40em) { +@media (max-width:40em) { .logo { line-height: 60px; diff --git a/symfony.lock b/symfony.lock index cb0ca7d..45d6fe0 100644 --- a/symfony.lock +++ b/symfony.lock @@ -182,6 +182,9 @@ "config/packages/snc_redis.yaml" ] }, + "symfony/asset": { + "version": "v4.3.1" + }, "symfony/cache": { "version": "v4.3.1" }, @@ -204,6 +207,9 @@ "config/bootstrap.php" ] }, + "symfony/contracts": { + "version": "v1.1.0" + }, "symfony/debug": { "version": "v4.3.1" }, @@ -370,6 +376,24 @@ "config/routes/dev/web_profiler.yaml" ] }, + "symfony/webpack-encore-bundle": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "e33393e32759195f8e10c9d4faceb0d232a7e1de" + }, + "files": [ + "assets/css/app.css", + "assets/js/app.js", + "config/packages/assets.yaml", + "config/packages/prod/webpack_encore.yaml", + "config/packages/webpack_encore.yaml", + "package.json", + "webpack.config.js" + ] + }, "symfony/yaml": { "version": "v4.3.1" }, diff --git a/templates/event.html.twig b/templates/event.html.twig index 569e2b3..abaa8c9 100644 --- a/templates/event.html.twig +++ b/templates/event.html.twig @@ -3,14 +3,13 @@ {% block title event.name %} {% block content %} -

{{ event.name }}

-
+
{% for checkin in event.rsvps if checkin.id in checkins %} -
+
{{ checkin.name|default('Y U NO HAVE NAME?') }}
{% endfor %} @@ -23,11 +22,5 @@ {% block javascripts %} - - + {% endblock %} diff --git a/templates/event_checkin.html.twig b/templates/event_checkin.html.twig index 3a3920e..731d4f2 100644 --- a/templates/event_checkin.html.twig +++ b/templates/event_checkin.html.twig @@ -13,7 +13,7 @@
{{ rsvp.name }} diff --git a/templates/layout.html.twig b/templates/layout.html.twig index ca09124..0e47de0 100644 --- a/templates/layout.html.twig +++ b/templates/layout.html.twig @@ -5,12 +5,7 @@ - - - - +
diff --git a/web/assets/entrypoints.json b/web/assets/entrypoints.json new file mode 100644 index 0000000..04fa1ee --- /dev/null +++ b/web/assets/entrypoints.json @@ -0,0 +1,14 @@ +{ + "entrypoints": { + "raffler": { + "js": [ + "/assets/raffler.7844e51a893abf22f9fc.js" + ] + }, + "main": { + "css": [ + "/assets/main.1fe516e942e8297eae97.css" + ] + } + } +} \ No newline at end of file diff --git a/web/assets/images/avatar.3d50e83f.png b/web/assets/images/avatar.3d50e83f.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf9f34d2f217ddd1c858ca74d1e63a064b482fa GIT binary patch literal 3594 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 N=49`JD!27b{5L%o+mZkP literal 0 HcmV?d00001 diff --git a/web/assets/images/logo.de0bea12.png b/web/assets/images/logo.de0bea12.png new file mode 100644 index 0000000000000000000000000000000000000000..be265592cd037f5d50f1e54b53d7a261b4a690da GIT binary patch literal 13318 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 literal 0 HcmV?d00001 diff --git a/web/assets/main.1fe516e942e8297eae97.css b/web/assets/main.1fe516e942e8297eae97.css new file mode 100644 index 0000000..61297f1 --- /dev/null +++ b/web/assets/main.1fe516e942e8297eae97.css @@ -0,0 +1,169 @@ +/* compass */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; } + +html { + line-height: 1; } + +ol, ul { + list-style: none; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; } + +q, blockquote { + quotes: none; } + q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; } + +a img { + border: none; } + +elements-of-type(html5-block) { + display: block; } + +body { + color: #ffffff; + background: #000000; + font-family: 'Open Sans', Arial, Helvetica, sans-serif; + font-size: 20px; + font-weight: 300; } + +.container { + max-width: 100%; + margin-left: auto; + margin-right: auto; } + .container:after { + content: " "; + display: block; + clear: both; } + +.logo { + margin: 1em 0 0 0; + text-align: center; + line-height: 120px; } + .logo a { + color: #ffffff; + text-decoration: none; } + .logo .primary { + display: inline-block; + width: 444px; + height: 80px; + text-indent: -9999px; + background-image: url(/assets/images/logo.de0bea12.png); } + .logo .secondary { + display: inline-block; + font-size: 65px; + font-style: italic; } + +@media (max-width: 40em) { + .logo { + line-height: 60px; } + .logo .primary { + width: 222px; + height: 40px; + background-size: 222px; } + .logo .secondary { + display: block; + font-size: 45px; + font-style: italic; + margin-bottom: 1em; } } + +.title { + margin: 0 0 1.5em 0; + font-size: 40px; + text-align: center; } + +.meetups li { + font-size: 20px; } + +.meetups a { + background: #1a1a1a; + display: block; + color: #fff; + text-decoration: none; + padding: 0.5em; + margin-bottom: 1px; } + .meetups a:hover { + background: #212121; } + +.meetups .first a { + color: #b3ff97; + text-shadow: 0 -1px 0 #000, 0px 0 5px rgba(179, 255, 151, 0.8); + font-size: 1.2em; } + +.checkins, .rsvps { + text-align: center; } + .checkins .checkin, .rsvps .checkin, .rsvps .rsvp { + -webkit-border-radius: 16px 16px; + -moz-border-radius: 16px / 16px; + border-radius: 16px / 16px; + border: 8px solid #000; + display: inline-block; + width: 100px; + height: 100px; + margin: 0 1em 1em 0; + background-position: center; + background-size: cover; + text-align: center; + background-color: #cccccc; } + .checkins .checkin .name, .rsvps .checkin .name, .rsvps .rsvp .name { + display: none; } + .checkins .checkin.selected, .rsvps .checkin.selected, .rsvps .selected.rsvp { + border-color: #f00; } + .checkins .checkin.loser, .rsvps .checkin.loser, .rsvps .loser.rsvp { + display: none; + opacity: 0; } + .checkins .checkin.winner, .rsvps .checkin.winner, .rsvps .winner.rsvp { + position: relative; + border: 0; + width: 300px; + height: 400px; } + .checkins .checkin.winner .name, .rsvps .checkin.winner .name, .rsvps .winner.rsvp .name { + position: absolute; + top: 300px; + width: 100%; + display: block; + font-size: 2em; + background-color: rgba(0, 0, 0, 0.6); + padding: 3px; } + .checkins .checkin-link, .rsvps .checkin-link { + margin-bottom: 1em; } + .checkins .checkin-link a:link, .rsvps .checkin-link a:link, .checkins .checkin-link a:visited, .rsvps .checkin-link a:visited { + color: white; } + +.rsvps .rsvp:hover { + cursor: pointer; } + +.rsvps .rsvp.checked_in { + border: 8px solid #A1C99D; } + +.rsvps .tap-to-checkin { + margin-bottom: 1em; } + + +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vbWFpbi5zY3NzIiwid2VicGFjazovLy8uLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzIiwid2VicGFjazovLy8uLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fc2hhcmVkLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7QUNERTs7Ozs7Ozs7Ozs7OztFQTZEQSxTQUFTO0VBQ1QsVUFBVTtFQUNWLFNBQVM7RUFJVCxhQUFhO0VBQ2IsZUFBZTtFQUNmLHdCQUF3Qjs7QUFwRHhCO0VBNkRBLGNBQWM7O0FBM0RkO0VBK0RBLGdCQUFnQjs7QUE3RGhCO0VBaUVBLHlCQUF5QjtFQUN6QixpQkFBaUI7O0FBaEVqQjtFQW9FQSxnQkFBZ0I7RUFDaEIsbUJBQW1CO0VBQ25CLHNCQUFzQjs7QUFwRXRCO0VBd0VBLFlBQVk7RUF4RVo7SUEwRUUsV0FBVztJQUNYLGFBQWE7O0FBekVmO0VBNkVBLFlBQVk7O0FBT1o7RUFDRSxjQUFjOztBRDNHbEI7RUFDSSxjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLHNEQUFzRDtFQUN0RCxlQUFlO0VBQ2YsZ0JBQWdCOztBQUdwQjtFQUNJLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsa0JBQWtCO0VBSHRCO0lBTVEsWUFBWTtJQUNaLGNBQWM7SUFDZCxXQUFXOztBQUluQjtFQUNJLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsa0JBQWtCO0VBSHRCO0lBTVEsY0FBYztJQUNkLHFCQUFxQjtFQVA3QjtJQVdRLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osWUFBWTtJQUNaLG9CQUFvQjtJQUNwQiwrQ0FBMkM7RUFmbkQ7SUFrQlEscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixrQkFBa0I7O0FBSTFCO0VBeEJBO0lBMEJRLGlCQUFpQjtJQTFCekI7TUE2QlksWUFBWTtNQUNaLFlBQVk7TUFDWixzQkFBc0I7SUEvQmxDO01Ba0NZLGNBQWM7TUFDZCxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGtCQUFrQixJQUNyQjs7QUFJVDtFQUNJLG1CQUFtQjtFQUNuQixlQUFlO0VBQ2Ysa0JBQWtCOztBQUd0QjtFQUVRLGVBQWU7O0FBRnZCO0VBTVEsbUJBQW1CO0VBQ25CLGNBQWM7RUFDZCxXQUFXO0VBQ1gscUJBQXFCO0VBQ3JCLGNBQWM7RUFDZCxrQkFBa0I7RUFYMUI7SUFjWSxtQkFBbUI7O0FBZC9CO0VBbUJRLGNBQStCO0VBQy9CLDhEQUF5RDtFQUN6RCxnQkFBZ0I7O0FBSXhCO0VBQ0ksa0JBQWtCO0VBRHRCO0lFeEZ5RCxnQ0Y0RmhCO0lFMUZtQiwrQkYwRm5CO0lFdkZ3QiwwQkZ1RnhCO0lBQ2pDLHNCQUFzQjtJQUN0QixxQkFBcUI7SUFDckIsWUFBWTtJQUNaLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsMkJBQTJCO0lBQzNCLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIseUJBQXlCO0lBYmpDO01BZ0JZLGFBQWE7SUFoQnpCO01Bb0JZLGtCQUFrQjtJQXBCOUI7TUF3QlksYUFBYTtNQUNiLFVBQVU7SUF6QnRCO01BNkJZLGtCQUFrQjtNQUNsQixTQUFTO01BQ1QsWUFBWTtNQUNaLGFBQWE7TUFoQ3pCO1FBbUNnQixrQkFBa0I7UUFDbEIsVUFBVTtRQUNWLFdBQVc7UUFDWCxjQUFjO1FBQ2QsY0FBYztRQUNkLG9DQUFrQztRQUNsQyxZQUFZO0VBekM1QjtJQStDUSxrQkFBa0I7SUEvQzFCO01BaURZLFlBQVk7O0FBS3hCO0VBT1ksZUFBZTs7QUFQM0I7RUFXWSx5QkFBeUI7O0FBWHJDO0VBZ0JRLGtCQUFrQiIsImZpbGUiOiJtYWluLjFmZTUxNmU5NDJlODI5N2VhZTk3LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiR0b3RhbC1jb2x1bW5zOiAxMjtcbiRjb2x1bW4td2lkdGg6ICA0ZW07XG4kZ3V0dGVyLXdpZHRoOiAgMWVtO1xuJGdyaWQtcGFkZGluZzogICRndXR0ZXItd2lkdGg7XG5cbi8qIGNvbXBhc3MgKi9cbkBpbXBvcnQgXCJ+Y29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvcmVzZXRcIjtcbkBpbXBvcnQgXCJ+Y29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzM1wiO1xuXG5ib2R5IHtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwO1xuICAgIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuLmNvbnRhaW5lcntcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuXG4gICAgJjphZnRlcntcbiAgICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICB9XG59XG5cbi5sb2dvIHtcbiAgICBtYXJnaW46IDFlbSAwIDAgMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGluZS1oZWlnaHQ6IDEyMHB4O1xuXG4gICAgYSB7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuXG4gICAgLnByaW1hcnkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiA0NDRweDtcbiAgICAgICAgaGVpZ2h0OiA4MHB4O1xuICAgICAgICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1hZ2VzL2xvZ28ucG5nXCIpO1xuICAgIH1cbiAgICAuc2Vjb25kYXJ5IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDY1cHg7XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOjQwZW0pIHtcbiAgICAubG9nbyB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xuXG4gICAgICAgIC5wcmltYXJ5IHtcbiAgICAgICAgICAgIHdpZHRoOiAyMjJweDtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjIycHg7XG4gICAgICAgIH1cbiAgICAgICAgLnNlY29uZGFyeSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogNDVweDtcbiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnRpdGxlIHtcbiAgICBtYXJnaW46IDAgMCAxLjVlbSAwO1xuICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5tZWV0dXBzIHtcbiAgICBsaSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDAuNWVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxcHg7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjEyMTIxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZpcnN0IGEge1xuICAgICAgICBjb2xvcjogcmdiYSgxNzksIDI1NSwgMTUxLCAxLjApO1xuICAgICAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgIzAwMCwwcHggMCA1cHggcmdiYSgxNzksMjU1LDE1MSwuOCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxufVxuXG4uY2hlY2tpbnMge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgIC5jaGVja2luIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygxNnB4LCAxNnB4KTtcbiAgICAgICAgYm9yZGVyOiA4cHggc29saWQgIzAwMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAgIGhlaWdodDogMTAwcHg7XG4gICAgICAgIG1hcmdpbjogMCAxZW0gMWVtIDA7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjO1xuXG4gICAgICAgIC5uYW1lIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAmLnNlbGVjdGVkIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2YwMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubG9zZXIge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLndpbm5lciB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICB3aWR0aDogMzAwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwMHB4O1xuXG4gICAgICAgICAgICAubmFtZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogMzAwcHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyZW07XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwgMC42KTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY2hlY2tpbi1saW5rIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgICAgICBhOmxpbmssIGE6dmlzaXRlZCB7XG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5yc3ZwcyB7XG4gICAgQGV4dGVuZCAuY2hlY2tpbnM7XG5cbiAgICAucnN2cCB7XG4gICAgICAgIEBleHRlbmQgLmNoZWNraW47XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAmLmNoZWNrZWRfaW4ge1xuICAgICAgICAgICAgYm9yZGVyOiA4cHggc29saWQgI0ExQzk5RDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC50YXAtdG8tY2hlY2tpbiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICB9XG59XG4iLCIvLyBCYXNlZCBvbiBbRXJpYyBNZXllcidzIHJlc2V0IDIuMF0oaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC9pbmRleC5odG1sKVxuLy8gR2xvYmFsIHJlc2V0IHJ1bGVzLlxuLy8gRm9yIG1vcmUgc3BlY2lmaWMgcmVzZXRzLCB1c2UgdGhlIHJlc2V0IG1peGlucyBwcm92aWRlZCBiZWxvd1xuQG1peGluIGdsb2JhbC1yZXNldCB7XG4gIGh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSxcbiAgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuICBhLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXG4gIGRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCxcbiAgc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcbiAgYiwgdSwgaSwgY2VudGVyLFxuICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxuICBmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbiAgdGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXG4gIGFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLCBcbiAgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBcbiAgbWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXG4gIHRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XG4gICAgQGluY2x1ZGUgcmVzZXQtYm94LW1vZGVsO1xuICAgIEBpbmNsdWRlIHJlc2V0LWZvbnQ7IH1cbiAgLy8gVW5saWtlIEVyaWMncyBvcmlnaW5hbCByZXNldCwgd2UgcmVzZXQgdGhlIGh0bWwgZWxlbWVudCB0byBiZSBjb21wYXRpYmxlXG4gIC8vIHdpdGggdGhlIHZlcnRpY2FsIHJoeXRobSBtaXhpbnMuXG4gIGh0bWwge1xuICAgIEBpbmNsdWRlIHJlc2V0LWJvZHk7IH1cbiAgb2wsIHVsIHtcbiAgICBAaW5jbHVkZSByZXNldC1saXN0LXN0eWxlOyB9XG4gIHRhYmxlIHtcbiAgICBAaW5jbHVkZSByZXNldC10YWJsZTsgfVxuICBjYXB0aW9uLCB0aCwgdGQge1xuICAgIEBpbmNsdWRlIHJlc2V0LXRhYmxlLWNlbGw7IH1cbiAgcSwgYmxvY2txdW90ZSB7XG4gICAgQGluY2x1ZGUgcmVzZXQtcXVvdGF0aW9uOyB9XG4gIGEgaW1nIHtcbiAgICBAaW5jbHVkZSByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyOyB9XG4gIEBpbmNsdWRlIHJlc2V0LWh0bWw1OyB9XG5cbi8vIFJlc2V0IGFsbCBlbGVtZW50cyB3aXRoaW4gc29tZSBzZWxlY3RvciBzY29wZS4gVG8gcmVzZXQgdGhlIHNlbGVjdG9yIGl0c2VsZixcbi8vIG1peGluIHRoZSBhcHByb3ByaWF0ZSByZXNldCBtaXhpbiBmb3IgdGhhdCBlbGVtZW50IHR5cGUgYXMgd2VsbC4gVGhpcyBjb3VsZCBiZVxuLy8gdXNlZnVsIGlmIHlvdSB3YW50IHRvIHN0eWxlIGEgcGFydCBvZiB5b3VyIHBhZ2UgaW4gYSBkcmFtYXRpY2FsbHkgZGlmZmVyZW50IHdheS5cbkBtaXhpbiBuZXN0ZWQtcmVzZXQge1xuICBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXG4gIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcbiAgYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuICBkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXG4gIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXG4gIGIsIHUsIGksIGNlbnRlcixcbiAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcbiAgZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXG4gIHRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuICBhcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCwgXG4gIGZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgXG4gIG1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxuICB0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xuICAgIEBpbmNsdWRlIHJlc2V0LWJveC1tb2RlbDtcbiAgICBAaW5jbHVkZSByZXNldC1mb250OyB9XG4gIHRhYmxlIHtcbiAgICBAaW5jbHVkZSByZXNldC10YWJsZTsgfVxuICBjYXB0aW9uLCB0aCwgdGQge1xuICAgIEBpbmNsdWRlIHJlc2V0LXRhYmxlLWNlbGw7IH1cbiAgcSwgYmxvY2txdW90ZSB7XG4gICAgQGluY2x1ZGUgcmVzZXQtcXVvdGF0aW9uOyB9XG4gIGEgaW1nIHtcbiAgICBAaW5jbHVkZSByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyOyB9IH1cblxuLy8gUmVzZXQgdGhlIGJveCBtb2RlbCBtZWFzdXJlbWVudHMuXG5AbWl4aW4gcmVzZXQtYm94LW1vZGVsIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7IH1cblxuLy8gUmVzZXQgdGhlIGZvbnQgYW5kIHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiByZXNldC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH1cblxuLy8gUmVzZXRzIHRoZSBvdXRsaW5lIHdoZW4gZm9jdXMuXG4vLyBGb3IgYWNjZXNzaWJpbGl0eSB5b3UgbmVlZCB0byBhcHBseSBzb21lIHN0eWxpbmcgaW4gaXRzIHBsYWNlLlxuQG1peGluIHJlc2V0LWZvY3VzIHtcbiAgb3V0bGluZTogMDsgfVxuXG4vLyBSZXNldCBhIGJvZHkgZWxlbWVudC5cbkBtaXhpbiByZXNldC1ib2R5IHtcbiAgbGluZS1oZWlnaHQ6IDE7IH1cblxuLy8gUmVzZXQgdGhlIGxpc3Qgc3R5bGUgb2YgYW4gZWxlbWVudC5cbkBtaXhpbiByZXNldC1saXN0LXN0eWxlIHtcbiAgbGlzdC1zdHlsZTogbm9uZTsgfVxuXG4vLyBSZXNldCBhIHRhYmxlXG5AbWl4aW4gcmVzZXQtdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDsgfVxuXG4vLyBSZXNldCBhIHRhYmxlIGNlbGwgKGB0aGAsIGB0ZGApXG5AbWl4aW4gcmVzZXQtdGFibGUtY2VsbCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuLy8gUmVzZXQgYSBxdW90YXRpb24gKGBxYCwgYGJsb2NrcXVvdGVgKVxuQG1peGluIHJlc2V0LXF1b3RhdGlvbiB7XG4gIHF1b3Rlczogbm9uZTtcbiAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7IFxuICAgIGNvbnRlbnQ6IG5vbmU7IH0gfVxuXG4vLyBSZXNldHMgdGhlIGJvcmRlci5cbkBtaXhpbiByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyIHtcbiAgYm9yZGVyOiBub25lOyB9XG5cbi8vIFVucmVjb2duaXplZCBlbGVtZW50cyBhcmUgZGlzcGxheWVkIGlubGluZS5cbi8vIFRoaXMgcmVzZXQgcHJvdmlkZXMgYSBiYXNpYyByZXNldCBmb3IgYmxvY2sgaHRtbDUgZWxlbWVudHNcbi8vIHNvIHRoZXkgYXJlIHJlbmRlcmVkIGNvcnJlY3RseSBpbiBicm93c2VycyB0aGF0IGRvbid0IHJlY29nbml6ZSB0aGVtXG4vLyBhbmQgcmVzZXQgaW4gYnJvd3NlcnMgdGhhdCBoYXZlIGRlZmF1bHQgc3R5bGVzIGZvciB0aGVtLlxuQG1peGluIHJlc2V0LWh0bWw1IHtcbiAgI3tlbGVtZW50cy1vZi10eXBlKGh0bWw1LWJsb2NrKX0ge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cblxuLy8gUmVzZXRzIHRoZSBkaXNwbGF5IG9mIGlubGluZSBhbmQgYmxvY2sgZWxlbWVudHMgdG8gdGhlaXIgZGVmYXVsdCBkaXNwbGF5XG4vLyBhY2NvcmRpbmcgdG8gdGhlaXIgdGFnIHR5cGUuIEVsZW1lbnRzIHRoYXQgaGF2ZSBhIGRlZmF1bHQgZGlzcGxheSB0aGF0IHZhcmllcyBhY3Jvc3Ncbi8vIHZlcnNpb25zIG9mIGh0bWwgb3IgYnJvd3NlciBhcmUgbm90IGhhbmRsZWQgaGVyZSwgYnV0IHRoaXMgY292ZXJzIHRoZSA5MCUgdXNlIGNhc2UuXG4vLyBVc2FnZSBFeGFtcGxlOlxuLy9cbi8vICAgICAvLyBUdXJuIG9mZiB0aGUgZGlzcGxheSBmb3IgYm90aCBvZiB0aGVzZSBjbGFzc2VzXG4vLyAgICAgLnVucmVnaXN0ZXJlZC1vbmx5LCAucmVnaXN0ZXJlZC1vbmx5XG4vLyAgICAgICBkaXNwbGF5OiBub25lXG4vLyAgICAgLy8gTm93IHR1cm4gb25seSBvbmUgb2YgdGhlbSBiYWNrIG9uIGRlcGVuZGluZyBvbiBzb21lIG90aGVyIGNvbnRleHQuXG4vLyAgICAgYm9keS5yZWdpc3RlcmVkXG4vLyAgICAgICArcmVzZXQtZGlzcGxheShcIi5yZWdpc3RlcmVkLW9ubHlcIilcbi8vICAgICBib2R5LnVucmVnaXN0ZXJlZFxuLy8gICAgICAgK3Jlc2V0LWRpc3BsYXkoXCIudW5yZWdpc3RlcmVkLW9ubHlcIilcbkBtaXhpbiByZXNldC1kaXNwbGF5KCRzZWxlY3RvcjogXCJcIiwgJGltcG9ydGFudDogZmFsc2UpIHtcbiAgI3thcHBlbmQtc2VsZWN0b3IoZWxlbWVudHMtb2YtdHlwZShcImlubGluZVwiKSwgJHNlbGVjdG9yKX0ge1xuICAgIEBpZiAkaW1wb3J0YW50IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogaW5saW5lOyB9IH1cbiAgI3thcHBlbmQtc2VsZWN0b3IoZWxlbWVudHMtb2YtdHlwZShcImJsb2NrXCIpLCAkc2VsZWN0b3IpfSB7XG4gICAgQGlmICRpbXBvcnRhbnQge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxuICAgIEBlbHNlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH0gfVxuIiwiQGltcG9ydCBcIi4uL3N1cHBvcnRcIjtcblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciBDU1MzIHByb3BlcnRpZXMgYW5kXG4vLyB0aGVpciBjb3JyZXNwb25kaW5nIGV4cGVyaW1lbnRhbCBDU1MyIHByb3BlcnRpZXMgd2hlblxuLy8gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlIHByb3BlcnR5XG4vLyBwcmVmaXguXG5AbWl4aW4gZXhwZXJpbWVudGFsKCRwcm9wZXJ0eSwgJHZhbHVlLFxuICAkbW96ICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEsXG4gICR3ZWJraXQgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0LFxuICAkbyAgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhLFxuICAkbXMgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCxcbiAgJGtodG1sICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCxcbiAgJG9mZmljaWFsIDogdHJ1ZVxuKSB7XG4gIEBpZiAkd2Via2l0ICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAtd2Via2l0LSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJGtodG1sICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwgICAgIHsgIC1raHRtbC0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRtb3ogICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICAgIC1tb3otI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbXMgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQgeyAgICAgLW1zLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG8gICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgICAgICAtby0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRvZmZpY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG59XG5cbi8vIFNhbWUgYXMgZXhwZXJpbWVudGFsKCksIGJ1dCBmb3IgY2FzZXMgd2hlbiB0aGUgcHJvcGVydHkgaXMgdGhlIHNhbWUgYW5kIHRoZSB2YWx1ZSBpcyB2ZW5kb3JpemVkXG5AbWl4aW4gZXhwZXJpbWVudGFsLXZhbHVlKCRwcm9wZXJ0eSwgJHZhbHVlLFxuICAkbW96ICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEsXG4gICR3ZWJraXQgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0LFxuICAkbyAgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhLFxuICAkbXMgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCxcbiAgJGtodG1sICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCxcbiAgJG9mZmljaWFsIDogdHJ1ZVxuKSB7XG4gIEBpZiAkd2Via2l0ICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAjeyRwcm9wZXJ0eX0gOiAtd2Via2l0LSN7JHZhbHVlfTsgfVxuICBAaWYgJGtodG1sICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwgICAgIHsgI3skcHJvcGVydHl9IDogIC1raHRtbC0jeyR2YWx1ZX07IH1cbiAgQGlmICRtb3ogICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICN7JHByb3BlcnR5fSA6ICAgIC1tb3otI3skdmFsdWV9OyB9XG4gIEBpZiAkbXMgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQgeyAjeyRwcm9wZXJ0eX0gOiAgICAgLW1zLSN7JHZhbHVlfTsgfVxuICBAaWYgJG8gICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgI3skcHJvcGVydHl9IDogICAgICAtby0jeyR2YWx1ZX07IH1cbiAgQGlmICRvZmZpY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICN7JHByb3BlcnR5fSA6ICAgICAgICAgI3skdmFsdWV9OyB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file diff --git a/web/assets/manifest.json b/web/assets/manifest.json new file mode 100644 index 0000000..1a2f054 --- /dev/null +++ b/web/assets/manifest.json @@ -0,0 +1,6 @@ +{ + "assets/main.css": "/assets/main.1fe516e942e8297eae97.css", + "assets/raffler.js": "/assets/raffler.7844e51a893abf22f9fc.js", + "assets/images/avatar.png": "/assets/images/avatar.3d50e83f.png", + "assets/images/logo.png": "/assets/images/logo.de0bea12.png" +} \ No newline at end of file diff --git a/web/assets/raffler.7844e51a893abf22f9fc.js b/web/assets/raffler.7844e51a893abf22f9fc.js new file mode 100644 index 0000000..20280ab --- /dev/null +++ b/web/assets/raffler.7844e51a893abf22f9fc.js @@ -0,0 +1,244 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/assets/"; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./source/js/raffler.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./source/js/raffler.js": +/*!******************************!*\ + !*** ./source/js/raffler.js ***! + \******************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Main object. + */ +var Raffler = { + /** + * The delay between highlighting each checkin. + */ + highlightDelay: 0, + + /** + * The current hightlight cycle. + */ + currentCycle: 0, + + /** + * Array of truely random numbers. This is populated + * on page load. We select the winners from this array. + */ + winners: [], + + /** + * Current state we are in. One of "start", "raffling", "winner" + */ + state: 'start', + + /** + * Initialize + */ + init: function init(winners) { + Raffler.winners = winners; + $(document).on('keydown', Raffler.onKeyDown); + }, + + /** + * On key down handler. + */ + onKeyDown: function onKeyDown(e) { + // We only handle the space (32) and page down (34) keys. Page down is enabled because + // presentation remotes emit page down on the "next" button + if (e.keyCode != 32 && e.keyCode != 34) { + return; + } // If we are in start state, start the raffler + + + if (Raffler.state == 'start') { + Raffler.raffle(); + } // If we are raffling, do nothing. + + + if (Raffler.state == 'raffling') { + return; + } // If we are showing the winner, reset the state + + + if (Raffler.state == 'winner') { + Raffler.resetRaffler(); + } + }, + + /** + * Raffle. + */ + raffle: function raffle() { + if (Raffler.winners.length <= 0) { + alert("We have gone over the initial draft, please refresh page."); + window.history.go(0); + return; + } // Hide checkin link + + + $('.checkin-link').hide(); + Raffler.state = 'raffling'; + Raffler.highlightRandomCheckin(); + }, + + /** + * Present a winner. + */ + showWinner: function showWinner() { + // Change state + Raffler.state = 'winner'; // Hide all checkins + + $('.checkin').addClass('loser', 1000); // Show winner + + var winner = $('.checkin').eq(Raffler.winners.pop()); + winner.switchClass('loser', 'winner', 200); + }, + + /** + * Reset raffler + */ + resetRaffler: function resetRaffler() { + // Reset cycles and delay + Raffler.currentCycle = 0; + Raffler.highlightDelay = 0; // Reset styles + + $('.checkin').removeClass('loser'); + $('.checkin').removeClass('winner'); // Reset state + + Raffler.state = 'start'; + }, + + /** + * Highlight random checkin. + */ + highlightRandomCheckin: function highlightRandomCheckin() { + // Abort if we have reached 50 cycles + if (45 <= Raffler.currentCycle) { + Raffler.showWinner(); + return; + } // Increase the current highlight cycle + + + Raffler.currentCycle++; // Adjust the highlight delay + + Raffler.highlightDelay = Math.pow(1.14, Raffler.currentCycle); // Get random person to highlight + + checkin = Raffler.getRandomCheckin(); // Highlight, delay, unhighlight + + checkin.addClass('selected', Raffler.highlightDelay, Raffler.unhighlightCurrentCheckin); + }, + + /** + * Unhighlight current checkin + */ + unhighlightCurrentCheckin: function unhighlightCurrentCheckin() { + // Unhighlight this checkin and recurse back to highlighting another + // random checkin + $(this).removeClass('selected', Raffler.highlightDelay, Raffler.highlightRandomCheckin); + }, + + /** + * Get random checkin. + */ + getRandomCheckin: function getRandomCheckin() { + var random = Math.floor(Math.random() * $('.checkin').size()); + return $('.checkin').eq(random); + } +}; +var $checkins = $('.checkins[data-winners]'); + +if ($checkins.length > 0) { + Raffler.init($checkins.data('winners').split(',')); +} + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc291cmNlL2pzL3JhZmZsZXIuanMiXSwibmFtZXMiOlsiUmFmZmxlciIsImhpZ2hsaWdodERlbGF5IiwiY3VycmVudEN5Y2xlIiwid2lubmVycyIsInN0YXRlIiwiaW5pdCIsIiQiLCJkb2N1bWVudCIsIm9uIiwib25LZXlEb3duIiwiZSIsImtleUNvZGUiLCJyYWZmbGUiLCJyZXNldFJhZmZsZXIiLCJsZW5ndGgiLCJhbGVydCIsIndpbmRvdyIsImhpc3RvcnkiLCJnbyIsImhpZGUiLCJoaWdobGlnaHRSYW5kb21DaGVja2luIiwic2hvd1dpbm5lciIsImFkZENsYXNzIiwid2lubmVyIiwiZXEiLCJwb3AiLCJzd2l0Y2hDbGFzcyIsInJlbW92ZUNsYXNzIiwiTWF0aCIsInBvdyIsImNoZWNraW4iLCJnZXRSYW5kb21DaGVja2luIiwidW5oaWdobGlnaHRDdXJyZW50Q2hlY2tpbiIsInJhbmRvbSIsImZsb29yIiwic2l6ZSIsIiRjaGVja2lucyIsImRhdGEiLCJzcGxpdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIs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LCJmaWxlIjoicmFmZmxlci43ODQ0ZTUxYTg5M2FiZjIyZjlmYy5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Fzc2V0cy9cIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zb3VyY2UvanMvcmFmZmxlci5qc1wiKTtcbiIsIi8qKlxuICogTWFpbiBvYmplY3QuXG4gKi9cbnZhciBSYWZmbGVyID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWxheSBiZXR3ZWVuIGhpZ2hsaWdodGluZyBlYWNoIGNoZWNraW4uXG4gICAgICovXG4gICAgaGlnaGxpZ2h0RGVsYXk6IDAsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBoaWdodGxpZ2h0IGN5Y2xlLlxuICAgICAqL1xuICAgIGN1cnJlbnRDeWNsZTogMCxcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIHRydWVseSByYW5kb20gbnVtYmVycy4gVGhpcyBpcyBwb3B1bGF0ZWRcbiAgICAgKiBvbiBwYWdlIGxvYWQuIFdlIHNlbGVjdCB0aGUgd2lubmVycyBmcm9tIHRoaXMgYXJyYXkuXG4gICAgICovXG4gICAgd2lubmVyczogW10sXG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHN0YXRlIHdlIGFyZSBpbi4gT25lIG9mIFwic3RhcnRcIiwgXCJyYWZmbGluZ1wiLCBcIndpbm5lclwiXG4gICAgICovXG4gICAgc3RhdGU6ICdzdGFydCcsXG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplXG4gICAgICovXG4gICAgaW5pdDogZnVuY3Rpb24od2lubmVycykge1xuICAgICAgICBSYWZmbGVyLndpbm5lcnMgPSB3aW5uZXJzO1xuICAgICAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIFJhZmZsZXIub25LZXlEb3duKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogT24ga2V5IGRvd24gaGFuZGxlci5cbiAgICAgKi9cbiAgICBvbktleURvd246IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgLy8gV2Ugb25seSBoYW5kbGUgdGhlIHNwYWNlICgzMikgYW5kIHBhZ2UgZG93biAoMzQpIGtleXMuIFBhZ2UgZG93biBpcyBlbmFibGVkIGJlY2F1c2VcbiAgICAgICAgLy8gcHJlc2VudGF0aW9uIHJlbW90ZXMgZW1pdCBwYWdlIGRvd24gb24gdGhlIFwibmV4dFwiIGJ1dHRvblxuICAgICAgICBpZiAoZS5rZXlDb2RlICE9IDMyICYmIGUua2V5Q29kZSAhPSAzNCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIHN0YXJ0IHN0YXRlLCBzdGFydCB0aGUgcmFmZmxlclxuICAgICAgICBpZiAoUmFmZmxlci5zdGF0ZSA9PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICBSYWZmbGVyLnJhZmZsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIHJhZmZsaW5nLCBkbyBub3RoaW5nLlxuICAgICAgICBpZiAoUmFmZmxlci5zdGF0ZSA9PSAncmFmZmxpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBhcmUgc2hvd2luZyB0aGUgd2lubmVyLCByZXNldCB0aGUgc3RhdGVcbiAgICAgICAgaWYgKFJhZmZsZXIuc3RhdGUgPT0gJ3dpbm5lcicpIHtcbiAgICAgICAgICAgIFJhZmZsZXIucmVzZXRSYWZmbGVyKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmFmZmxlLlxuICAgICAqL1xuICAgIHJhZmZsZTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGlmIChSYWZmbGVyLndpbm5lcnMubGVuZ3RoIDw9IDAgKSB7XG4gICAgICAgICAgICBhbGVydChcIldlIGhhdmUgZ29uZSBvdmVyIHRoZSBpbml0aWFsIGRyYWZ0LCBwbGVhc2UgcmVmcmVzaCBwYWdlLlwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LmdvKDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGlkZSBjaGVja2luIGxpbmtcbiAgICAgICAgJCgnLmNoZWNraW4tbGluaycpLmhpZGUoKTtcblxuICAgICAgICBSYWZmbGVyLnN0YXRlID0gJ3JhZmZsaW5nJztcbiAgICAgICAgUmFmZmxlci5oaWdobGlnaHRSYW5kb21DaGVja2luKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgYSB3aW5uZXIuXG4gICAgICovXG4gICAgc2hvd1dpbm5lcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIENoYW5nZSBzdGF0ZVxuICAgICAgICBSYWZmbGVyLnN0YXRlID0gJ3dpbm5lcic7XG5cbiAgICAgICAgLy8gSGlkZSBhbGwgY2hlY2tpbnNcbiAgICAgICAgJCgnLmNoZWNraW4nKS5hZGRDbGFzcygnbG9zZXInLCAxMDAwKTtcblxuXG4gICAgICAgIC8vIFNob3cgd2lubmVyXG4gICAgICAgIHZhciB3aW5uZXIgPSAkKCcuY2hlY2tpbicpLmVxKFJhZmZsZXIud2lubmVycy5wb3AoKSk7XG4gICAgICAgIHdpbm5lci5zd2l0Y2hDbGFzcygnbG9zZXInLCAnd2lubmVyJywgMjAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVzZXQgcmFmZmxlclxuICAgICAqL1xuICAgIHJlc2V0UmFmZmxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFJlc2V0IGN5Y2xlcyBhbmQgZGVsYXlcbiAgICAgICAgUmFmZmxlci5jdXJyZW50Q3ljbGUgPSAwO1xuICAgICAgICBSYWZmbGVyLmhpZ2hsaWdodERlbGF5ID0gMDtcblxuICAgICAgICAvLyBSZXNldCBzdHlsZXNcbiAgICAgICAgJCgnLmNoZWNraW4nKS5yZW1vdmVDbGFzcygnbG9zZXInKTtcbiAgICAgICAgJCgnLmNoZWNraW4nKS5yZW1vdmVDbGFzcygnd2lubmVyJyk7XG5cbiAgICAgICAgLy8gUmVzZXQgc3RhdGVcbiAgICAgICAgUmFmZmxlci5zdGF0ZSA9ICdzdGFydCc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhpZ2hsaWdodCByYW5kb20gY2hlY2tpbi5cbiAgICAgKi9cbiAgICBoaWdobGlnaHRSYW5kb21DaGVja2luOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gQWJvcnQgaWYgd2UgaGF2ZSByZWFjaGVkIDUwIGN5Y2xlc1xuICAgICAgICBpZiAoNDUgPD0gUmFmZmxlci5jdXJyZW50Q3ljbGUpIHtcbiAgICAgICAgICAgIFJhZmZsZXIuc2hvd1dpbm5lcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0IGN5Y2xlXG4gICAgICAgIFJhZmZsZXIuY3VycmVudEN5Y2xlKys7XG5cbiAgICAgICAgLy8gQWRqdXN0IHRoZSBoaWdobGlnaHQgZGVsYXlcbiAgICAgICAgUmFmZmxlci5oaWdobGlnaHREZWxheSA9IE1hdGgucG93KDEuMTQsIFJhZmZsZXIuY3VycmVudEN5Y2xlKTtcblxuICAgICAgICAvLyBHZXQgcmFuZG9tIHBlcnNvbiB0byBoaWdobGlnaHRcbiAgICAgICAgY2hlY2tpbiA9IFJhZmZsZXIuZ2V0UmFuZG9tQ2hlY2tpbigpO1xuXG4gICAgICAgIC8vIEhpZ2hsaWdodCwgZGVsYXksIHVuaGlnaGxpZ2h0XG4gICAgICAgIGNoZWNraW4uYWRkQ2xhc3MoJ3NlbGVjdGVkJywgUmFmZmxlci5oaWdobGlnaHREZWxheSwgUmFmZmxlci51bmhpZ2hsaWdodEN1cnJlbnRDaGVja2luKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5oaWdobGlnaHQgY3VycmVudCBjaGVja2luXG4gICAgICovXG4gICAgdW5oaWdobGlnaHRDdXJyZW50Q2hlY2tpbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFVuaGlnaGxpZ2h0IHRoaXMgY2hlY2tpbiBhbmQgcmVjdXJzZSBiYWNrIHRvIGhpZ2hsaWdodGluZyBhbm90aGVyXG4gICAgICAgIC8vIHJhbmRvbSBjaGVja2luXG4gICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJywgUmFmZmxlci5oaWdobGlnaHREZWxheSwgUmFmZmxlci5oaWdobGlnaHRSYW5kb21DaGVja2luKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHJhbmRvbSBjaGVja2luLlxuICAgICAqL1xuICAgIGdldFJhbmRvbUNoZWNraW46IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogJCgnLmNoZWNraW4nKS5zaXplKCkpO1xuICAgICAgICByZXR1cm4oJCgnLmNoZWNraW4nKS5lcShyYW5kb20pKTtcbiAgICB9XG59O1xuXG5sZXQgJGNoZWNraW5zID0gJCgnLmNoZWNraW5zW2RhdGEtd2lubmVyc10nKTtcbmlmICgkY2hlY2tpbnMubGVuZ3RoID4gMCkge1xuICAgIFJhZmZsZXIuaW5pdCgkY2hlY2tpbnMuZGF0YSgnd2lubmVycycpLnNwbGl0KCcsJykpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..40cc990 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,26 @@ +var Encore = require('@symfony/webpack-encore'); + +Encore + .disableSingleRuntimeChunk() + .setOutputPath('web/assets/') + .setPublicPath('/assets') + + .addStyleEntry('main', './source/scss/main.scss') + .addEntry('raffler', './source/js/raffler.js') + + .copyFiles({ + from: './source/images', + to: 'images/[path][name].[hash:8].[ext]' + }) + + .enableSassLoader() + .enableSourceMaps(!Encore.isProduction()) + .cleanupOutputBeforeBuild() + .enableVersioning() + .configureFilenames({ + js: '[name].[contenthash].js', + css: '[name].[contenthash].css' + }) +; + +module.exports = Encore.getWebpackConfig(); From 17c644df0735d6dcb7c910a679188dfc57dd6bfb Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Sun, 23 Jun 2019 14:44:56 +0200 Subject: [PATCH 6/8] Save fetched events to cache after cache bust --- src/Raffle/CachingMeetupService.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Raffle/CachingMeetupService.php b/src/Raffle/CachingMeetupService.php index 99a8dfd..f7a9c63 100644 --- a/src/Raffle/CachingMeetupService.php +++ b/src/Raffle/CachingMeetupService.php @@ -37,12 +37,10 @@ public function __construct( public function getPresentAndPastEvents(): array { - if ($this->requestStack->getMasterRequest()->query->get('cache_busting', false)) { - return $this->inner->getPresentAndPastEvents(); - } + $bustCache = $this->requestStack->getMasterRequest()->query->get('cache_busting', false); $cachedEvents = $this->cacheItemPool->getItem('events_cache'); - if ($cachedEvents->isHit()) { + if (!$bustCache && $cachedEvents->isHit()) { return $cachedEvents->get(); } From b6c1713cdaf22c8010a5f6cabbd2154c9d8af024 Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Sun, 23 Jun 2019 20:23:37 +0200 Subject: [PATCH 7/8] Fix typo in README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index be0c54e..af0260f 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Ensure that [VirtualBox](https://www.virtualbox.org), [Vagrant](http://www.vagra meetup_group: amsterdamphp meetup_api_key: YOUR_MEETUP_API_KEY secret: SomeRandomSecretToSeedSymfony - redis_dsn: redis://locahost + redis_dsn: redis://localhost ``` 1. Add the following to your hosts file: `10.10.10.10 raffler.local` @@ -45,7 +45,7 @@ All done! Now you can access the application at [http://raffler.local/](http://r meetup_group: amsterdamphp meetup_api_key: YOUR_MEETUP_API_KEY secret: SomeRandomSecretToSeedSymfony - redis_dsn: redis://locahost + redis_dsn: redis://localhost ``` ## How to use it From 099500eced6fb807cf301aaed80ff25feab48df9 Mon Sep 17 00:00:00 2001 From: Remon van de Kamp Date: Sun, 23 Jun 2019 20:34:03 +0200 Subject: [PATCH 8/8] Enable Twig linting --- Makefile | 10 +++++++++- circle.yml | 2 +- templates/event_checkin.html.twig | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2351259..2ce21e9 100644 --- a/Makefile +++ b/Makefile @@ -19,4 +19,12 @@ vendor: composer.json composer.lock node_modules: package.json npm install -.PHONY: build-assets +unit-tests: ## Run unit tests + vendor/bin/phpunit + +lint: + bin/console lint:twig templates/ + +test: unit-tests lint + +.PHONY: help install build-assets unit-tests lint test diff --git a/circle.yml b/circle.yml index 24b1557..0240ecd 100644 --- a/circle.yml +++ b/circle.yml @@ -13,7 +13,7 @@ dependencies: test: override: - - ./vendor/bin/phpunit --log-junit $CIRCLE_TEST_REPORTS/phpunit/junit.xml + - make test deployment: production: diff --git a/templates/event_checkin.html.twig b/templates/event_checkin.html.twig index 731d4f2..87c5d8e 100644 --- a/templates/event_checkin.html.twig +++ b/templates/event_checkin.html.twig @@ -13,7 +13,7 @@
{{ rsvp.name }}