Updated from some -dev modules to alpha, beta or full releases
authorJeff Veit <jeff.veit@gmail.com>
Tue, 22 May 2018 20:33:47 +0000 (21:33 +0100)
committerJeff Veit <jeff.veit@gmail.com>
Tue, 22 May 2018 20:33:47 +0000 (21:33 +0100)
154 files changed:
composer.json
composer.lock
vendor/composer/installed.json
vendor/psy/psysh/.editorconfig
vendor/psy/psysh/.gitignore
vendor/psy/psysh/.travis.yml
vendor/psy/psysh/LICENSE
vendor/psy/psysh/Makefile [new file with mode: 0644]
vendor/psy/psysh/bin/build [deleted file]
vendor/psy/psysh/bin/build-manual [deleted file]
vendor/psy/psysh/bin/build-phar [deleted file]
vendor/psy/psysh/bin/build-stub [new file with mode: 0755]
vendor/psy/psysh/bin/build-vendor [deleted file]
vendor/psy/psysh/bin/build-vendor-compat [deleted file]
vendor/psy/psysh/bin/package [deleted file]
vendor/psy/psysh/box.json.dist [new file with mode: 0644]
vendor/psy/psysh/composer.json
vendor/psy/psysh/src/CodeCleaner.php
vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php
vendor/psy/psysh/src/CodeCleaner/ListPass.php [new file with mode: 0644]
vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
vendor/psy/psysh/src/Command/ReflectingCommand.php
vendor/psy/psysh/src/Command/TraceCommand.php
vendor/psy/psysh/src/Compiler.php [deleted file]
vendor/psy/psysh/src/Context.php
vendor/psy/psysh/src/Exception/TypeErrorException.php
vendor/psy/psysh/src/ExecutionClosure.php
vendor/psy/psysh/src/ExecutionLoop.php
vendor/psy/psysh/src/ExecutionLoopClosure.php [new file with mode: 0644]
vendor/psy/psysh/src/Formatter/CodeFormatter.php
vendor/psy/psysh/src/Formatter/SignatureFormatter.php
vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
vendor/psy/psysh/src/Shell.php
vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
vendor/psy/psysh/src/functions.php
vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php
vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php
vendor/psy/psysh/test/CodeCleaner/ListPassTest.php [new file with mode: 0644]
vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php
vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php
vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php
vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php
vendor/psy/psysh/test/CodeCleanerTest.php
vendor/psy/psysh/test/ContextTest.php [new file with mode: 0644]
vendor/psy/psysh/test/Exception/BreakExceptionTest.php
vendor/psy/psysh/test/Exception/ErrorExceptionTest.php
vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php [new file with mode: 0644]
vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php [new file with mode: 0644]
vendor/psy/psysh/test/Formatter/CodeFormatterTest.php
vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php [new file with mode: 0644]
vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php [new file with mode: 0644]
vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php
vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php [new file with mode: 0644]
vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php [new file with mode: 0644]
vendor/psy/psysh/test/ShellTest.php
vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php
vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php [new file with mode: 0644]
vendor/psy/psysh/vendor-bin/box/composer.json [new file with mode: 0644]
vendor/psy/psysh/vendor-bin/box/composer.lock [new file with mode: 0644]
web/modules/contrib/media_entity_document/LICENSE.txt [deleted file]
web/modules/contrib/media_entity_document/config/schema/media_entity_document.schema.yml [deleted file]
web/modules/contrib/media_entity_document/images/icons/document.png [deleted file]
web/modules/contrib/media_entity_document/media_entity_document.info.yml [deleted file]
web/modules/contrib/media_entity_document/media_entity_document.install [deleted file]
web/modules/contrib/media_entity_document/media_entity_document.module [deleted file]
web/modules/contrib/media_entity_document/src/Plugin/EntityBrowser/Widget/Upload.php [deleted file]
web/modules/contrib/media_entity_document/src/Plugin/MediaEntity/Type/Document.php [deleted file]
web/modules/contrib/media_entity_image/DEVELOPING.md [deleted file]
web/modules/contrib/media_entity_image/LICENSE.txt [deleted file]
web/modules/contrib/media_entity_image/README.md [deleted file]
web/modules/contrib/media_entity_image/composer.json [deleted file]
web/modules/contrib/media_entity_image/config/schema/media_entity_image.schema.yml [deleted file]
web/modules/contrib/media_entity_image/images/icons/image.png [deleted file]
web/modules/contrib/media_entity_image/media_entity_image.info.yml [deleted file]
web/modules/contrib/media_entity_image/media_entity_image.install [deleted file]
web/modules/contrib/media_entity_image/media_entity_image.module [deleted file]
web/modules/contrib/media_entity_image/src/Plugin/EntityBrowser/Widget/Upload.php [deleted file]
web/modules/contrib/media_entity_image/src/Plugin/MediaEntity/Type/Image.php [deleted file]
web/modules/contrib/media_entity_image/src/Tests/MediaEntityImageTest.php [deleted file]
web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/entity_browser.browser.test_entity_browser_for_images.yml [deleted file]
web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/field.field.media.media_bundle_for_images.field_image.yml [deleted file]
web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/field.storage.media.field_image.yml [deleted file]
web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/media_entity.bundle.media_bundle_for_images.yml [deleted file]
web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/media_entity_image_test.info.yml [deleted file]
web/modules/contrib/security_review/API.txt [deleted file]
web/modules/contrib/security_review/IGNOREME.txt [deleted file]
web/modules/contrib/security_review/PATCHES.txt [deleted file]
web/modules/contrib/security_review/README.txt [deleted file]
web/modules/contrib/security_review/config/install/security_review.check.security_review-base_url_set.yml [deleted file]
web/modules/contrib/security_review/config/install/security_review.settings.yml [deleted file]
web/modules/contrib/security_review/config/schema/security_review.schema.yml [deleted file]
web/modules/contrib/security_review/css/security_review.run_and_review.css [deleted file]
web/modules/contrib/security_review/js/security_review.run_and_review.js [deleted file]
web/modules/contrib/security_review/security_review.api.php [deleted file]
web/modules/contrib/security_review/security_review.drush.inc [deleted file]
web/modules/contrib/security_review/security_review.info.yml [deleted file]
web/modules/contrib/security_review/security_review.install [deleted file]
web/modules/contrib/security_review/security_review.libraries.yml [deleted file]
web/modules/contrib/security_review/security_review.links.menu.yml [deleted file]
web/modules/contrib/security_review/security_review.links.task.yml [deleted file]
web/modules/contrib/security_review/security_review.module [deleted file]
web/modules/contrib/security_review/security_review.permissions.yml [deleted file]
web/modules/contrib/security_review/security_review.routing.yml [deleted file]
web/modules/contrib/security_review/security_review.services.yml [deleted file]
web/modules/contrib/security_review/src/Check.php [deleted file]
web/modules/contrib/security_review/src/CheckResult.php [deleted file]
web/modules/contrib/security_review/src/CheckSettings.php [deleted file]
web/modules/contrib/security_review/src/CheckSettings/TrustedHostSettings.php [deleted file]
web/modules/contrib/security_review/src/CheckSettingsInterface.php [deleted file]
web/modules/contrib/security_review/src/Checklist.php [deleted file]
web/modules/contrib/security_review/src/Checks/AdminPermissions.php [deleted file]
web/modules/contrib/security_review/src/Checks/ErrorReporting.php [deleted file]
web/modules/contrib/security_review/src/Checks/ExecutablePhp.php [deleted file]
web/modules/contrib/security_review/src/Checks/FailedLogins.php [deleted file]
web/modules/contrib/security_review/src/Checks/Field.php [deleted file]
web/modules/contrib/security_review/src/Checks/Field.php.rej [deleted file]
web/modules/contrib/security_review/src/Checks/FilePermissions.php [deleted file]
web/modules/contrib/security_review/src/Checks/InputFormats.php [deleted file]
web/modules/contrib/security_review/src/Checks/PrivateFiles.php [deleted file]
web/modules/contrib/security_review/src/Checks/QueryErrors.php [deleted file]
web/modules/contrib/security_review/src/Checks/TemporaryFiles.php [deleted file]
web/modules/contrib/security_review/src/Checks/TrustedHosts.php [deleted file]
web/modules/contrib/security_review/src/Checks/UploadExtensions.php [deleted file]
web/modules/contrib/security_review/src/Checks/ViewsAccess.php [deleted file]
web/modules/contrib/security_review/src/Controller/ChecklistController.php [deleted file]
web/modules/contrib/security_review/src/Controller/HelpController.php [deleted file]
web/modules/contrib/security_review/src/Controller/ToggleController.php [deleted file]
web/modules/contrib/security_review/src/Form/RunForm.php [deleted file]
web/modules/contrib/security_review/src/Form/SettingsForm.php [deleted file]
web/modules/contrib/security_review/src/Security.php [deleted file]
web/modules/contrib/security_review/src/SecurityReview.php [deleted file]
web/modules/contrib/security_review/src/Tests/CheckWebTest.php [deleted file]
web/modules/contrib/security_review/src/Tests/ChecklistWebTest.php [deleted file]
web/modules/contrib/security_review/templates/check_evaluation.html.twig [deleted file]
web/modules/contrib/security_review/templates/check_help.html.twig [deleted file]
web/modules/contrib/security_review/templates/general_help.html.twig [deleted file]
web/modules/contrib/security_review/templates/run_and_review.html.twig [deleted file]
web/modules/contrib/security_review/tests/modules/security_review_test/security_review_test.info.yml [deleted file]
web/modules/contrib/security_review/tests/modules/security_review_test/security_review_test.module [deleted file]
web/modules/contrib/security_review/tests/modules/security_review_test/src/Test.php [deleted file]
web/modules/contrib/security_review/tests/modules/security_review_test/src/TestNoStore.php [deleted file]
web/modules/contrib/security_review/tests/src/Kernel/CheckTest.php [deleted file]
web/modules/contrib/security_review/tests/src/Kernel/ChecklistTest.php [deleted file]
web/modules/contrib/security_review/tests/src/Kernel/SecurityReviewTest.php [deleted file]
web/modules/contrib/views_bootstrap/src/Plugin/views/style/ViewsBootstrapTab.php
web/modules/contrib/views_bootstrap/templates/views-bootstrap-carousel.html.twig
web/modules/contrib/views_bootstrap/views_bootstrap.info.yml
web/modules/contrib/views_bootstrap/views_bootstrap.theme.inc

index bd68f0a001430aaefd61ef90ba9048aa0dd16c64..03947d88556ab9b651d1f36bc44cca0035be0dbc 100644 (file)
         "cweagans/composer-patches": "~1.0",
         "drupal/core": "^8.5.0",
         "drupal/console": "^1.0",
-        "drupal/token": "^1.0@RC",
-        "drupal/ctools": "^3.0@alpha",
+        "drupal/token": "^1.0",
+        "drupal/ctools": "^3.0",
         "drupal/migrate_upgrade": "3.0.*",
         "drupal/migrate_tools": "3.*",
         "drupal/bootstrap": "^3.2",
         "drupal/admin_toolbar": "^1.18",
-        "drupal/pathauto": "^1.0@RC",
+        "drupal/pathauto": "^1.0",
         "drupal/metatag": "^1.0",
         "drupal/simple_sitemap": "^2.9",
         "drupal/eu_cookie_compliance": "^1.0@beta",
         "twbs/bootstrap-sass": "^3.3",
         "drupal/paragraphs": "^1.1",
-        "drupal/livereload": "1.x-dev",
-        "drupal/front": "^1.0@alpha",
+        "drupal/front": "^1.0@beta",
         "drupal/filefield_sources": "1.x-dev",
         "drupal/php": "1.x-dev",
         "drupal/environment_indicator": "^3.0",
         "drupal/hacked": "^2.0@beta",
-        "drupal/pathologic": "1.x-dev",
+        "drupal/pathologic": "^1.0@alpha",
         "drupal/typogrify": "^1.0@alpha",
         "drupal/entityqueue": "^1.0@alpha",
-        "drupal/advanced_help": "1.x-dev",
+        "drupal/advanced_help": "^1.0@alpha",
         "drupal/better_formats": "1.x-dev",
         "drupal/block_class": "^1.0@alpha",
-        "drupal/redirect": "^1.0@alpha",
-        "drupal/libraries": "3.x-dev",
+        "drupal/redirect": "^1.2",
+        "drupal/libraries": "^3.0@alpha",
         "drupal/linkchecker": "1.x-dev",
         "drupal/video": "^1.2",
         "drupal/videojs": "^1.0",
         "drupal/fontyourface": "^3.0",
-        "drupal/devel": "^1.0@RC",
+        "drupal/devel": "^1.0",
         "drupal/drupalmoduleupgrader": "^1.2",
         "drupal/security_review": "1.x-dev",
         "drupal/memcache": "^2.0@alpha",
-        "drupal/media": "1.x-dev",
         "enyo/dropzone": "^4.3",
         "drush/config-extra": "^1.0",
         "drush/drush": "^9.0",
@@ -66,7 +64,7 @@
         "mehrpadin/superfish": "^2.0",
         "drupal/superfish": "^1.0@RC",
         "drupal/entity_browser": "^1.0",
-        "drupal/views_bootstrap": "3.x-dev",
+        "drupal/views_bootstrap": "3.0",
         "drupal/views_responsive_grid": "@dev",
         "drupal/imagemagick": "^1.0@alpha",
         "drupal/diff": "^1.0@RC",
@@ -82,9 +80,8 @@
         "drupal/layout_plugin": "^1.0@alpha",
         "drupal/draggableviews": "^1.0",
         "roave/security-advisories": "dev-master",
-        "phpunit/phpunit": "^4.8",
 
-    "drupal/video_embed_field": "^2.0",
+     "drupal/video_embed_field": "^2.0",
         "drupal/slick_media":"^2.0",
         "drupal/media_entity_twitter":"^2.0",
         "drupal/media_entity_slideshow":"^2.0",
         "drupal/image_widget_crop":"^2.1",
         "drupal/crop":"^2.0",
         "drupal/media_entity":"^2.0",
-        "drupal/media_entity_actions":"^1.0"
+        "drupal/media_entity_actions":"^1.0",
+        "drupal/inline_entity_form": "^1.0@beta",
+        "drupal/entity_embed": "^1.0@beta",
+        "drupal/dropzonejs": "^2.0@alpha"
+
     },
     "require-dev": {
         "behat/mink": "~1.7",
         "jcalderonzumba/mink-phantomjs-driver": "~0.3.1",
         "mikey179/vfsStream": "~1.2",
         "symfony/css-selector": "~2.8",
-        "drupal/twig_xdebug": "^1.0"
+        "drupal/twig_xdebug": "^1.0",
+        "drupal/livereload": "1.x-dev",
+        "phpunit/phpunit": "^4.8"
     },
     "conflict": {
         "drupal/drupal": "*"
index 5d20fe77d8c884704aeb7abef9b5d4e9be249996..4f7d1e174f07997077b9170a072742dd3c62da98 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "69e55683428b6248efcebe4900a9b8cd",
+    "content-hash": "59dd079ea307f680b2d0a8256b94b473",
     "packages": [
         {
             "name": "alchemy/zippy",
             ],
             "time": "2017-07-22T12:18:28+00:00"
         },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14T21:17:01+00:00"
-        },
         {
             "name": "doctrine/lexer",
             "version": "v1.0.1",
         },
         {
             "name": "drupal/advanced_help",
-            "version": "dev-1.x",
+            "version": "1.0.0-alpha1",
             "source": {
                 "type": "git",
                 "url": "https://git.drupal.org/project/advanced_help",
-                "reference": "d4238e55f773c8d569847cb57042c60c906aec3c"
+                "reference": "8.x-1.0-alpha1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://ftp.drupal.org/files/projects/advanced_help-8.x-1.0-alpha1.zip",
+                "reference": "8.x-1.0-alpha1",
+                "shasum": "a8d48d3cef48d648b3f7d5e8d0bd302cb797df8c"
             },
             "require": {
                 "drupal/core": "~8.0",
                     "dev-1.x": "1.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-1.x-dev",
-                    "datestamp": "1501649346",
+                    "version": "8.x-1.0-alpha1",
+                    "datestamp": "1523980980",
                     "security-coverage": {
                         "status": "not-covered",
-                        "message": "Dev releases are not covered by Drupal security advisories."
+                        "message": "Alpha releases are not covered by Drupal security advisories."
                     }
                 }
             },
                 "source": "https://cgit.drupalcode.org/advanced_help",
                 "issues": "https://www.drupal.org/project/issues/advanced_help",
                 "irc": "irc://irc.freenode.org/drupal-contribute"
-            },
-            "time": "2017-08-02T04:45:28+00:00"
+            }
         },
         {
             "name": "drupal/better_formats",
                 "irc": "irc://irc.freenode.org/drupal-contribute"
             }
         },
-        {
-            "name": "drupal/dropzonejs_eb_widget",
-            "version": "2.0.0-alpha3",
-            "require": {
-                "drupal/core": "*",
-                "drupal/dropzonejs": "self.version",
-                "drupal/entity_browser": "*"
-            },
-            "type": "metapackage",
-            "extra": {
-                "branch-alias": {
-                    "dev-2.x": "2.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-2.0-alpha3",
-                    "datestamp": "1513265285",
-                    "security-coverage": {
-                        "status": "not-covered",
-                        "message": "Project has not opted into security advisory coverage!"
-                    }
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Drupal Media Team",
-                    "homepage": "https://www.drupal.org/user/3260690"
-                },
-                {
-                    "name": "Drupal media CI",
-                    "homepage": "https://www.drupal.org/user/3057985"
-                },
-                {
-                    "name": "Primsi",
-                    "homepage": "https://www.drupal.org/user/282629"
-                },
-                {
-                    "name": "chr.fritsch",
-                    "homepage": "https://www.drupal.org/user/2103716"
-                },
-                {
-                    "name": "slashrsm",
-                    "homepage": "https://www.drupal.org/user/744628"
-                },
-                {
-                    "name": "wouters_f",
-                    "homepage": "https://www.drupal.org/user/721548"
-                },
-                {
-                    "name": "zkday",
-                    "homepage": "https://www.drupal.org/user/888644"
-                }
-            ],
-            "description": "DropzoneJS Entity browser widget",
-            "homepage": "https://www.drupal.org/project/dropzonejs",
-            "support": {
-                "source": "http://cgit.drupalcode.org/dropzonejs"
-            }
-        },
         {
             "name": "drupal/drupalmoduleupgrader",
             "version": "dev-1.x",
                 "irc": "irc://irc.freenode.org/drupal-contribute"
             }
         },
-        {
-            "name": "drupal/entity_browser_entity_form",
-            "version": "1.4.0",
-            "require": {
-                "drupal/core": "~8.0",
-                "drupal/entity_browser": "self.version",
-                "drupal/inline_entity_form": "*"
-            },
-            "type": "metapackage",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.4",
-                    "datestamp": "1512033785",
-                    "security-coverage": {
-                        "status": "covered",
-                        "message": "Covered by Drupal's security advisory policy"
-                    }
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Dave Reid",
-                    "homepage": "https://www.drupal.org/user/53892"
-                },
-                {
-                    "name": "Devin Carlson",
-                    "homepage": "https://www.drupal.org/user/290182"
-                },
-                {
-                    "name": "Drupal Media Team",
-                    "homepage": "https://www.drupal.org/user/3260690"
-                },
-                {
-                    "name": "Primsi",
-                    "homepage": "https://www.drupal.org/user/282629"
-                },
-                {
-                    "name": "marcingy",
-                    "homepage": "https://www.drupal.org/user/77320"
-                },
-                {
-                    "name": "samuel.mortenson",
-                    "homepage": "https://www.drupal.org/user/2582268"
-                },
-                {
-                    "name": "slashrsm",
-                    "homepage": "https://www.drupal.org/user/744628"
-                }
-            ],
-            "description": "Entity browser inline entity form integration.",
-            "homepage": "https://www.drupal.org/project/entity_browser",
-            "support": {
-                "source": "http://cgit.drupalcode.org/entity_browser"
-            }
-        },
         {
             "name": "drupal/entity_embed",
             "version": "1.0.0-beta2",
         },
         {
             "name": "drupal/libraries",
-            "version": "dev-3.x",
+            "version": "3.0.0-alpha1",
             "source": {
                 "type": "git",
                 "url": "https://git.drupal.org/project/libraries",
-                "reference": "061ead081c92a6209b09eaf23b4e3103f360946e"
+                "reference": "8.x-3.0-alpha1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha1.zip",
+                "reference": "8.x-3.0-alpha1",
+                "shasum": "bb07036b1eaeea7d736fc7e72416238830cd8d67"
             },
             "require": {
                 "drupal/core": "~8.0"
                     "dev-3.x": "3.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-3.x-dev",
-                    "datestamp": "1487978583"
+                    "version": "8.x-3.0-alpha1",
+                    "datestamp": "1517046484",
+                    "security-coverage": {
+                        "status": "not-covered",
+                        "message": "Alpha releases are not covered by Drupal security advisories."
+                    }
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
             }
         },
         {
-            "name": "drupal/livereload",
-            "version": "dev-1.x",
+            "name": "drupal/media_entity",
+            "version": "2.0.0-beta2",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/livereload",
-                "reference": "223feb798d2af436818c3d8fd0b47718569ebd4b"
+                "url": "https://git.drupal.org/project/media_entity",
+                "reference": "8.x-2.0-beta2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://ftp.drupal.org/files/projects/media_entity-8.x-2.0-beta2.zip",
+                "reference": "8.x-2.0-beta2",
+                "shasum": "2223e342634551041ef7fcb80c2860e5b62aed4e"
             },
             "require": {
-                "drupal/core": "~8.0"
+                "drupal/core": "*",
+                "drupal/entity": "*"
             },
             "type": "drupal-module",
             "extra": {
                 "branch-alias": {
-                    "dev-1.x": "1.x-dev"
+                    "dev-2.x": "2.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-1.x-dev",
-                    "datestamp": "1474009739"
+                    "version": "8.x-2.0-beta2",
+                    "datestamp": "1520603584",
+                    "security-coverage": {
+                        "status": "not-covered",
+                        "message": "Beta releases are not covered by Drupal security advisories."
+                    }
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
             "license": [
-                "GPL-2.0+"
+                "GPL-2.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Hydra",
-                    "homepage": "https://www.drupal.org/user/647364"
+                    "name": "Berdir",
+                    "homepage": "https://www.drupal.org/user/214652"
                 },
                 {
-                    "name": "tim.plunkett",
-                    "homepage": "https://www.drupal.org/user/241634"
-                }
-            ],
-            "description": "Enables and enhances use of LiveReload during development.",
-            "homepage": "https://www.drupal.org/project/livereload",
-            "support": {
-                "source": "http://cgit.drupalcode.org/livereload"
-            }
-        },
-        {
-            "name": "drupal/media",
-            "version": "dev-1.x",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupal.org/project/media",
-                "reference": "b9d72f21ea20c583ec4b83081720eba65670a8da"
-            },
-            "require": {
-                "drupal/core": "*",
-                "drupal/dropzonejs_eb_widget": "*",
-                "drupal/entity_browser": "*",
-                "drupal/entity_browser_entity_form": "*",
-                "drupal/entity_embed": "*",
-                "drupal/image_widget_crop": "*",
-                "drupal/inline_entity_form": "*",
-                "drupal/media_entity": "*",
-                "drupal/media_entity_document": "*",
-                "drupal/media_entity_image": "*",
-                "drupal/media_entity_instagram": "*",
-                "drupal/media_entity_slideshow": "*",
-                "drupal/media_entity_twitter": "*",
-                "drupal/slick_media": "*",
-                "drupal/video_embed_field": "*",
-                "drupal/video_embed_media": "*"
-            },
-            "require-dev": {
-                "drupal/dropzonejs_eb_widget": "*",
-                "drupal/entity_browser": "*",
-                "drupal/entity_browser_entity_form": "*",
-                "drupal/entity_embed": "*",
-                "drupal/image_widget_crop": "*",
-                "drupal/inline_entity_form": "*",
-                "drupal/media_entity": "*",
-                "drupal/media_entity_document": "*",
-                "drupal/media_entity_image": "*",
-                "drupal/media_entity_instagram": "*",
-                "drupal/media_entity_slideshow": "*",
-                "drupal/media_entity_twitter": "*",
-                "drupal/slick_media": "*",
-                "drupal/video_embed_field": "*",
-                "drupal/video_embed_media": "*"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.x-dev",
-                    "datestamp": "1476811139"
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0+"
-            ],
-            "authors": [
-                {
-                    "name": "Dave Reid",
-                    "homepage": "https://www.drupal.org/user/53892"
-                },
-                {
-                    "name": "David_Rothstein",
-                    "homepage": "https://www.drupal.org/user/124982"
-                },
-                {
-                    "name": "Devin Carlson",
-                    "homepage": "https://www.drupal.org/user/290182"
-                },
-                {
-                    "name": "Drupal Media Team",
-                    "homepage": "https://www.drupal.org/user/3260690"
-                },
-                {
-                    "name": "ParisLiakos",
-                    "homepage": "https://www.drupal.org/user/1011436"
-                },
-                {
-                    "name": "arthurf",
-                    "homepage": "https://www.drupal.org/user/27259"
-                },
-                {
-                    "name": "becw",
-                    "homepage": "https://www.drupal.org/user/81067"
-                },
-                {
-                    "name": "effulgentsia",
-                    "homepage": "https://www.drupal.org/user/78040"
-                },
-                {
-                    "name": "joseph.olstad",
-                    "homepage": "https://www.drupal.org/user/1321830"
-                },
-                {
-                    "name": "ksenzee",
-                    "homepage": "https://www.drupal.org/user/139855"
-                },
-                {
-                    "name": "paul.lovvik",
-                    "homepage": "https://www.drupal.org/user/289213"
-                },
-                {
-                    "name": "robeano",
-                    "homepage": "https://www.drupal.org/user/67660"
-                },
-                {
-                    "name": "slashrsm",
-                    "homepage": "https://www.drupal.org/user/744628"
-                }
-            ],
-            "description": "Media module for Drupal",
-            "homepage": "https://github.com/drupal-media/media/",
-            "support": {
-                "source": "http://cgit.drupalcode.org/media",
-                "irc": "irc://irc.freenode.org/drupal-contribute"
-            }
-        },
-        {
-            "name": "drupal/media_entity",
-            "version": "2.0.0-beta2",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupal.org/project/media_entity",
-                "reference": "8.x-2.0-beta2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/media_entity-8.x-2.0-beta2.zip",
-                "reference": "8.x-2.0-beta2",
-                "shasum": "2223e342634551041ef7fcb80c2860e5b62aed4e"
-            },
-            "require": {
-                "drupal/core": "*",
-                "drupal/entity": "*"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "branch-alias": {
-                    "dev-2.x": "2.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-2.0-beta2",
-                    "datestamp": "1520603584",
-                    "security-coverage": {
-                        "status": "not-covered",
-                        "message": "Beta releases are not covered by Drupal security advisories."
-                    }
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Berdir",
-                    "homepage": "https://www.drupal.org/user/214652"
-                },
-                {
-                    "name": "Dave Reid",
-                    "homepage": "https://www.drupal.org/user/53892"
+                    "name": "Dave Reid",
+                    "homepage": "https://www.drupal.org/user/53892"
                 },
                 {
                     "name": "Drupal Media Team",
                 "source": "http://cgit.drupalcode.org/media_entity_actions"
             }
         },
-        {
-            "name": "drupal/media_entity_document",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupal.org/project/media_entity_document",
-                "reference": "8.x-1.0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/media_entity_document-8.x-1.0.zip",
-                "reference": "8.x-1.0",
-                "shasum": "fc4d87126ebb5ac3dc135809ff4dc96d955e6539"
-            },
-            "require": {
-                "drupal/core": "~8.0",
-                "drupal/media_entity": "*"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.0",
-                    "datestamp": "1470211439",
-                    "security-coverage": {
-                        "status": "covered",
-                        "message": "Covered by Drupal's security advisory policy"
-                    }
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "NerOcrO",
-                    "homepage": "https://www.drupal.org/user/1728164"
-                }
-            ],
-            "description": "Media entity local documents provider.",
-            "homepage": "https://www.drupal.org/project/media_entity_document",
-            "support": {
-                "source": "http://cgit.drupalcode.org/media_entity_document"
-            }
-        },
-        {
-            "name": "drupal/media_entity_image",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupal.org/project/media_entity_image",
-                "reference": "8.x-1.3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/media_entity_image-8.x-1.3.zip",
-                "reference": "8.x-1.3",
-                "shasum": "53e21655e49e38fbd3fe696c4132460491879280"
-            },
-            "require": {
-                "drupal/core": "~8.1",
-                "drupal/media_entity": "~1.0 || ~8.1.0 || ~2.0"
-            },
-            "require-dev": {
-                "drupal/entity_browser": "*"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.3",
-                    "datestamp": "1525218780",
-                    "security-coverage": {
-                        "status": "covered",
-                        "message": "Covered by Drupal's security advisory policy"
-                    }
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0+"
-            ],
-            "authors": [
-                {
-                    "name": "Drupal Media Team",
-                    "homepage": "https://www.drupal.org/user/3260690"
-                },
-                {
-                    "name": "Primsi",
-                    "homepage": "https://www.drupal.org/user/282629"
-                },
-                {
-                    "name": "marcoscano",
-                    "homepage": "https://www.drupal.org/user/1288796"
-                },
-                {
-                    "name": "phenaproxima",
-                    "homepage": "https://www.drupal.org/user/205645"
-                },
-                {
-                    "name": "slashrsm",
-                    "homepage": "https://www.drupal.org/user/744628"
-                }
-            ],
-            "description": "Local images integration for Drupal Media entity.",
-            "homepage": "https://www.drupal.org/project/media_entity_image",
-            "keywords": [
-                "Drupal",
-                "image",
-                "media"
-            ],
-            "support": {
-                "source": "https://www.drupal.org/project/media_entity_image",
-                "issues": "https://www.drupal.org/project/issues/media_entity_image"
-            }
-        },
         {
             "name": "drupal/media_entity_instagram",
             "version": "2.0.0-alpha1",
         },
         {
             "name": "drupal/pathologic",
-            "version": "dev-1.x",
+            "version": "1.0.0-alpha1",
             "source": {
                 "type": "git",
                 "url": "https://git.drupal.org/project/pathologic",
-                "reference": "d50e6430f3259afa9d79123825e6e4b7a5cf39a8"
+                "reference": "8.x-1.0-alpha1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://ftp.drupal.org/files/projects/pathologic-8.x-1.0-alpha1.zip",
+                "reference": "8.x-1.0-alpha1",
+                "shasum": "51c699cc001969baa00cca60cf2302a32e578090"
             },
             "require": {
                 "drupal/core": "*"
                     "dev-1.x": "1.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-1.x-dev",
-                    "datestamp": "1525211280",
+                    "version": "8.x-1.0-alpha1",
+                    "datestamp": "1525211884",
                     "security-coverage": {
                         "status": "not-covered",
-                        "message": "Dev releases are not covered by Drupal security advisories."
+                        "message": "Alpha releases are not covered by Drupal security advisories."
                     }
                 }
             },
             "homepage": "https://www.drupal.org/project/pathologic",
             "support": {
                 "source": "http://cgit.drupalcode.org/pathologic"
-            },
-            "time": "2018-05-01T21:40:58+00:00"
+            }
         },
         {
             "name": "drupal/permissions_by_term",
             "homepage": "https://www.drupal.org/project/security_review",
             "support": {
                 "source": "http://cgit.drupalcode.org/security_review"
-            },
-            "time": "2018-02-20T20:48:19+00:00"
+            }
         },
         {
             "name": "drupal/simple_sitemap",
         },
         {
             "name": "drupal/views_bootstrap",
-            "version": "dev-3.x",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupal.org/project/views_bootstrap",
-                "reference": "8a8d1add3a575842e33c51a3733b43c24c4bc41f"
+                "reference": "8.x-3.0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://ftp.drupal.org/files/projects/views_bootstrap-8.x-3.0.zip",
+                "reference": "8.x-3.0",
+                "shasum": "65f6ebc231b28235d0404140cc8420580206e101"
             },
             "require": {
                 "drupal/core": "*"
                     "dev-3.x": "3.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-3.0+4-dev",
-                    "datestamp": "1523236084",
+                    "version": "8.x-3.0",
+                    "datestamp": "1507098244",
                     "security-coverage": {
-                        "status": "not-covered",
-                        "message": "Dev releases are not covered by Drupal security advisories."
+                        "status": "covered",
+                        "message": "Covered by Drupal's security advisory policy"
                     }
                 }
             },
             ],
             "support": {
                 "source": "http://cgit.drupalcode.org/views_bootstrap"
-            },
-            "time": "2018-05-17T13:28:26+00:00"
+            }
         },
         {
             "name": "drupal/views_responsive_grid",
             "time": "2016-01-25T08:17:30+00:00"
         },
         {
-            "name": "phpspec/prophecy",
-            "version": "1.7.6",
+            "name": "psr/container",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
                 "shasum": ""
             },
             "require": {
-                "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"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
             "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
             ],
-            "time": "2018-04-18T13:57:24+00:00"
+            "time": "2017-02-14T16:28:37+00:00"
         },
         {
-            "name": "phpunit/php-code-coverage",
-            "version": "2.2.4",
+            "name": "psr/http-message",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-token-stream": "~1.3",
-                "sebastian/environment": "^1.3.2",
-                "sebastian/version": "~1.0"
-            },
-            "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
-            },
-            "suggest": {
-                "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
             "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
             ],
-            "time": "2015-10-06T15:47:00+00:00"
+            "time": "2016-08-06T14:39:51+00:00"
         },
         {
-            "name": "phpunit/php-file-iterator",
-            "version": "1.4.5",
+            "name": "psr/log",
+            "version": "1.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-master": "1.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"
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
                 }
-            ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2017-11-27T13:52:08+00:00"
-        },
-        {
-            "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"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
             "keywords": [
-                "template"
+                "log",
+                "psr",
+                "psr-3"
             ],
-            "time": "2015-06-21T13:50:34+00:00"
+            "time": "2016-10-10T12:19:37+00:00"
         },
         {
-            "name": "phpunit/php-timer",
-            "version": "1.0.9",
+            "name": "psy/psysh",
+            "version": "v0.9.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+                "url": "https://github.com/bobthecow/psysh.git",
+                "reference": "4d969a0e08e1e05e7207c07cb4207017ecc9a331"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4d969a0e08e1e05e7207c07cb4207017ecc9a331",
+                "reference": "4d969a0e08e1e05e7207c07cb4207017ecc9a331",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "dnoegel/php-xdg-base-dir": "0.1",
+                "jakub-onderka/php-console-highlighter": "0.3.*",
+                "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
+                "php": ">=5.4.0",
+                "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
+                "symfony/var-dumper": "~2.7|~3.0|~4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+                "bamarni/composer-bin-plugin": "^1.2",
+                "hoa/console": "~2.15|~3.16",
+                "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+            },
+            "suggest": {
+                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
             },
+            "bin": [
+                "bin/psysh"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-develop": "0.9.x-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Psy\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "name": "Justin Hileman",
+                    "email": "justin@justinhileman.info",
+                    "homepage": "http://justinhileman.com"
                 }
             ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "description": "An interactive shell for modern PHP.",
+            "homepage": "http://psysh.org",
             "keywords": [
-                "timer"
+                "REPL",
+                "console",
+                "interactive",
+                "shell"
             ],
-            "time": "2017-02-26T11:10:40+00:00"
+            "time": "2018-05-22T06:48:07+00:00"
         },
         {
-            "name": "phpunit/php-token-stream",
-            "version": "1.4.12",
+            "name": "roave/security-advisories",
+            "version": "dev-master",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
+                "url": "https://github.com/Roave/SecurityAdvisories.git",
+                "reference": "79ef6566b9c7fe6c1b6f6d12e5729d5cb545ac69"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/79ef6566b9c7fe6c1b6f6d12e5729d5cb545ac69",
+                "reference": "79ef6566b9c7fe6c1b6f6d12e5729d5cb545ac69",
                 "shasum": ""
             },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.3.3"
-            },
-            "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": "2017-12-04T08:55:13+00:00"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "4.8.36",
-            "source": {
+            "conflict": {
+                "3f/pygmentize": "<1.2",
+                "adodb/adodb-php": "<5.20.12",
+                "amphp/artax": "<1.0.6|>=2,<2.0.6",
+                "amphp/http": "<1.0.1",
+                "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99",
+                "aws/aws-sdk-php": ">=3,<3.2.1",
+                "bugsnag/bugsnag-laravel": ">=2,<2.0.2",
+                "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4|>=3.4,<3.4.14|>=3.5,<3.5.17|>=3.6,<3.6.4",
+                "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
+                "cartalyst/sentry": "<=2.1.6",
+                "codeigniter/framework": "<=3.0.6",
+                "composer/composer": "<=1.0.0-alpha11",
+                "contao-components/mediaelement": ">=2.14.2,<2.21.1",
+                "contao/core": ">=2,<3.5.35",
+                "contao/core-bundle": ">=4,<4.4.18|>=4.5,<4.5.8",
+                "contao/listing-bundle": ">=4,<4.4.8",
+                "contao/newsletter-bundle": ">=4,<4.1",
+                "doctrine/annotations": ">=1,<1.2.7",
+                "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
+                "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1",
+                "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2",
+                "doctrine/doctrine-bundle": "<1.5.2",
+                "doctrine/doctrine-module": "<=0.7.1",
+                "doctrine/mongodb-odm": ">=1,<1.0.2",
+                "doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
+                "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1",
+                "dompdf/dompdf": ">=0.6,<0.6.2",
+                "drupal/core": ">=7,<7.59|>=8,<8.4.8|>=8.5,<8.5.3",
+                "drupal/drupal": ">=7,<7.59|>=8,<8.4.8|>=8.5,<8.5.3",
+                "erusev/parsedown": "<1.7",
+                "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.3|>=5.4,<5.4.11.3|>=2017.8,<2017.8.1.1|>=2017.12,<2017.12.2.1",
+                "firebase/php-jwt": "<2",
+                "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2",
+                "friendsofsymfony/user-bundle": ">=1.2,<1.3.5",
+                "fuel/core": "<1.8.1",
+                "gree/jose": "<=2.2",
+                "gregwar/rst": "<1.0.3",
+                "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1",
+                "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10",
+                "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29",
+                "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
+                "joomla/session": "<1.3.1",
+                "kreait/firebase-php": ">=3.2,<3.8.1",
+                "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
+                "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10",
+                "magento/magento1ce": ">=1.5.0.1,<1.9.3.2",
+                "magento/magento1ee": ">=1.9,<1.14.3.2",
+                "magento/magento2ce": ">=2,<2.2",
+                "monolog/monolog": ">=1.8,<1.12",
+                "namshi/jose": "<2.2",
+                "onelogin/php-saml": "<2.10.4",
+                "oro/crm": ">=1.7,<1.7.4",
+                "oro/platform": ">=1.7,<1.7.4",
+                "padraic/humbug_get_contents": "<1.1.2",
+                "pagarme/pagarme-php": ">=0,<3",
+                "paragonie/random_compat": "<2",
+                "paypal/merchant-sdk-php": "<3.12",
+                "phpmailer/phpmailer": ">=5,<5.2.24",
+                "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3",
+                "phpxmlrpc/extras": "<0.6.1",
+                "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7",
+                "propel/propel1": ">=1,<=1.7.1",
+                "pusher/pusher-php-server": "<2.2.1",
+                "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9",
+                "shopware/shopware": "<5.3.7",
+                "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11",
+                "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
+                "silverstripe/framework": ">=3,<3.3",
+                "silverstripe/userforms": "<3",
+                "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4",
+                "simplesamlphp/simplesamlphp": "<1.15.2",
+                "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1",
+                "slim/slim": "<2.6",
+                "socalnick/scn-social-auth": "<1.15.2",
+                "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1",
+                "stormpath/sdk": ">=0,<9.9.99",
+                "swiftmailer/swiftmailer": ">=4,<5.4.5",
+                "symfony/dependency-injection": ">=2,<2.0.17",
+                "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
+                "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2",
+                "symfony/http-foundation": ">=2,<2.3.27|>=2.4,<2.5.11|>=2.6,<2.6.6",
+                "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8",
+                "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
+                "symfony/routing": ">=2,<2.0.19",
+                "symfony/security": ">=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9|>=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
+                "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.6|>=2.8.23,<2.8.25|>=3,<3.0.6|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
+                "symfony/security-csrf": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
+                "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
+                "symfony/serializer": ">=2,<2.0.11",
+                "symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
+                "symfony/translation": ">=2,<2.0.17",
+                "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
+                "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
+                "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7",
+                "thelia/backoffice-default-template": ">=2.1,<2.1.2",
+                "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2",
+                "titon/framework": ">=0,<9.9.99",
+                "twig/twig": "<1.20",
+                "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.22|>=8,<8.7.5",
+                "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5",
+                "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4",
+                "willdurand/js-translation-bundle": "<2.1.1",
+                "yiisoft/yii": ">=1.1.14,<1.1.15",
+                "yiisoft/yii2": "<2.0.15",
+                "yiisoft/yii2-bootstrap": "<2.0.4",
+                "yiisoft/yii2-dev": "<2.0.15",
+                "yiisoft/yii2-elasticsearch": "<2.0.5",
+                "yiisoft/yii2-gii": "<2.0.4",
+                "yiisoft/yii2-jui": "<2.0.4",
+                "yiisoft/yii2-redis": "<2.0.8",
+                "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3",
+                "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2",
+                "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2",
+                "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5",
+                "zendframework/zend-diactoros": ">=1,<1.0.4",
+                "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1",
+                "zendframework/zend-http": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.3,<2.3.8|>=2.4,<2.4.1",
+                "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6",
+                "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3",
+                "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2",
+                "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1",
+                "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4",
+                "zendframework/zend-validator": ">=2.3,<2.3.6",
+                "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1",
+                "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6",
+                "zendframework/zendframework": ">=2,<2.4.11|>=2.5,<2.5.1",
+                "zendframework/zendframework1": "<1.12.20",
+                "zendframework/zendopenid": ">=2,<2.0.2",
+                "zendframework/zendxml": ">=1,<1.0.1",
+                "zetacomponents/mail": "<1.8.2",
+                "zf-commons/zfc-user": "<1.2.2",
+                "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3",
+                "zfr/zfr-oauth2-server-module": "<0.1.2"
+            },
+            "type": "metapackage",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "role": "maintainer"
+                }
+            ],
+            "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
+            "time": "2018-05-21T07:43:38+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "1.0.6",
+            "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
                 "shasum": ""
             },
-            "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpspec/prophecy": "^1.3.1",
-                "phpunit/php-code-coverage": "~2.1",
-                "phpunit/php-file-iterator": "~1.4",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": "^1.0.6",
-                "phpunit/phpunit-mock-objects": "~2.3",
-                "sebastian/comparator": "~1.2.2",
-                "sebastian/diff": "~1.2",
-                "sebastian/environment": "~1.3",
-                "sebastian/exporter": "~1.2",
-                "sebastian/global-state": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.1|~3.0"
-            },
-            "suggest": {
-                "phpunit/php-invoker": "~1.1"
-            },
-            "bin": [
-                "phpunit"
-            ],
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.8.x-dev"
-                }
-            },
             "autoload": {
                 "classmap": [
                     "src/"
                     "role": "lead"
                 }
             ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2017-06-21T08:07:12+00:00"
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2015-06-21T13:59:46+00:00"
         },
         {
-            "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.8",
+            "name": "stack/builder",
+            "version": "v1.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+                "url": "https://github.com/stackphp/builder.git",
+                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2",
-                "sebastian/exporter": "~1.2"
+                "php": ">=5.3.0",
+                "symfony/http-foundation": "~2.1|~3.0|~4.0",
+                "symfony/http-kernel": "~2.1|~3.0|~4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "suggest": {
-                "ext-soap": "*"
+                "silex/silex": "~1.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.3.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-0": {
+                    "Stack": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
                 }
             ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "description": "Builder for stack middlewares based on HttpKernelInterface.",
             "keywords": [
-                "mock",
-                "xunit"
+                "stack"
             ],
-            "time": "2015-10-02T06:51:40+00:00"
+            "time": "2017-11-18T14:57:29+00:00"
         },
         {
-            "name": "psr/container",
-            "version": "1.0.0",
+            "name": "stecman/symfony-console-completion",
+            "version": "0.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+                "url": "https://github.com/stecman/symfony-console-completion.git",
+                "reference": "cd738867503477e91dbe84173dfabd431c883431"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
-                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/cd738867503477e91dbe84173dfabd431c883431",
+                "reference": "cd738867503477e91dbe84173dfabd431c883431",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": ">=5.3.2",
+                "symfony/console": "~2.3 || ~3.0 || ~4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "0.6.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Container\\": "src/"
+                    "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Stephen Holdaway",
+                    "email": "stephen@stecman.co.nz"
                 }
             ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
+            "description": "Automatic BASH completion for Symfony Console Component based applications.",
+            "time": "2018-02-10T04:28:01+00:00"
+        },
+        {
+            "name": "sunra/php-simple-html-dom-parser",
+            "version": "v1.5.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sunra/php-simple-html-dom-parser.git",
+                "reference": "75b9b1cb64502d8f8c04dc11b5906b969af247c6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sunra/php-simple-html-dom-parser/zipball/75b9b1cb64502d8f8c04dc11b5906b969af247c6",
+                "reference": "75b9b1cb64502d8f8c04dc11b5906b969af247c6",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Sunra\\PhpSimple\\HtmlDomParser": "Src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sunra",
+                    "email": "sunra@yandex.ru",
+                    "homepage": "https://github.com/sunra"
+                },
+                {
+                    "name": "S.C. Chen",
+                    "homepage": "http://sourceforge.net/projects/simplehtmldom/"
+                }
+            ],
+            "description": "Composer adaptation of: A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way! Require PHP 5+. Supports invalid HTML. Find tags on an HTML page with selectors just like jQuery. Extract contents from HTML in a single line.",
+            "homepage": "https://github.com/sunra/php-simple-html-dom-parser",
             "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
+                "dom",
+                "html",
+                "parser"
             ],
-            "time": "2017-02-14T16:28:37+00:00"
+            "time": "2016-11-22T22:57:47+00:00"
         },
         {
-            "name": "psr/http-message",
-            "version": "1.0.1",
+            "name": "symfony-cmf/routing",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+                "url": "https://github.com/symfony-cmf/routing.git",
+                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^5.3.9|^7.0",
+                "psr/log": "1.*",
+                "symfony/http-kernel": "^2.2|3.*",
+                "symfony/routing": "^2.2|3.*"
+            },
+            "require-dev": {
+                "friendsofsymfony/jsrouting-bundle": "^1.1",
+                "symfony-cmf/testing": "^1.3",
+                "symfony/config": "^2.2|3.*",
+                "symfony/dependency-injection": "^2.0.5|3.*",
+                "symfony/event-dispatcher": "^2.1|3.*"
+            },
+            "suggest": {
+                "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
+                    "Symfony\\Cmf\\Component\\Routing\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Symfony CMF Community",
+                    "homepage": "https://github.com/symfony-cmf/Routing/contributors"
                 }
             ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
+            "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
+            "homepage": "http://cmf.symfony.com",
             "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
+                "database",
+                "routing"
             ],
-            "time": "2016-08-06T14:39:51+00:00"
+            "time": "2017-05-09T08:10:41+00:00"
         },
         {
-            "name": "psr/log",
-            "version": "1.0.2",
+            "name": "symfony/class-loader",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+                "url": "https://github.com/symfony/class-loader.git",
+                "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "url": "https://api.github.com/repos/symfony/class-loader/zipball/e63c12699822bb3b667e7216ba07fbcc3a3e203e",
+                "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^5.5.9|>=7.0.8"
+            },
+            "require-dev": {
+                "symfony/finder": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-apcu": "~1.1"
+            },
+            "suggest": {
+                "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
+                    "Symfony\\Component\\ClassLoader\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2016-10-10T12:19:37+00:00"
+            "description": "Symfony ClassLoader Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-01-03T07:37:34+00:00"
         },
         {
-            "name": "psy/psysh",
-            "version": "v0.9.3",
+            "name": "symfony/config",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "79c280013cf0b30fa23f3ba8bd3649218075adf4"
+                "url": "https://github.com/symfony/config.git",
+                "reference": "73e055cf2e6467715f187724a0347ea32079967c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/79c280013cf0b30fa23f3ba8bd3649218075adf4",
-                "reference": "79c280013cf0b30fa23f3ba8bd3649218075adf4",
+                "url": "https://api.github.com/repos/symfony/config/zipball/73e055cf2e6467715f187724a0347ea32079967c",
+                "reference": "73e055cf2e6467715f187724a0347ea32079967c",
                 "shasum": ""
             },
             "require": {
-                "dnoegel/php-xdg-base-dir": "0.1",
-                "jakub-onderka/php-console-highlighter": "0.3.*",
-                "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-                "php": ">=5.4.0",
-                "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-                "symfony/var-dumper": "~2.7|~3.0|~4.0"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3",
+                "symfony/finder": "<3.3"
             },
             "require-dev": {
-                "hoa/console": "~2.15|~3.16",
-                "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0",
-                "symfony/finder": "~2.1|~3.0|~4.0"
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/event-dispatcher": "~3.3|~4.0",
+                "symfony/finder": "~3.3|~4.0",
+                "symfony/yaml": "~3.0|~4.0"
             },
             "suggest": {
-                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
-                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
-                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
-                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
-                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+                "symfony/yaml": "To use the yaml reference dumper"
             },
-            "bin": [
-                "bin/psysh"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-develop": "0.9.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
                 "psr-4": {
-                    "Psy\\": "src/"
-                }
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Justin Hileman",
-                    "email": "justin@justinhileman.info",
-                    "homepage": "http://justinhileman.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "An interactive shell for modern PHP.",
-            "homepage": "http://psysh.org",
-            "keywords": [
-                "REPL",
-                "console",
-                "interactive",
-                "shell"
-            ],
-            "time": "2018-04-18T12:32:50+00:00"
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-14T16:49:53+00:00"
         },
         {
-            "name": "roave/security-advisories",
-            "version": "dev-master",
+            "name": "symfony/console",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Roave/SecurityAdvisories.git",
-                "reference": "79ef6566b9c7fe6c1b6f6d12e5729d5cb545ac69"
+                "url": "https://github.com/symfony/console.git",
+                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/79ef6566b9c7fe6c1b6f6d12e5729d5cb545ac69",
-                "reference": "79ef6566b9c7fe6c1b6f6d12e5729d5cb545ac69",
+                "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27",
+                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27",
                 "shasum": ""
             },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/debug": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
             "conflict": {
-                "3f/pygmentize": "<1.2",
-                "adodb/adodb-php": "<5.20.12",
-                "amphp/artax": "<1.0.6|>=2,<2.0.6",
-                "amphp/http": "<1.0.1",
-                "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99",
-                "aws/aws-sdk-php": ">=3,<3.2.1",
-                "bugsnag/bugsnag-laravel": ">=2,<2.0.2",
-                "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4|>=3.4,<3.4.14|>=3.5,<3.5.17|>=3.6,<3.6.4",
-                "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
-                "cartalyst/sentry": "<=2.1.6",
-                "codeigniter/framework": "<=3.0.6",
-                "composer/composer": "<=1.0.0-alpha11",
-                "contao-components/mediaelement": ">=2.14.2,<2.21.1",
-                "contao/core": ">=2,<3.5.35",
-                "contao/core-bundle": ">=4,<4.4.18|>=4.5,<4.5.8",
-                "contao/listing-bundle": ">=4,<4.4.8",
-                "contao/newsletter-bundle": ">=4,<4.1",
-                "doctrine/annotations": ">=1,<1.2.7",
-                "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
-                "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1",
-                "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2",
-                "doctrine/doctrine-bundle": "<1.5.2",
-                "doctrine/doctrine-module": "<=0.7.1",
-                "doctrine/mongodb-odm": ">=1,<1.0.2",
-                "doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
-                "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1",
-                "dompdf/dompdf": ">=0.6,<0.6.2",
-                "drupal/core": ">=7,<7.59|>=8,<8.4.8|>=8.5,<8.5.3",
-                "drupal/drupal": ">=7,<7.59|>=8,<8.4.8|>=8.5,<8.5.3",
-                "erusev/parsedown": "<1.7",
-                "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.3|>=5.4,<5.4.11.3|>=2017.8,<2017.8.1.1|>=2017.12,<2017.12.2.1",
-                "firebase/php-jwt": "<2",
-                "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2",
-                "friendsofsymfony/user-bundle": ">=1.2,<1.3.5",
-                "fuel/core": "<1.8.1",
-                "gree/jose": "<=2.2",
-                "gregwar/rst": "<1.0.3",
-                "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1",
-                "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10",
-                "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29",
-                "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
-                "joomla/session": "<1.3.1",
-                "kreait/firebase-php": ">=3.2,<3.8.1",
-                "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
-                "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10",
-                "magento/magento1ce": ">=1.5.0.1,<1.9.3.2",
-                "magento/magento1ee": ">=1.9,<1.14.3.2",
-                "magento/magento2ce": ">=2,<2.2",
-                "monolog/monolog": ">=1.8,<1.12",
-                "namshi/jose": "<2.2",
-                "onelogin/php-saml": "<2.10.4",
-                "oro/crm": ">=1.7,<1.7.4",
-                "oro/platform": ">=1.7,<1.7.4",
-                "padraic/humbug_get_contents": "<1.1.2",
-                "pagarme/pagarme-php": ">=0,<3",
-                "paragonie/random_compat": "<2",
-                "paypal/merchant-sdk-php": "<3.12",
-                "phpmailer/phpmailer": ">=5,<5.2.24",
-                "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3",
-                "phpxmlrpc/extras": "<0.6.1",
-                "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7",
-                "propel/propel1": ">=1,<=1.7.1",
-                "pusher/pusher-php-server": "<2.2.1",
-                "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9",
-                "shopware/shopware": "<5.3.7",
-                "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11",
-                "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
-                "silverstripe/framework": ">=3,<3.3",
-                "silverstripe/userforms": "<3",
-                "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4",
-                "simplesamlphp/simplesamlphp": "<1.15.2",
-                "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1",
-                "slim/slim": "<2.6",
-                "socalnick/scn-social-auth": "<1.15.2",
-                "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1",
-                "stormpath/sdk": ">=0,<9.9.99",
-                "swiftmailer/swiftmailer": ">=4,<5.4.5",
-                "symfony/dependency-injection": ">=2,<2.0.17",
-                "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
-                "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2",
-                "symfony/http-foundation": ">=2,<2.3.27|>=2.4,<2.5.11|>=2.6,<2.6.6",
-                "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8",
-                "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
-                "symfony/routing": ">=2,<2.0.19",
-                "symfony/security": ">=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9|>=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
-                "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.6|>=2.8.23,<2.8.25|>=3,<3.0.6|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
-                "symfony/security-csrf": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
-                "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
-                "symfony/serializer": ">=2,<2.0.11",
-                "symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
-                "symfony/translation": ">=2,<2.0.17",
-                "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
-                "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
-                "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7",
-                "thelia/backoffice-default-template": ">=2.1,<2.1.2",
-                "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2",
-                "titon/framework": ">=0,<9.9.99",
-                "twig/twig": "<1.20",
-                "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.22|>=8,<8.7.5",
-                "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5",
-                "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4",
-                "willdurand/js-translation-bundle": "<2.1.1",
-                "yiisoft/yii": ">=1.1.14,<1.1.15",
-                "yiisoft/yii2": "<2.0.15",
-                "yiisoft/yii2-bootstrap": "<2.0.4",
-                "yiisoft/yii2-dev": "<2.0.15",
-                "yiisoft/yii2-elasticsearch": "<2.0.5",
-                "yiisoft/yii2-gii": "<2.0.4",
-                "yiisoft/yii2-jui": "<2.0.4",
-                "yiisoft/yii2-redis": "<2.0.8",
-                "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3",
-                "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2",
-                "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2",
-                "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5",
-                "zendframework/zend-diactoros": ">=1,<1.0.4",
-                "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1",
-                "zendframework/zend-http": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.3,<2.3.8|>=2.4,<2.4.1",
-                "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6",
-                "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3",
-                "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2",
-                "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1",
-                "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4",
-                "zendframework/zend-validator": ">=2.3,<2.3.6",
-                "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1",
-                "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6",
-                "zendframework/zendframework": ">=2,<2.4.11|>=2.5,<2.5.1",
-                "zendframework/zendframework1": "<1.12.20",
-                "zendframework/zendopenid": ">=2,<2.0.2",
-                "zendframework/zendxml": ">=1,<1.0.1",
-                "zetacomponents/mail": "<1.8.2",
-                "zf-commons/zfc-user": "<1.2.2",
-                "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3",
-                "zfr/zfr-oauth2-server-module": "<0.1.2"
+                "symfony/dependency-injection": "<3.4",
+                "symfony/process": "<3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~3.3|~4.0",
+                "symfony/dependency-injection": "~3.4|~4.0",
+                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+                "symfony/lock": "~3.4|~4.0",
+                "symfony/process": "~3.3|~4.0"
+            },
+            "suggest": {
+                "psr/log-implementation": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "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 Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-16T08:49:21+00:00"
+        },
+        {
+            "name": "symfony/css-selector",
+            "version": "v2.8.40",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/css-selector.git",
+                "reference": "3cdc270724e4666006118283c700a4d7f9cbe264"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/3cdc270724e4666006118283c700a4d7f9cbe264",
+                "reference": "3cdc270724e4666006118283c700a4d7f9cbe264",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\CssSelector\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "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"
+                }
+            ],
+            "description": "Symfony CssSelector Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-03-10T18:19:36+00:00"
+        },
+        {
+            "name": "symfony/debug",
+            "version": "v3.4.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/debug.git",
+                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
+                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "psr/log": "~1.0"
+            },
+            "conflict": {
+                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+            },
+            "require-dev": {
+                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Debug\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
-            "type": "metapackage",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
                 {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "role": "maintainer"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
-            "time": "2018-05-21T07:43:38+00:00"
+            "description": "Symfony Debug Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-16T14:03:39+00:00"
         },
         {
-            "name": "sebastian/comparator",
-            "version": "1.2.4",
+            "name": "symfony/dependency-injection",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+                "url": "https://github.com/symfony/dependency-injection.git",
+                "reference": "c2741b26377804e3d70775a3ef29335685ee9b71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
-                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c2741b26377804e3d70775a3ef29335685ee9b71",
+                "reference": "c2741b26377804e3d70775a3ef29335685ee9b71",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "sebastian/diff": "~1.2",
-                "sebastian/exporter": "~1.2 || ~2.0"
+                "php": "^5.5.9|>=7.0.8",
+                "psr/container": "^1.0"
+            },
+            "conflict": {
+                "symfony/config": "<3.3.7",
+                "symfony/finder": "<3.3",
+                "symfony/proxy-manager-bridge": "<3.4",
+                "symfony/yaml": "<3.4"
+            },
+            "provide": {
+                "psr/container-implementation": "1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "symfony/config": "~3.3|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/yaml": "~3.4|~4.0"
+            },
+            "suggest": {
+                "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.2.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\DependencyInjection\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "http://www.github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2017-01-29T09:50:25+00:00"
+            "description": "Symfony DependencyInjection Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-18T01:58:36+00:00"
         },
         {
-            "name": "sebastian/diff",
-            "version": "1.4.3",
+            "name": "symfony/dom-crawler",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+                "url": "https://github.com/symfony/dom-crawler.git",
+                "reference": "201b210fafcdd193c1e45b2994bf7133fb6263e8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
-                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/201b210fafcdd193c1e45b2994bf7133fb6263e8",
+                "reference": "201b210fafcdd193c1e45b2994bf7133fb6263e8",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+                "symfony/css-selector": "~2.8|~3.0|~4.0"
+            },
+            "suggest": {
+                "symfony/css-selector": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\DomCrawler\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
-            ],
-            "time": "2017-05-22T07:24:03+00:00"
+            "description": "Symfony DomCrawler Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-01T22:53:27+00:00"
         },
         {
-            "name": "sebastian/environment",
-            "version": "1.3.8",
+            "name": "symfony/event-dispatcher",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8",
+                "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.5.9|>=7.0.8"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8 || ^5.0"
+                "psr/log": "~1.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/stopwatch": "~2.8|~3.0|~4.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2016-08-18T05:49:44+00:00"
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-04-06T07:35:25+00:00"
         },
         {
-            "name": "sebastian/exporter",
-            "version": "1.2.2",
+            "name": "symfony/filesystem",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
+                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "sebastian/recursion-context": "~1.0"
-            },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "~4.4"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2016-06-17T09:04:28+00:00"
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-16T08:49:21+00:00"
         },
         {
-            "name": "sebastian/global-state",
-            "version": "1.1.1",
+            "name": "symfony/finder",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
+                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "suggest": {
-                "ext-uopz": "*"
+                "php": "^5.5.9|>=7.0.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "time": "2015-10-12T03:26:01+00:00"
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-16T08:49:21+00:00"
         },
         {
-            "name": "sebastian/recursion-context",
-            "version": "1.0.5",
+            "name": "symfony/http-foundation",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
+                "url": "https://github.com/symfony/http-foundation.git",
+                "reference": "9a7469ec3e0225e7f0e14264bcd9e838e16186fe"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a7469ec3e0225e7f0e14264bcd9e838e16186fe",
+                "reference": "9a7469ec3e0225e7f0e14264bcd9e838e16186fe",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-mbstring": "~1.1",
+                "symfony/polyfill-php70": "~1.6"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "symfony/expression-language": "~2.8|~3.0|~4.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\HttpFoundation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2016-10-03T07:41:43+00:00"
+            "description": "Symfony HttpFoundation Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-16T08:49:21+00:00"
         },
         {
-            "name": "sebastian/version",
-            "version": "1.0.6",
+            "name": "symfony/http-kernel",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+                "url": "https://github.com/symfony/http-kernel.git",
+                "reference": "66644bc7d17cc071d796efab9b950adbb86da134"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/66644bc7d17cc071d796efab9b950adbb86da134",
+                "reference": "66644bc7d17cc071d796efab9b950adbb86da134",
                 "shasum": ""
             },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "psr/log": "~1.0",
+                "symfony/debug": "~2.8|~3.0|~4.0",
+                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+                "symfony/http-foundation": "^3.4.4|^4.0.4",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/config": "<2.8",
+                "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4",
+                "symfony/var-dumper": "<3.3",
+                "twig/twig": "<1.34|<2.4,>=2"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/cache": "~1.0",
+                "symfony/browser-kit": "~2.8|~3.0|~4.0",
+                "symfony/class-loader": "~2.8|~3.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/console": "~2.8|~3.0|~4.0",
+                "symfony/css-selector": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "^3.4.5|^4.0.5",
+                "symfony/dom-crawler": "~2.8|~3.0|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/finder": "~2.8|~3.0|~4.0",
+                "symfony/process": "~2.8|~3.0|~4.0",
+                "symfony/routing": "~3.4|~4.0",
+                "symfony/stopwatch": "~2.8|~3.0|~4.0",
+                "symfony/templating": "~2.8|~3.0|~4.0",
+                "symfony/translation": "~2.8|~3.0|~4.0",
+                "symfony/var-dumper": "~3.3|~4.0"
+            },
+            "suggest": {
+                "symfony/browser-kit": "",
+                "symfony/config": "",
+                "symfony/console": "",
+                "symfony/dependency-injection": "",
+                "symfony/finder": "",
+                "symfony/var-dumper": ""
+            },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\HttpKernel\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21T13:59:46+00:00"
+            "description": "Symfony HttpKernel Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-05-21T13:44:03+00:00"
         },
         {
-            "name": "stack/builder",
-            "version": "v1.0.5",
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/stackphp/builder.git",
-                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a"
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
-                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
+                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0",
-                "symfony/http-foundation": "~2.1|~3.0|~4.0",
-                "symfony/http-kernel": "~2.1|~3.0|~4.0"
-            },
-            "require-dev": {
-                "silex/silex": "~1.0"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Stack": "src"
-                }
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                },
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
                 }
             ],
-            "description": "Builder for stack middlewares based on HttpKernelInterface.",
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "stack"
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
             ],
-            "time": "2017-11-18T14:57:29+00:00"
+            "time": "2018-04-30T19:57:29+00:00"
         },
         {
-            "name": "stecman/symfony-console-completion",
-            "version": "0.8.0",
+            "name": "symfony/polyfill-iconv",
+            "version": "v1.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/stecman/symfony-console-completion.git",
-                "reference": "cd738867503477e91dbe84173dfabd431c883431"
+                "url": "https://github.com/symfony/polyfill-iconv.git",
+                "reference": "7cb8436a814d5b0fcf292810ee26f8b0cb47584d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/cd738867503477e91dbe84173dfabd431c883431",
-                "reference": "cd738867503477e91dbe84173dfabd431c883431",
+                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/7cb8436a814d5b0fcf292810ee26f8b0cb47584d",
+                "reference": "7cb8436a814d5b0fcf292810ee26f8b0cb47584d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2",
-                "symfony/console": "~2.3 || ~3.0 || ~4.0"
+                "php": ">=5.3.3"
             },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
+            "suggest": {
+                "ext-iconv": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.6.x-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
-                }
+                    "Symfony\\Polyfill\\Iconv\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Stephen Holdaway",
-                    "email": "stephen@stecman.co.nz"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Automatic BASH completion for Symfony Console Component based applications.",
-            "time": "2018-02-10T04:28:01+00:00"
+            "description": "Symfony polyfill for the Iconv extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "iconv",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2018-04-26T10:06:28+00:00"
         },
         {
-            "name": "sunra/php-simple-html-dom-parser",
-            "version": "v1.5.2",
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sunra/php-simple-html-dom-parser.git",
-                "reference": "75b9b1cb64502d8f8c04dc11b5906b969af247c6"
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sunra/php-simple-html-dom-parser/zipball/75b9b1cb64502d8f8c04dc11b5906b969af247c6",
-                "reference": "75b9b1cb64502d8f8c04dc11b5906b969af247c6",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
+                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
                 "shasum": ""
             },
             "require": {
-                "ext-mbstring": "*",
-                "php": ">=5.3.2"
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
             },
             "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Sunra\\PhpSimple\\HtmlDomParser": "Src/"
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.8-dev"
                 }
             },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sunra",
-                    "email": "sunra@yandex.ru",
-                    "homepage": "https://github.com/sunra"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "S.C. Chen",
-                    "homepage": "http://sourceforge.net/projects/simplehtmldom/"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Composer adaptation of: A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way! Require PHP 5+. Supports invalid HTML. Find tags on an HTML page with selectors just like jQuery. Extract contents from HTML in a single line.",
-            "homepage": "https://github.com/sunra/php-simple-html-dom-parser",
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "dom",
-                "html",
-                "parser"
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "time": "2016-11-22T22:57:47+00:00"
+            "time": "2018-04-26T10:06:28+00:00"
         },
         {
-            "name": "symfony-cmf/routing",
-            "version": "1.4.1",
+            "name": "symfony/polyfill-php70",
+            "version": "v1.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony-cmf/routing.git",
-                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
+                "url": "https://github.com/symfony/polyfill-php70.git",
+                "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
-                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+                "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
+                "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.9|^7.0",
-                "psr/log": "1.*",
-                "symfony/http-kernel": "^2.2|3.*",
-                "symfony/routing": "^2.2|3.*"
-            },
-            "require-dev": {
-                "friendsofsymfony/jsrouting-bundle": "^1.1",
-                "symfony-cmf/testing": "^1.3",
-                "symfony/config": "^2.2|3.*",
-                "symfony/dependency-injection": "^2.0.5|3.*",
-                "symfony/event-dispatcher": "^2.1|3.*"
-            },
-            "suggest": {
-                "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
+                "paragonie/random_compat": "~1.0|~2.0",
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Cmf\\Component\\Routing\\": ""
-                }
+                    "Symfony\\Polyfill\\Php70\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Symfony CMF Community",
-                    "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
-            "homepage": "http://cmf.symfony.com",
+            "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "database",
-                "routing"
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "time": "2017-05-09T08:10:41+00:00"
+            "time": "2018-04-26T10:06:28+00:00"
         },
         {
-            "name": "symfony/class-loader",
+            "name": "symfony/process",
             "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/class-loader.git",
-                "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e"
+                "url": "https://github.com/symfony/process.git",
+                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/class-loader/zipball/e63c12699822bb3b667e7216ba07fbcc3a3e203e",
-                "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187",
+                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.5.9|>=7.0.8"
             },
-            "require-dev": {
-                "symfony/finder": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-apcu": "~1.1"
-            },
-            "suggest": {
-                "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\ClassLoader\\": ""
+                    "Symfony\\Component\\Process\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony ClassLoader Component",
+            "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2018-01-03T07:37:34+00:00"
+            "time": "2018-05-16T08:49:21+00:00"
         },
         {
-            "name": "symfony/config",
-            "version": "v3.4.10",
+            "name": "symfony/psr-http-message-bridge",
+            "version": "v1.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/config.git",
-                "reference": "73e055cf2e6467715f187724a0347ea32079967c"
+                "url": "https://github.com/symfony/psr-http-message-bridge.git",
+                "reference": "c2b757934f2d9681a287e662efbc27c41fe8ef86"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/73e055cf2e6467715f187724a0347ea32079967c",
-                "reference": "73e055cf2e6467715f187724a0347ea32079967c",
+                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c2b757934f2d9681a287e662efbc27c41fe8ef86",
+                "reference": "c2b757934f2d9681a287e662efbc27c41fe8ef86",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/filesystem": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.3",
-                "symfony/finder": "<3.3"
+                "php": ">=5.3.3",
+                "psr/http-message": "~1.0",
+                "symfony/http-foundation": "~2.3|~3.0|~4.0"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/event-dispatcher": "~3.3|~4.0",
-                "symfony/finder": "~3.3|~4.0",
-                "symfony/yaml": "~3.0|~4.0"
+                "symfony/phpunit-bridge": "~3.2|4.0"
             },
             "suggest": {
-                "symfony/yaml": "To use the yaml reference dumper"
+                "psr/http-message-implementation": "To use the HttpFoundation factory",
+                "zendframework/zend-diactoros": "To use the Zend Diactoros factory"
             },
-            "type": "library",
+            "type": "symfony-bridge",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Config\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Bridge\\PsrHttpMessage\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 }
             ],
-            "description": "Symfony Config Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-14T16:49:53+00:00"
+            "description": "PSR HTTP message bridge",
+            "homepage": "http://symfony.com",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr-7"
+            ],
+            "time": "2017-12-19T00:31:44+00:00"
         },
         {
-            "name": "symfony/console",
+            "name": "symfony/routing",
             "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27"
+                "url": "https://github.com/symfony/routing.git",
+                "reference": "e382da877f5304aabc12ec3073eec430670c8296"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/e382da877f5304aabc12ec3073eec430670c8296",
+                "reference": "e382da877f5304aabc12ec3073eec430670c8296",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": "^5.5.9|>=7.0.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/config": "<3.3.1",
+                "symfony/dependency-injection": "<3.3",
+                "symfony/yaml": "<3.4"
             },
             "require-dev": {
+                "doctrine/annotations": "~1.0",
+                "doctrine/common": "~2.2",
                 "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/config": "^3.3.1|~4.0",
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/http-foundation": "~2.8|~3.0|~4.0",
+                "symfony/yaml": "~3.4|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
+                "doctrine/annotations": "For using the annotation loader",
+                "symfony/config": "For using the all-in-one router or any loader",
+                "symfony/dependency-injection": "For loading routes from a service",
+                "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": {
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
+                    "Symfony\\Component\\Routing\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Console Component",
+            "description": "Symfony Routing Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "keywords": [
+                "router",
+                "routing",
+                "uri",
+                "url"
+            ],
+            "time": "2018-05-16T12:49:49+00:00"
         },
         {
-            "name": "symfony/css-selector",
-            "version": "v2.8.40",
+            "name": "symfony/serializer",
+            "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/css-selector.git",
-                "reference": "3cdc270724e4666006118283c700a4d7f9cbe264"
+                "url": "https://github.com/symfony/serializer.git",
+                "reference": "2f3630bb2b855de2284798db34d3ac5734766575"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/3cdc270724e4666006118283c700a4d7f9cbe264",
-                "reference": "3cdc270724e4666006118283c700a4d7f9cbe264",
+                "url": "https://api.github.com/repos/symfony/serializer/zipball/2f3630bb2b855de2284798db34d3ac5734766575",
+                "reference": "2f3630bb2b855de2284798db34d3ac5734766575",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "phpdocumentor/type-resolver": "<0.2.1",
+                "symfony/dependency-injection": "<3.2",
+                "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4",
+                "symfony/property-info": "<3.1",
+                "symfony/yaml": "<3.4"
+            },
+            "require-dev": {
+                "doctrine/annotations": "~1.0",
+                "doctrine/cache": "~1.0",
+                "phpdocumentor/reflection-docblock": "^3.0|^4.0",
+                "symfony/cache": "~3.1|~4.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "~3.2|~4.0",
+                "symfony/http-foundation": "~2.8|~3.0|~4.0",
+                "symfony/property-access": "~2.8|~3.0|~4.0",
+                "symfony/property-info": "~3.1|~4.0",
+                "symfony/yaml": "~3.4|~4.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.",
+                "psr/cache-implementation": "For using the metadata cache.",
+                "symfony/config": "For using the XML mapping loader.",
+                "symfony/http-foundation": "To use the DataUriNormalizer.",
+                "symfony/property-access": "For using the ObjectNormalizer.",
+                "symfony/property-info": "To deserialize relations.",
+                "symfony/yaml": "For using the default YAML mapping loader."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\CssSelector\\": ""
+                    "Symfony\\Component\\Serializer\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony CssSelector Component",
+            "description": "Symfony Serializer Component",
             "homepage": "https://symfony.com",
-            "time": "2018-03-10T18:19:36+00:00"
+            "time": "2018-05-16T12:49:49+00:00"
         },
         {
-            "name": "symfony/debug",
+            "name": "symfony/translation",
             "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
+                "url": "https://github.com/symfony/translation.git",
+                "reference": "7047f725e35eab768137c677f8c38e4a2a8e38fb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/7047f725e35eab768137c677f8c38e4a2a8e38fb",
+                "reference": "7047f725e35eab768137c677f8c38e4a2a8e38fb",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
+                "symfony/polyfill-mbstring": "~1.0"
             },
             "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+                "symfony/config": "<2.8",
+                "symfony/dependency-injection": "<3.4",
+                "symfony/yaml": "<3.4"
             },
             "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+                "psr/log": "~1.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "~3.4|~4.0",
+                "symfony/finder": "~2.8|~3.0|~4.0",
+                "symfony/intl": "^2.8.18|^3.2.5|~4.0",
+                "symfony/yaml": "~3.4|~4.0"
+            },
+            "suggest": {
+                "psr/log-implementation": "To use logging capability in translator",
+                "symfony/config": "",
+                "symfony/yaml": ""
             },
             "type": "library",
             "extra": {
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+                    "Symfony\\Component\\Translation\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Debug Component",
+            "description": "Symfony Translation Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T14:03:39+00:00"
+            "time": "2018-05-21T10:06:52+00:00"
         },
         {
-            "name": "symfony/dependency-injection",
+            "name": "symfony/validator",
             "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "c2741b26377804e3d70775a3ef29335685ee9b71"
+                "url": "https://github.com/symfony/validator.git",
+                "reference": "62ccdf62042fbca3be1e7b2dae84965940023362"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c2741b26377804e3d70775a3ef29335685ee9b71",
-                "reference": "c2741b26377804e3d70775a3ef29335685ee9b71",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/62ccdf62042fbca3be1e7b2dae84965940023362",
+                "reference": "62ccdf62042fbca3be1e7b2dae84965940023362",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.5.9|>=7.0.8",
-                "psr/container": "^1.0"
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/translation": "~2.8|~3.0|~4.0"
             },
             "conflict": {
-                "symfony/config": "<3.3.7",
-                "symfony/finder": "<3.3",
-                "symfony/proxy-manager-bridge": "<3.4",
+                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+                "symfony/dependency-injection": "<3.3",
+                "symfony/http-kernel": "<3.3.5",
                 "symfony/yaml": "<3.4"
             },
-            "provide": {
-                "psr/container-implementation": "1.0"
-            },
             "require-dev": {
-                "symfony/config": "~3.3|~4.0",
+                "doctrine/annotations": "~1.0",
+                "doctrine/cache": "~1.0",
+                "egulias/email-validator": "^1.2.8|~2.0",
+                "symfony/cache": "~3.1|~4.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "~3.3|~4.0",
                 "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/http-foundation": "~2.8|~3.0|~4.0",
+                "symfony/http-kernel": "^3.3.5|~4.0",
+                "symfony/intl": "^2.8.18|^3.2.5|~4.0",
+                "symfony/property-access": "~2.8|~3.0|~4.0",
+                "symfony/var-dumper": "~3.3|~4.0",
                 "symfony/yaml": "~3.4|~4.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",
+                "psr/cache-implementation": "For using the metadata cache.",
                 "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/expression-language": "For using the Expression validator",
+                "symfony/http-foundation": "",
+                "symfony/intl": "",
+                "symfony/property-access": "For accessing properties within comparison constraints",
                 "symfony/yaml": ""
             },
             "type": "library",
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\DependencyInjection\\": ""
+                    "Symfony\\Component\\Validator\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony DependencyInjection Component",
+            "description": "Symfony Validator Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-18T01:58:36+00:00"
+            "time": "2018-05-18T02:00:55+00:00"
         },
         {
-            "name": "symfony/dom-crawler",
+            "name": "symfony/var-dumper",
             "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "201b210fafcdd193c1e45b2994bf7133fb6263e8"
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/201b210fafcdd193c1e45b2994bf7133fb6263e8",
-                "reference": "201b210fafcdd193c1e45b2994bf7133fb6263e8",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e6545672d8c9ce70dd472adc2f8b03155a46f73",
+                "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-mbstring": "~1.0"
             },
+            "conflict": {
+                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
+            },
             "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0"
+                "ext-iconv": "*",
+                "twig/twig": "~1.34|~2.4"
             },
             "suggest": {
-                "symfony/css-selector": ""
+                "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",
+                "ext-symfony_debug": ""
             },
             "type": "library",
             "extra": {
                 }
             },
             "autoload": {
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
                 "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                    "Symfony\\Component\\VarDumper\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
             ],
             "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 DomCrawler Component",
+            "description": "Symfony mechanism for exploring and dumping PHP variables",
             "homepage": "https://symfony.com",
-            "time": "2018-05-01T22:53:27+00:00"
+            "keywords": [
+                "debug",
+                "dump"
+            ],
+            "time": "2018-04-26T12:42:15+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
+            "name": "symfony/yaml",
             "version": "v3.4.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8"
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8",
-                "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
+                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.3"
+                "symfony/console": "<3.4"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/stopwatch": "~2.8|~3.0|~4.0"
+                "symfony/console": "~3.4|~4.0"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "symfony/console": "For validating YAML files using the lint command"
             },
             "type": "library",
             "extra": {
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
+                    "Symfony\\Component\\Yaml\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-04-06T07:35:25+00:00"
+            "time": "2018-05-03T23:18:14+00:00"
         },
         {
-            "name": "symfony/filesystem",
-            "version": "v3.4.10",
+            "name": "twbs/bootstrap-sass",
+            "version": "v3.3.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0"
+                "url": "https://github.com/twbs/bootstrap-sass.git",
+                "reference": "5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
+                "url": "https://api.github.com/repos/twbs/bootstrap-sass/zipball/5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47",
+                "reference": "5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47",
                 "shasum": ""
             },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "3.3.x-dev"
                 }
             },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Mark Otto"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Thomas McDonald"
+                },
+                {
+                    "name": "Tristan Harward"
+                },
+                {
+                    "name": "Peter Gumeson"
+                },
+                {
+                    "name": "Gleb Mazovetskiy"
+                },
+                {
+                    "name": "Jacob Thornton"
                 }
             ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "description": "bootstrap-sass is a Sass-powered version of Bootstrap 3, ready to drop right into your Sass powered applications.",
+            "homepage": "http://github.com/twbs/bootstrap-sass",
+            "keywords": [
+                "bootstrap",
+                "css",
+                "sass"
+            ],
+            "time": "2016-07-25T19:58:53+00:00"
         },
         {
-            "name": "symfony/finder",
-            "version": "v3.4.10",
+            "name": "twig/twig",
+            "version": "v1.35.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
+                "url": "https://github.com/twigphp/Twig.git",
+                "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
+                "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "psr/container": "^1.0",
+                "symfony/debug": "^2.7",
+                "symfony/phpunit-bridge": "^3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.35-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
+                "psr-0": {
+                    "Twig_": "lib/"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                "psr-4": {
+                    "Twig\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Armin Ronacher",
+                    "email": "armin.ronacher@active-4.com",
+                    "role": "Project Founder"
+                },
+                {
+                    "name": "Twig Team",
+                    "homepage": "http://twig.sensiolabs.org/contributors",
+                    "role": "Contributors"
                 }
             ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "description": "Twig, the flexible, fast, and secure template language for PHP",
+            "homepage": "http://twig.sensiolabs.org",
+            "keywords": [
+                "templating"
+            ],
+            "time": "2018-03-20T04:25:58+00:00"
         },
         {
-            "name": "symfony/http-foundation",
-            "version": "v3.4.10",
+            "name": "webflo/drupal-finder",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "9a7469ec3e0225e7f0e14264bcd9e838e16186fe"
+                "url": "https://github.com/webflo/drupal-finder.git",
+                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a7469ec3e0225e7f0e14264bcd9e838e16186fe",
-                "reference": "9a7469ec3e0225e7f0e14264bcd9e838e16186fe",
+                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
+                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
                 "shasum": ""
             },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-mbstring": "~1.1",
-                "symfony/polyfill-php70": "~1.6"
-            },
             "require-dev": {
-                "symfony/expression-language": "~2.8|~3.0|~4.0"
+                "mikey179/vfsstream": "^1.6",
+                "phpunit/phpunit": "^4.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\HttpFoundation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "classmap": [
+                    "src/DrupalFinder.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "GPL-2.0+"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Florian Weber",
+                    "email": "florian@webflo.org"
                 }
             ],
-            "description": "Symfony HttpFoundation Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "description": "Helper class to locate a Drupal installation from a given path.",
+            "time": "2017-10-24T08:12:11+00:00"
         },
         {
-            "name": "symfony/http-kernel",
-            "version": "v3.4.10",
+            "name": "webmozart/assert",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "66644bc7d17cc071d796efab9b950adbb86da134"
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/66644bc7d17cc071d796efab9b950adbb86da134",
-                "reference": "66644bc7d17cc071d796efab9b950adbb86da134",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
+                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/http-foundation": "^3.4.4|^4.0.4",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": "^5.3.3 || ^7.0"
             },
-            "conflict": {
-                "symfony/config": "<2.8",
-                "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4",
-                "symfony/var-dumper": "<3.3",
-                "twig/twig": "<1.34|<2.4,>=2"
+            "require-dev": {
+                "phpunit/phpunit": "^4.6",
+                "sebastian/version": "^1.0.1"
             },
-            "provide": {
-                "psr/log-implementation": "1.0"
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
             },
-            "require-dev": {
-                "psr/cache": "~1.0",
-                "symfony/browser-kit": "~2.8|~3.0|~4.0",
-                "symfony/class-loader": "~2.8|~3.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/console": "~2.8|~3.0|~4.0",
-                "symfony/css-selector": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "^3.4.5|^4.0.5",
-                "symfony/dom-crawler": "~2.8|~3.0|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/finder": "~2.8|~3.0|~4.0",
-                "symfony/process": "~2.8|~3.0|~4.0",
-                "symfony/routing": "~3.4|~4.0",
-                "symfony/stopwatch": "~2.8|~3.0|~4.0",
-                "symfony/templating": "~2.8|~3.0|~4.0",
-                "symfony/translation": "~2.8|~3.0|~4.0",
-                "symfony/var-dumper": "~3.3|~4.0"
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2018-01-29T19:49:41+00:00"
+        },
+        {
+            "name": "webmozart/path-util",
+            "version": "2.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/path-util.git",
+                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
             },
-            "suggest": {
-                "symfony/browser-kit": "",
-                "symfony/config": "",
-                "symfony/console": "",
-                "symfony/dependency-injection": "",
-                "symfony/finder": "",
-                "symfony/var-dumper": ""
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "webmozart/assert": "~1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6",
+                "sebastian/version": "^1.0.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "2.3-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\HttpKernel\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Webmozart\\PathUtil\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
-            "description": "Symfony HttpKernel Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-21T13:44:03+00:00"
+            "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
+            "time": "2015-12-17T08:42:14+00:00"
         },
         {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.8.0",
+            "name": "zendframework/zend-diactoros",
+            "version": "1.7.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
+                "url": "https://github.com/zendframework/zend-diactoros.git",
+                "reference": "bf26aff803a11c5cc8eb7c4878a702c403ec67f1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
+                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/bf26aff803a11c5cc8eb7c4878a702c403ec67f1",
+                "reference": "bf26aff803a11c5cc8eb7c4878a702c403ec67f1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": "^5.6 || ^7.0",
+                "psr/http-message": "^1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "phpunit/phpunit": "^5.7.16 || ^6.0.8",
+                "zendframework/zend-coding-standard": "~1.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "1.7.x-dev",
+                    "dev-develop": "1.8.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "Zend\\Diactoros\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                }
+                "BSD-2-Clause"
             ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
+            "description": "PSR HTTP Message implementations",
+            "homepage": "https://github.com/zendframework/zend-diactoros",
             "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
+                "http",
+                "psr",
+                "psr-7"
             ],
-            "time": "2018-04-30T19:57:29+00:00"
+            "time": "2018-02-26T15:44:50+00:00"
         },
         {
-            "name": "symfony/polyfill-iconv",
-            "version": "v1.8.0",
+            "name": "zendframework/zend-escaper",
+            "version": "2.6.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-iconv.git",
-                "reference": "7cb8436a814d5b0fcf292810ee26f8b0cb47584d"
+                "url": "https://github.com/zendframework/zend-escaper.git",
+                "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/7cb8436a814d5b0fcf292810ee26f8b0cb47584d",
-                "reference": "7cb8436a814d5b0fcf292810ee26f8b0cb47584d",
+                "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074",
+                "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": "^5.6 || ^7.0"
             },
-            "suggest": {
-                "ext-iconv": "For best performance"
+            "require-dev": {
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
+                "zendframework/zend-coding-standard": "~1.0.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "2.6.x-dev",
+                    "dev-develop": "2.7.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Iconv\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "Zend\\Escaper\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony polyfill for the Iconv extension",
-            "homepage": "https://symfony.com",
+            "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
             "keywords": [
-                "compatibility",
-                "iconv",
-                "polyfill",
-                "portable",
-                "shim"
+                "ZendFramework",
+                "escaper",
+                "zf"
             ],
-            "time": "2018-04-26T10:06:28+00:00"
+            "time": "2018-04-25T15:48:53+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
+            "name": "zendframework/zend-feed",
+            "version": "2.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
+                "url": "https://github.com/zendframework/zend-feed.git",
+                "reference": "15a6ca78dd8f67b687e4f902657b4e420a8fd1e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
+                "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/15a6ca78dd8f67b687e4f902657b4e420a8fd1e0",
+                "reference": "15a6ca78dd8f67b687e4f902657b4e420a8fd1e0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": "^5.6 || ^7.0",
+                "zendframework/zend-escaper": "^2.5.2",
+                "zendframework/zend-stdlib": "^2.7.7 || ^3.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
+                "psr/http-message": "^1.0.1",
+                "zendframework/zend-cache": "^2.7.2",
+                "zendframework/zend-coding-standard": "~1.0.0",
+                "zendframework/zend-db": "^2.8.2",
+                "zendframework/zend-http": "^2.7",
+                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
+                "zendframework/zend-validator": "^2.10.1"
             },
             "suggest": {
-                "ext-mbstring": "For best performance"
+                "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Zend\\Feed\\Reader\\Http\\Psr7ResponseDecorator",
+                "zendframework/zend-cache": "Zend\\Cache component, for optionally caching feeds between requests",
+                "zendframework/zend-db": "Zend\\Db component, for use with PubSubHubbub",
+                "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for easily extending ExtensionManager implementations",
+                "zendframework/zend-validator": "Zend\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "2.9-dev",
+                    "dev-develop": "2.10-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "Zend\\Feed\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
+            "description": "provides functionality for consuming RSS and Atom feeds",
             "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
+                "ZendFramework",
+                "feed",
+                "zf"
             ],
-            "time": "2018-04-26T10:06:28+00:00"
+            "time": "2018-05-14T21:45:18+00:00"
         },
         {
-            "name": "symfony/polyfill-php70",
-            "version": "v1.8.0",
+            "name": "zendframework/zend-stdlib",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-php70.git",
-                "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
+                "url": "https://github.com/zendframework/zend-stdlib.git",
+                "reference": "cd164b4a18b5d1aeb69be2c26db035b5ed6925ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
-                "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
+                "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cd164b4a18b5d1aeb69be2c26db035b5ed6925ae",
+                "reference": "cd164b4a18b5d1aeb69be2c26db035b5ed6925ae",
                 "shasum": ""
             },
             "require": {
-                "paragonie/random_compat": "~1.0|~2.0",
-                "php": ">=5.3.3"
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpbench/phpbench": "^0.13",
+                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
+                "zendframework/zend-coding-standard": "~1.0.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "3.2.x-dev",
+                    "dev-develop": "3.3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php70\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ],
-                "classmap": [
-                    "Resources/stubs"
-                ]
+                    "Zend\\Stdlib\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
+                "BSD-3-Clause"
             ],
-            "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
+            "description": "SPL extensions, array utilities, error handlers, and more",
             "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
+                "ZendFramework",
+                "stdlib",
+                "zf"
             ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
+            "time": "2018-04-30T13:50:40+00:00"
+        }
+    ],
+    "packages-dev": [
         {
-            "name": "symfony/process",
-            "version": "v3.4.10",
+            "name": "ajgl/breakpoint-twig-extension",
+            "version": "0.3.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187"
+                "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git",
+                "reference": "0dfa4f0ae3bbeb6c8036e3e6d6c204c43b090155"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187",
+                "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/0dfa4f0ae3bbeb6c8036e3e6d6c204c43b090155",
+                "reference": "0dfa4f0ae3bbeb6c8036e3e6d6c204c43b090155",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=5.4.0",
+                "twig/twig": "^1.14"
+            },
+            "require-dev": {
+                "symfony/framework-bundle": "^2.3",
+                "symfony/twig-bundle": "^2.3"
+            },
+            "suggest": {
+                "ext-xdebug": "The Xdebug extension is required for the breakpoint to work",
+                "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony",
+                "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "0.4.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Ajgl\\Twig\\Extension\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Antonio J. García Lagar",
+                    "email": "aj@garcialagar.es",
+                    "homepage": "http://aj.garcialagar.es",
+                    "role": "developer"
                 }
             ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "description": "Twig extension to set breakpoints",
+            "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension",
+            "keywords": [
+                "Xdebug",
+                "breakpoint",
+                "twig"
+            ],
+            "time": "2016-03-31T18:09:32+00:00"
         },
         {
-            "name": "symfony/psr-http-message-bridge",
-            "version": "v1.0.2",
+            "name": "behat/mink",
+            "version": "v1.7.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/psr-http-message-bridge.git",
-                "reference": "c2b757934f2d9681a287e662efbc27c41fe8ef86"
+                "url": "https://github.com/minkphp/Mink.git",
+                "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c2b757934f2d9681a287e662efbc27c41fe8ef86",
-                "reference": "c2b757934f2d9681a287e662efbc27c41fe8ef86",
+                "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9",
+                "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "psr/http-message": "~1.0",
-                "symfony/http-foundation": "~2.3|~3.0|~4.0"
+                "php": ">=5.3.1",
+                "symfony/css-selector": "~2.1|~3.0"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "~3.2|4.0"
+                "symfony/phpunit-bridge": "~2.7|~3.0"
             },
             "suggest": {
-                "psr/http-message-implementation": "To use the HttpFoundation factory",
-                "zendframework/zend-diactoros": "To use the Zend Diactoros factory"
+                "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
+                "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
+                "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
+                "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
             },
-            "type": "symfony-bridge",
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "1.7.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Bridge\\PsrHttpMessage\\": ""
+                    "Behat\\Mink\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
                 }
             ],
-            "description": "PSR HTTP message bridge",
-            "homepage": "http://symfony.com",
+            "description": "Browser controller/emulator abstraction for PHP",
+            "homepage": "http://mink.behat.org/",
             "keywords": [
-                "http",
-                "http-message",
-                "psr-7"
+                "browser",
+                "testing",
+                "web"
             ],
-            "time": "2017-12-19T00:31:44+00:00"
+            "time": "2016-03-05T08:26:18+00:00"
         },
         {
-            "name": "symfony/routing",
-            "version": "v3.4.10",
+            "name": "behat/mink-browserkit-driver",
+            "version": "1.3.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/routing.git",
-                "reference": "e382da877f5304aabc12ec3073eec430670c8296"
+                "url": "https://github.com/minkphp/MinkBrowserKitDriver.git",
+                "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/e382da877f5304aabc12ec3073eec430670c8296",
-                "reference": "e382da877f5304aabc12ec3073eec430670c8296",
+                "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/1b9a7ce903cfdaaec5fb32bfdbb26118343662eb",
+                "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "conflict": {
-                "symfony/config": "<3.3.1",
-                "symfony/dependency-injection": "<3.3",
-                "symfony/yaml": "<3.4"
+                "behat/mink": "^1.7.1@dev",
+                "php": ">=5.3.6",
+                "symfony/browser-kit": "~2.3|~3.0|~4.0",
+                "symfony/dom-crawler": "~2.3|~3.0|~4.0"
             },
             "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "doctrine/common": "~2.2",
-                "psr/log": "~1.0",
-                "symfony/config": "^3.3.1|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/http-foundation": "~2.8|~3.0|~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/dependency-injection": "For loading routes from a service",
-                "symfony/expression-language": "For using expression matching",
-                "symfony/http-foundation": "For using a Symfony Request object",
-                "symfony/yaml": "For using the YAML loader"
+                "mink/driver-testsuite": "dev-master",
+                "symfony/http-kernel": "~2.3|~3.0|~4.0"
             },
-            "type": "library",
+            "type": "mink-driver",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Routing\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Behat\\Mink\\Driver\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
                 }
             ],
-            "description": "Symfony Routing Component",
-            "homepage": "https://symfony.com",
+            "description": "Symfony2 BrowserKit driver for Mink framework",
+            "homepage": "http://mink.behat.org/",
             "keywords": [
-                "router",
-                "routing",
-                "uri",
-                "url"
+                "Mink",
+                "Symfony2",
+                "browser",
+                "testing"
             ],
-            "time": "2018-05-16T12:49:49+00:00"
+            "time": "2018-05-02T09:25:31+00:00"
         },
         {
-            "name": "symfony/serializer",
-            "version": "v3.4.10",
+            "name": "behat/mink-goutte-driver",
+            "version": "v1.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/serializer.git",
-                "reference": "2f3630bb2b855de2284798db34d3ac5734766575"
+                "url": "https://github.com/minkphp/MinkGoutteDriver.git",
+                "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/serializer/zipball/2f3630bb2b855de2284798db34d3ac5734766575",
-                "reference": "2f3630bb2b855de2284798db34d3ac5734766575",
+                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/8b9ad6d2d95bc70b840d15323365f52fcdaea6ca",
+                "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "phpdocumentor/type-resolver": "<0.2.1",
-                "symfony/dependency-injection": "<3.2",
-                "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4",
-                "symfony/property-info": "<3.1",
-                "symfony/yaml": "<3.4"
+                "behat/mink": "~1.6@dev",
+                "behat/mink-browserkit-driver": "~1.2@dev",
+                "fabpot/goutte": "~1.0.4|~2.0|~3.1",
+                "php": ">=5.3.1"
             },
             "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "doctrine/cache": "~1.0",
-                "phpdocumentor/reflection-docblock": "^3.0|^4.0",
-                "symfony/cache": "~3.1|~4.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.2|~4.0",
-                "symfony/http-foundation": "~2.8|~3.0|~4.0",
-                "symfony/property-access": "~2.8|~3.0|~4.0",
-                "symfony/property-info": "~3.1|~4.0",
-                "symfony/yaml": "~3.4|~4.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.",
-                "psr/cache-implementation": "For using the metadata cache.",
-                "symfony/config": "For using the XML mapping loader.",
-                "symfony/http-foundation": "To use the DataUriNormalizer.",
-                "symfony/property-access": "For using the ObjectNormalizer.",
-                "symfony/property-info": "To deserialize relations.",
-                "symfony/yaml": "For using the default YAML mapping loader."
+                "symfony/phpunit-bridge": "~2.7|~3.0"
             },
-            "type": "library",
+            "type": "mink-driver",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Serializer\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Behat\\Mink\\Driver\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
                 }
             ],
-            "description": "Symfony Serializer Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T12:49:49+00:00"
+            "description": "Goutte driver for Mink framework",
+            "homepage": "http://mink.behat.org/",
+            "keywords": [
+                "browser",
+                "goutte",
+                "headless",
+                "testing"
+            ],
+            "time": "2016-03-05T09:04:22+00:00"
         },
         {
-            "name": "symfony/translation",
-            "version": "v3.4.10",
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/translation.git",
-                "reference": "7047f725e35eab768137c677f8c38e4a2a8e38fb"
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/7047f725e35eab768137c677f8c38e4a2a8e38fb",
-                "reference": "7047f725e35eab768137c677f8c38e4a2a8e38fb",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/config": "<2.8",
-                "symfony/dependency-injection": "<3.4",
-                "symfony/yaml": "<3.4"
+                "php": ">=5.3,<8.0-DEV"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/finder": "~2.8|~3.0|~4.0",
-                "symfony/intl": "^2.8.18|^3.2.5|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~2.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Translation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
                 }
             ],
-            "description": "Symfony Translation Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-21T10:06:52+00:00"
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2015-06-14T21:17:01+00:00"
         },
         {
-            "name": "symfony/validator",
-            "version": "v3.4.10",
+            "name": "drupal/livereload",
+            "version": "dev-1.x",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/validator.git",
-                "reference": "62ccdf62042fbca3be1e7b2dae84965940023362"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/62ccdf62042fbca3be1e7b2dae84965940023362",
-                "reference": "62ccdf62042fbca3be1e7b2dae84965940023362",
-                "shasum": ""
+                "url": "https://git.drupal.org/project/livereload",
+                "reference": "223feb798d2af436818c3d8fd0b47718569ebd4b"
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/translation": "~2.8|~3.0|~4.0"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
-                "symfony/dependency-injection": "<3.3",
-                "symfony/http-kernel": "<3.3.5",
-                "symfony/yaml": "<3.4"
-            },
-            "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "doctrine/cache": "~1.0",
-                "egulias/email-validator": "^1.2.8|~2.0",
-                "symfony/cache": "~3.1|~4.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/http-foundation": "~2.8|~3.0|~4.0",
-                "symfony/http-kernel": "^3.3.5|~4.0",
-                "symfony/intl": "^2.8.18|^3.2.5|~4.0",
-                "symfony/property-access": "~2.8|~3.0|~4.0",
-                "symfony/var-dumper": "~3.3|~4.0",
-                "symfony/yaml": "~3.4|~4.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",
-                "psr/cache-implementation": "For using the metadata cache.",
-                "symfony/config": "",
-                "symfony/expression-language": "For using the Expression validator",
-                "symfony/http-foundation": "",
-                "symfony/intl": "",
-                "symfony/property-access": "For accessing properties within comparison constraints",
-                "symfony/yaml": ""
+                "drupal/core": "~8.0"
             },
-            "type": "library",
+            "type": "drupal-module",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Validator\\": ""
+                    "dev-1.x": "1.x-dev"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                "drupal": {
+                    "version": "8.x-1.x-dev",
+                    "datestamp": "1474009739"
+                }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "https://packages.drupal.org/8/downloads",
             "license": [
-                "MIT"
+                "GPL-2.0+"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Hydra",
+                    "homepage": "https://www.drupal.org/user/647364"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "tim.plunkett",
+                    "homepage": "https://www.drupal.org/user/241634"
                 }
             ],
-            "description": "Symfony Validator Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-18T02:00:55+00:00"
+            "description": "Enables and enhances use of LiveReload during development.",
+            "homepage": "https://www.drupal.org/project/livereload",
+            "support": {
+                "source": "http://cgit.drupalcode.org/livereload"
+            }
         },
         {
-            "name": "symfony/var-dumper",
-            "version": "v3.4.10",
+            "name": "drupal/twig_xdebug",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73"
+                "url": "https://git.drupal.org/project/twig_xdebug",
+                "reference": "8.x-1.0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e6545672d8c9ce70dd472adc2f8b03155a46f73",
-                "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73",
-                "shasum": ""
+                "url": "https://ftp.drupal.org/files/projects/twig_xdebug-8.x-1.0.zip",
+                "reference": "8.x-1.0",
+                "shasum": "f8a5cfef63b427d6b6b428a2c4bd19b19d082037"
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
-            },
-            "require-dev": {
-                "ext-iconv": "*",
-                "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",
-                "ext-symfony_debug": ""
+                "ajgl/breakpoint-twig-extension": "0.3",
+                "drupal/core": "~8.0"
             },
-            "type": "library",
+            "type": "drupal-module",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "Resources/functions/dump.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\VarDumper\\": ""
+                    "dev-1.x": "1.x-dev"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                "drupal": {
+                    "version": "8.x-1.0",
+                    "datestamp": "1464928439"
+                }
             },
-            "notification-url": "https://packagist.org/downloads/",
+            "notification-url": "https://packages.drupal.org/8/downloads",
             "license": [
-                "MIT"
+                "GPL-2.0+"
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "charginghawk",
+                    "homepage": "https://www.drupal.org/user/2626341"
                 }
             ],
-            "description": "Symfony mechanism for exploring and dumping PHP variables",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "debug",
-                "dump"
-            ],
-            "time": "2018-04-26T12:42:15+00:00"
+            "description": "Enables Xdebug breakpoints in Twig.",
+            "homepage": "https://www.drupal.org/project/twig_xdebug",
+            "support": {
+                "source": "http://cgit.drupalcode.org/twig_xdebug"
+            }
         },
         {
-            "name": "symfony/yaml",
-            "version": "v3.4.10",
+            "name": "fabpot/goutte",
+            "version": "v3.2.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0"
+                "url": "https://github.com/FriendsOfPHP/Goutte.git",
+                "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
-                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
+                "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/395f61d7c2e15a813839769553a4de16fa3b3c96",
+                "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/console": "<3.4"
+                "guzzlehttp/guzzle": "^6.0",
+                "php": ">=5.5.0",
+                "symfony/browser-kit": "~2.1|~3.0|~4.0",
+                "symfony/css-selector": "~2.1|~3.0|~4.0",
+                "symfony/dom-crawler": "~2.1|~3.0|~4.0"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
+                "symfony/phpunit-bridge": "^3.3 || ^4"
             },
-            "type": "library",
+            "type": "application",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "3.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
+                    "Goutte\\": "Goutte"
                 },
                 "exclude-from-classmap": [
-                    "/Tests/"
+                    "Goutte/Tests"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-03T23:18:14+00:00"
+            "description": "A simple PHP Web Scraper",
+            "homepage": "https://github.com/FriendsOfPHP/Goutte",
+            "keywords": [
+                "scraper"
+            ],
+            "time": "2017-11-19T08:45:40+00:00"
         },
         {
-            "name": "twbs/bootstrap-sass",
-            "version": "v3.3.7",
+            "name": "jcalderonzumba/gastonjs",
+            "version": "v1.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/twbs/bootstrap-sass.git",
-                "reference": "5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47"
+                "url": "https://github.com/jcalderonzumba/gastonjs.git",
+                "reference": "4ff4a788d4995ae0d4b45fdcb1b76650e2eec72a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twbs/bootstrap-sass/zipball/5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47",
-                "reference": "5d6b2ebba0c2a5885ce2f0e01e9218db3d3b5e47",
+                "url": "https://api.github.com/repos/jcalderonzumba/gastonjs/zipball/4ff4a788d4995ae0d4b45fdcb1b76650e2eec72a",
+                "reference": "4ff4a788d4995ae0d4b45fdcb1b76650e2eec72a",
                 "shasum": ""
             },
-            "type": "library",
+            "require": {
+                "guzzlehttp/guzzle": "~5.0|~6.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.6",
+                "silex/silex": "~1.2",
+                "symfony/phpunit-bridge": "~2.7",
+                "symfony/process": "~2.1"
+            },
+            "type": "phantomjs-api",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.3.x-dev"
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Zumba\\GastonJS\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Mark Otto"
-                },
-                {
-                    "name": "Thomas McDonald"
-                },
-                {
-                    "name": "Tristan Harward"
-                },
-                {
-                    "name": "Peter Gumeson"
-                },
-                {
-                    "name": "Gleb Mazovetskiy"
-                },
-                {
-                    "name": "Jacob Thornton"
+                    "name": "Juan Francisco Calderón Zumba",
+                    "email": "juanfcz@gmail.com",
+                    "homepage": "http://github.com/jcalderonzumba"
                 }
             ],
-            "description": "bootstrap-sass is a Sass-powered version of Bootstrap 3, ready to drop right into your Sass powered applications.",
-            "homepage": "http://github.com/twbs/bootstrap-sass",
+            "description": "PhantomJS API based server for webpage automation",
+            "homepage": "https://github.com/jcalderonzumba/gastonjs",
             "keywords": [
-                "bootstrap",
-                "css",
-                "sass"
+                "api",
+                "automation",
+                "browser",
+                "headless",
+                "phantomjs"
             ],
-            "time": "2016-07-25T19:58:53+00:00"
+            "time": "2016-05-04T16:27:07+00:00"
         },
         {
-            "name": "twig/twig",
-            "version": "v1.35.3",
+            "name": "jcalderonzumba/mink-phantomjs-driver",
+            "version": "v0.3.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/twigphp/Twig.git",
-                "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f"
+                "url": "https://github.com/jcalderonzumba/MinkPhantomJSDriver.git",
+                "reference": "008f43670e94acd39273d15add1e7348eb23848d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
-                "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
+                "url": "https://api.github.com/repos/jcalderonzumba/MinkPhantomJSDriver/zipball/008f43670e94acd39273d15add1e7348eb23848d",
+                "reference": "008f43670e94acd39273d15add1e7348eb23848d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "behat/mink": "~1.7",
+                "jcalderonzumba/gastonjs": "~1.0",
+                "php": ">=5.4",
+                "twig/twig": "~1.20|~2.0"
             },
             "require-dev": {
-                "psr/container": "^1.0",
-                "symfony/debug": "^2.7",
-                "symfony/phpunit-bridge": "^3.3"
+                "mink/driver-testsuite": "dev-master",
+                "phpunit/phpunit": "~4.6"
             },
-            "type": "library",
+            "type": "mink-driver",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.35-dev"
+                    "dev-master": "0.4.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Twig_": "lib/"
-                },
                 "psr-4": {
-                    "Twig\\": "src/"
+                    "Zumba\\Mink\\Driver\\": "src"
                 }
             },
             "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"
-                },
-                {
-                    "name": "Twig Team",
-                    "homepage": "http://twig.sensiolabs.org/contributors",
-                    "role": "Contributors"
+                    "name": "Juan Francisco Calderón Zumba",
+                    "email": "juanfcz@gmail.com",
+                    "homepage": "http://github.com/jcalderonzumba"
                 }
             ],
-            "description": "Twig, the flexible, fast, and secure template language for PHP",
-            "homepage": "http://twig.sensiolabs.org",
+            "description": "PhantomJS driver for Mink framework",
+            "homepage": "http://mink.behat.org/",
             "keywords": [
-                "templating"
-            ],
-            "time": "2018-03-20T04:25:58+00:00"
-        },
-        {
-            "name": "webflo/drupal-finder",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webflo/drupal-finder.git",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
-                "shasum": ""
-            },
-            "require-dev": {
-                "mikey179/vfsstream": "^1.6",
-                "phpunit/phpunit": "^4.8"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/DrupalFinder.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0+"
-            ],
-            "authors": [
-                {
-                    "name": "Florian Weber",
-                    "email": "florian@webflo.org"
-                }
+                "ajax",
+                "browser",
+                "headless",
+                "javascript",
+                "phantomjs",
+                "testing"
             ],
-            "description": "Helper class to locate a Drupal installation from a given path.",
-            "time": "2017-10-24T08:12:11+00:00"
+            "time": "2016-12-01T10:57:30+00:00"
         },
         {
-            "name": "webmozart/assert",
-            "version": "1.3.0",
+            "name": "mikey179/vfsStream",
+            "version": "v1.6.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "url": "https://github.com/mikey179/vfsStream.git",
+                "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
+                "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": ">=5.3.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "~4.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3-dev"
+                    "dev-master": "1.6.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
+                "psr-0": {
+                    "org\\bovigo\\vfs\\": "src/main/php"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
+                    "name": "Frank Kleine",
+                    "homepage": "http://frankkleine.de/",
+                    "role": "Developer"
                 }
             ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "description": "Virtual file system to mock the real file system in unit tests.",
+            "homepage": "http://vfs.bovigo.org/",
+            "time": "2017-08-01T08:02:14+00:00"
         },
         {
-            "name": "webmozart/path-util",
-            "version": "2.3.0",
+            "name": "phpspec/prophecy",
+            "version": "1.7.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/webmozart/path-util.git",
-                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
-                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
+                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "webmozart/assert": "~1.0"
+                "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": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpspec/phpspec": "^2.5|^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.3-dev"
+                    "dev-master": "1.7.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Webmozart\\PathUtil\\": "src/"
+                "psr-0": {
+                    "Prophecy\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
                 }
             ],
-            "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
-            "time": "2015-12-17T08:42:14+00:00"
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2018-04-18T13:57:24+00:00"
         },
         {
-            "name": "zendframework/zend-diactoros",
-            "version": "1.7.1",
+            "name": "phpunit/php-code-coverage",
+            "version": "2.2.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-diactoros.git",
-                "reference": "bf26aff803a11c5cc8eb7c4878a702c403ec67f1"
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/bf26aff803a11c5cc8eb7c4878a702c403ec67f1",
-                "reference": "bf26aff803a11c5cc8eb7c4878a702c403ec67f1",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "psr/http-message": "^1.0"
-            },
-            "provide": {
-                "psr/http-message-implementation": "1.0"
+                "php": ">=5.3.3",
+                "phpunit/php-file-iterator": "~1.3",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-token-stream": "~1.3",
+                "sebastian/environment": "^1.3.2",
+                "sebastian/version": "~1.0"
             },
             "require-dev": {
+                "ext-xdebug": ">=2.1.4",
+                "phpunit/phpunit": "~4"
+            },
+            "suggest": {
                 "ext-dom": "*",
-                "ext-libxml": "*",
-                "phpunit/phpunit": "^5.7.16 || ^6.0.8",
-                "zendframework/zend-coding-standard": "~1.0"
+                "ext-xdebug": ">=2.2.1",
+                "ext-xmlwriter": "*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7.x-dev",
-                    "dev-develop": "1.8.x-dev"
+                    "dev-master": "2.2.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Diactoros\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-2-Clause"
+                "BSD-3-Clause"
             ],
-            "description": "PSR HTTP Message implementations",
-            "homepage": "https://github.com/zendframework/zend-diactoros",
+            "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": [
-                "http",
-                "psr",
-                "psr-7"
+                "coverage",
+                "testing",
+                "xunit"
             ],
-            "time": "2018-02-26T15:44:50+00:00"
+            "time": "2015-10-06T15:47:00+00:00"
         },
         {
-            "name": "zendframework/zend-escaper",
-            "version": "2.6.0",
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-escaper.git",
-                "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074"
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074",
-                "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6.x-dev",
-                    "dev-develop": "2.7.x-dev"
+                    "dev-master": "1.4.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Escaper\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
+            "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": [
-                "ZendFramework",
-                "escaper",
-                "zf"
+                "filesystem",
+                "iterator"
             ],
-            "time": "2018-04-25T15:48:53+00:00"
+            "time": "2017-11-27T13:52:08+00:00"
         },
         {
-            "name": "zendframework/zend-feed",
-            "version": "2.9.1",
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-feed.git",
-                "reference": "15a6ca78dd8f67b687e4f902657b4e420a8fd1e0"
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/15a6ca78dd8f67b687e4f902657b4e420a8fd1e0",
-                "reference": "15a6ca78dd8f67b687e4f902657b4e420a8fd1e0",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
-                "zendframework/zend-escaper": "^2.5.2",
-                "zendframework/zend-stdlib": "^2.7.7 || ^3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
-                "psr/http-message": "^1.0.1",
-                "zendframework/zend-cache": "^2.7.2",
-                "zendframework/zend-coding-standard": "~1.0.0",
-                "zendframework/zend-db": "^2.8.2",
-                "zendframework/zend-http": "^2.7",
-                "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
-                "zendframework/zend-validator": "^2.10.1"
-            },
-            "suggest": {
-                "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Zend\\Feed\\Reader\\Http\\Psr7ResponseDecorator",
-                "zendframework/zend-cache": "Zend\\Cache component, for optionally caching feeds between requests",
-                "zendframework/zend-db": "Zend\\Db component, for use with PubSubHubbub",
-                "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for easily extending ExtensionManager implementations",
-                "zendframework/zend-validator": "Zend\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent"
+                "php": ">=5.3.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.9-dev",
-                    "dev-develop": "2.10-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Feed\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "provides functionality for consuming RSS and Atom feeds",
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
             "keywords": [
-                "ZendFramework",
-                "feed",
-                "zf"
+                "template"
             ],
-            "time": "2018-05-14T21:45:18+00:00"
+            "time": "2015-06-21T13:50:34+00:00"
         },
         {
-            "name": "zendframework/zend-stdlib",
-            "version": "3.2.0",
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "cd164b4a18b5d1aeb69be2c26db035b5ed6925ae"
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cd164b4a18b5d1aeb69be2c26db035b5ed6925ae",
-                "reference": "cd164b4a18b5d1aeb69be2c26db035b5ed6925ae",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": "^5.3.3 || ^7.0"
             },
             "require-dev": {
-                "phpbench/phpbench": "^0.13",
-                "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
-                "zendframework/zend-coding-standard": "~1.0.0"
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.2.x-dev",
-                    "dev-develop": "3.3.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zend\\Stdlib\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "SPL extensions, array utilities, error handlers, and more",
-            "keywords": [
-                "ZendFramework",
-                "stdlib",
-                "zf"
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
             ],
-            "time": "2018-04-30T13:50:40+00:00"
-        }
-    ],
-    "packages-dev": [
+            "time": "2017-02-26T11:10:40+00:00"
+        },
         {
-            "name": "ajgl/breakpoint-twig-extension",
-            "version": "0.3.0",
+            "name": "phpunit/php-token-stream",
+            "version": "1.4.12",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git",
-                "reference": "0dfa4f0ae3bbeb6c8036e3e6d6c204c43b090155"
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/0dfa4f0ae3bbeb6c8036e3e6d6c204c43b090155",
-                "reference": "0dfa4f0ae3bbeb6c8036e3e6d6c204c43b090155",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.0",
-                "twig/twig": "^1.14"
+                "ext-tokenizer": "*",
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "symfony/framework-bundle": "^2.3",
-                "symfony/twig-bundle": "^2.3"
-            },
-            "suggest": {
-                "ext-xdebug": "The Xdebug extension is required for the breakpoint to work",
-                "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony",
-                "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony"
+                "phpunit/phpunit": "~4.2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.4.x-dev"
+                    "dev-master": "1.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Ajgl\\Twig\\Extension\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Antonio J. García Lagar",
-                    "email": "aj@garcialagar.es",
-                    "homepage": "http://aj.garcialagar.es",
-                    "role": "developer"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Twig extension to set breakpoints",
-            "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension",
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
             "keywords": [
-                "Xdebug",
-                "breakpoint",
-                "twig"
+                "tokenizer"
             ],
-            "time": "2016-03-31T18:09:32+00:00"
+            "time": "2017-12-04T08:55:13+00:00"
         },
         {
-            "name": "behat/mink",
-            "version": "v1.7.1",
+            "name": "phpunit/phpunit",
+            "version": "4.8.36",
             "source": {
                 "type": "git",
-                "url": "https://github.com/minkphp/Mink.git",
-                "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9"
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9",
-                "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
+                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.1",
-                "symfony/css-selector": "~2.1|~3.0"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7|~3.0"
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-pcre": "*",
+                "ext-reflection": "*",
+                "ext-spl": "*",
+                "php": ">=5.3.3",
+                "phpspec/prophecy": "^1.3.1",
+                "phpunit/php-code-coverage": "~2.1",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "~2.3",
+                "sebastian/comparator": "~1.2.2",
+                "sebastian/diff": "~1.2",
+                "sebastian/environment": "~1.3",
+                "sebastian/exporter": "~1.2",
+                "sebastian/global-state": "~1.0",
+                "sebastian/version": "~1.0",
+                "symfony/yaml": "~2.1|~3.0"
             },
             "suggest": {
-                "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
-                "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
-                "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
-                "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
+                "phpunit/php-invoker": "~1.1"
             },
+            "bin": [
+                "phpunit"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7.x-dev"
+                    "dev-master": "4.8.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Behat\\Mink\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Browser controller/emulator abstraction for PHP",
-            "homepage": "http://mink.behat.org/",
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
             "keywords": [
-                "browser",
+                "phpunit",
                 "testing",
-                "web"
+                "xunit"
             ],
-            "time": "2016-03-05T08:26:18+00:00"
+            "time": "2017-06-21T08:07:12+00:00"
         },
         {
-            "name": "behat/mink-browserkit-driver",
-            "version": "1.3.3",
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "2.3.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/minkphp/MinkBrowserKitDriver.git",
-                "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb"
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/1b9a7ce903cfdaaec5fb32bfdbb26118343662eb",
-                "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
                 "shasum": ""
             },
             "require": {
-                "behat/mink": "^1.7.1@dev",
-                "php": ">=5.3.6",
-                "symfony/browser-kit": "~2.3|~3.0|~4.0",
-                "symfony/dom-crawler": "~2.3|~3.0|~4.0"
+                "doctrine/instantiator": "^1.0.2",
+                "php": ">=5.3.3",
+                "phpunit/php-text-template": "~1.2",
+                "sebastian/exporter": "~1.2"
             },
             "require-dev": {
-                "mink/driver-testsuite": "dev-master",
-                "symfony/http-kernel": "~2.3|~3.0|~4.0"
+                "phpunit/phpunit": "~4.4"
             },
-            "type": "mink-driver",
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "2.3.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Behat\\Mink\\Driver\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Symfony2 BrowserKit driver for Mink framework",
-            "homepage": "http://mink.behat.org/",
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
             "keywords": [
-                "Mink",
-                "Symfony2",
-                "browser",
-                "testing"
+                "mock",
+                "xunit"
             ],
-            "time": "2018-05-02T09:25:31+00:00"
+            "time": "2015-10-02T06:51:40+00:00"
         },
         {
-            "name": "behat/mink-goutte-driver",
-            "version": "v1.2.1",
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/minkphp/MinkGoutteDriver.git",
-                "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca"
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/8b9ad6d2d95bc70b840d15323365f52fcdaea6ca",
-                "reference": "8b9ad6d2d95bc70b840d15323365f52fcdaea6ca",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
                 "shasum": ""
             },
             "require": {
-                "behat/mink": "~1.6@dev",
-                "behat/mink-browserkit-driver": "~1.2@dev",
-                "fabpot/goutte": "~1.0.4|~2.0|~3.1",
-                "php": ">=5.3.1"
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "~2.7|~3.0"
+                "phpunit/phpunit": "~4.4"
             },
-            "type": "mink-driver",
+            "type": "library",
             "extra": {
                 "branch-alias": {
                     "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Behat\\Mink\\Driver\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Goutte driver for Mink framework",
-            "homepage": "http://mink.behat.org/",
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
             "keywords": [
-                "browser",
-                "goutte",
-                "headless",
-                "testing"
+                "comparator",
+                "compare",
+                "equality"
             ],
-            "time": "2016-03-05T09:04:22+00:00"
+            "time": "2017-01-29T09:50:25+00:00"
         },
         {
-            "name": "drupal/twig_xdebug",
-            "version": "1.0.0",
+            "name": "sebastian/diff",
+            "version": "1.4.3",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/twig_xdebug",
-                "reference": "8.x-1.0"
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/twig_xdebug-8.x-1.0.zip",
-                "reference": "8.x-1.0",
-                "shasum": "f8a5cfef63b427d6b6b428a2c4bd19b19d082037"
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "shasum": ""
             },
             "require": {
-                "ajgl/breakpoint-twig-extension": "0.3",
-                "drupal/core": "~8.0"
+                "php": "^5.3.3 || ^7.0"
             },
-            "type": "drupal-module",
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.0",
-                    "datestamp": "1464928439"
+                    "dev-master": "1.4-dev"
                 }
             },
-            "notification-url": "https://packages.drupal.org/8/downloads",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0+"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "charginghawk",
-                    "homepage": "https://www.drupal.org/user/2626341"
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Enables Xdebug breakpoints in Twig.",
-            "homepage": "https://www.drupal.org/project/twig_xdebug",
-            "support": {
-                "source": "http://cgit.drupalcode.org/twig_xdebug"
-            }
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
         },
         {
-            "name": "fabpot/goutte",
-            "version": "v3.2.2",
+            "name": "sebastian/environment",
+            "version": "1.3.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/FriendsOfPHP/Goutte.git",
-                "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96"
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/395f61d7c2e15a813839769553a4de16fa3b3c96",
-                "reference": "395f61d7c2e15a813839769553a4de16fa3b3c96",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/guzzle": "^6.0",
-                "php": ">=5.5.0",
-                "symfony/browser-kit": "~2.1|~3.0|~4.0",
-                "symfony/css-selector": "~2.1|~3.0|~4.0",
-                "symfony/dom-crawler": "~2.1|~3.0|~4.0"
+                "php": "^5.3.3 || ^7.0"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "^3.3 || ^4"
+                "phpunit/phpunit": "^4.8 || ^5.0"
             },
-            "type": "application",
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.2-dev"
+                    "dev-master": "1.3.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Goutte\\": "Goutte"
-                },
-                "exclude-from-classmap": [
-                    "Goutte/Tests"
+                "classmap": [
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "A simple PHP Web Scraper",
-            "homepage": "https://github.com/FriendsOfPHP/Goutte",
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
             "keywords": [
-                "scraper"
+                "Xdebug",
+                "environment",
+                "hhvm"
             ],
-            "time": "2017-11-19T08:45:40+00:00"
+            "time": "2016-08-18T05:49:44+00:00"
         },
         {
-            "name": "jcalderonzumba/gastonjs",
-            "version": "v1.0.3",
+            "name": "sebastian/exporter",
+            "version": "1.2.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/jcalderonzumba/gastonjs.git",
-                "reference": "4ff4a788d4995ae0d4b45fdcb1b76650e2eec72a"
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/jcalderonzumba/gastonjs/zipball/4ff4a788d4995ae0d4b45fdcb1b76650e2eec72a",
-                "reference": "4ff4a788d4995ae0d4b45fdcb1b76650e2eec72a",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
+                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/guzzle": "~5.0|~6.0",
-                "php": ">=5.4"
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.6",
-                "silex/silex": "~1.2",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/process": "~2.1"
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
             },
-            "type": "phantomjs-api",
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1.x-dev"
+                    "dev-master": "1.3.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zumba\\GastonJS\\": "src"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Juan Francisco Calderón Zumba",
-                    "email": "juanfcz@gmail.com",
-                    "homepage": "http://github.com/jcalderonzumba"
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "PhantomJS API based server for webpage automation",
-            "homepage": "https://github.com/jcalderonzumba/gastonjs",
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
             "keywords": [
-                "api",
-                "automation",
-                "browser",
-                "headless",
-                "phantomjs"
+                "export",
+                "exporter"
             ],
-            "time": "2016-05-04T16:27:07+00:00"
+            "time": "2016-06-17T09:04:28+00:00"
         },
         {
-            "name": "jcalderonzumba/mink-phantomjs-driver",
-            "version": "v0.3.3",
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/jcalderonzumba/MinkPhantomJSDriver.git",
-                "reference": "008f43670e94acd39273d15add1e7348eb23848d"
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/jcalderonzumba/MinkPhantomJSDriver/zipball/008f43670e94acd39273d15add1e7348eb23848d",
-                "reference": "008f43670e94acd39273d15add1e7348eb23848d",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
                 "shasum": ""
             },
             "require": {
-                "behat/mink": "~1.7",
-                "jcalderonzumba/gastonjs": "~1.0",
-                "php": ">=5.4",
-                "twig/twig": "~1.20|~2.0"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "mink/driver-testsuite": "dev-master",
-                "phpunit/phpunit": "~4.6"
+                "phpunit/phpunit": "~4.2"
             },
-            "type": "mink-driver",
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.4.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Zumba\\Mink\\Driver\\": "src"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Juan Francisco Calderón Zumba",
-                    "email": "juanfcz@gmail.com",
-                    "homepage": "http://github.com/jcalderonzumba"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "PhantomJS driver for Mink framework",
-            "homepage": "http://mink.behat.org/",
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
             "keywords": [
-                "ajax",
-                "browser",
-                "headless",
-                "javascript",
-                "phantomjs",
-                "testing"
+                "global state"
             ],
-            "time": "2016-12-01T10:57:30+00:00"
+            "time": "2015-10-12T03:26:01+00:00"
         },
         {
-            "name": "mikey179/vfsStream",
-            "version": "v1.6.5",
+            "name": "sebastian/recursion-context",
+            "version": "1.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/mikey179/vfsStream.git",
-                "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145"
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
-                "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5"
+                "phpunit/phpunit": "~4.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.6.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "org\\bovigo\\vfs\\": "src/main/php"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "Virtual file system to mock the real file system in unit tests.",
-            "homepage": "http://vfs.bovigo.org/",
-            "time": "2017-08-01T08:02:14+00:00"
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-10-03T07:41:43+00:00"
         },
         {
             "name": "symfony/browser-kit",
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": {
-        "drupal/token": 5,
-        "drupal/ctools": 15,
-        "drupal/pathauto": 5,
         "drupal/eu_cookie_compliance": 10,
-        "drupal/livereload": 20,
-        "drupal/front": 15,
+        "drupal/front": 10,
         "drupal/filefield_sources": 20,
         "drupal/php": 20,
         "drupal/hacked": 10,
-        "drupal/pathologic": 20,
+        "drupal/pathologic": 15,
         "drupal/typogrify": 15,
         "drupal/entityqueue": 15,
-        "drupal/advanced_help": 20,
+        "drupal/advanced_help": 15,
         "drupal/better_formats": 20,
         "drupal/block_class": 15,
-        "drupal/redirect": 15,
-        "drupal/libraries": 20,
+        "drupal/libraries": 15,
         "drupal/linkchecker": 20,
-        "drupal/devel": 5,
         "drupal/security_review": 20,
         "drupal/memcache": 15,
-        "drupal/media": 20,
         "grom358/pharborist": 20,
         "drupal/superfish": 5,
-        "drupal/views_bootstrap": 20,
         "drupal/views_responsive_grid": 20,
         "drupal/imagemagick": 15,
         "drupal/diff": 5,
         "drupal/ckeditor_widgets": 20,
         "drupal/layout_plugin": 15,
-        "roave/security-advisories": 20
+        "roave/security-advisories": 20,
+        "drupal/inline_entity_form": 10,
+        "drupal/entity_embed": 10,
+        "drupal/dropzonejs": 15,
+        "drupal/livereload": 20
     },
     "prefer-stable": true,
     "prefer-lowest": false,
index e2f0c106b8f5acaaf9034a0d53df201adc5709d4..914a4f2c7e716a30faa1d2ef39dda16f6b1bb6d2 100644 (file)
     },
     {
         "name": "drupal/advanced_help",
-        "version": "dev-1.x",
-        "version_normalized": "dev-1.x",
+        "version": "1.0.0-alpha1",
+        "version_normalized": "1.0.0.0-alpha1",
         "source": {
             "type": "git",
             "url": "https://git.drupal.org/project/advanced_help",
-            "reference": "d4238e55f773c8d569847cb57042c60c906aec3c"
+            "reference": "8.x-1.0-alpha1"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://ftp.drupal.org/files/projects/advanced_help-8.x-1.0-alpha1.zip",
+            "reference": "8.x-1.0-alpha1",
+            "shasum": "a8d48d3cef48d648b3f7d5e8d0bd302cb797df8c"
         },
         "require": {
             "drupal/core": "~8.0",
                 "dev-1.x": "1.x-dev"
             },
             "drupal": {
-                "version": "8.x-1.x-dev",
-                "datestamp": "1501649346",
+                "version": "8.x-1.0-alpha1",
+                "datestamp": "1523980980",
                 "security-coverage": {
                     "status": "not-covered",
-                    "message": "Dev releases are not covered by Drupal security advisories."
+                    "message": "Alpha releases are not covered by Drupal security advisories."
                 }
             }
         },
             "irc": "irc://irc.freenode.org/drupal-contribute"
         }
     },
-    {
-        "name": "drupal/dropzonejs_eb_widget",
-        "version": "2.0.0-alpha3",
-        "version_normalized": "2.0.0.0-alpha3",
-        "require": {
-            "drupal/core": "*",
-            "drupal/dropzonejs": "self.version",
-            "drupal/entity_browser": "*"
-        },
-        "type": "metapackage",
-        "extra": {
-            "branch-alias": {
-                "dev-2.x": "2.x-dev"
-            },
-            "drupal": {
-                "version": "8.x-2.0-alpha3",
-                "datestamp": "1513265285",
-                "security-coverage": {
-                    "status": "not-covered",
-                    "message": "Project has not opted into security advisory coverage!"
-                }
-            }
-        },
-        "notification-url": "https://packages.drupal.org/8/downloads",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "authors": [
-            {
-                "name": "Drupal Media Team",
-                "homepage": "https://www.drupal.org/user/3260690"
-            },
-            {
-                "name": "Drupal media CI",
-                "homepage": "https://www.drupal.org/user/3057985"
-            },
-            {
-                "name": "Primsi",
-                "homepage": "https://www.drupal.org/user/282629"
-            },
-            {
-                "name": "chr.fritsch",
-                "homepage": "https://www.drupal.org/user/2103716"
-            },
-            {
-                "name": "slashrsm",
-                "homepage": "https://www.drupal.org/user/744628"
-            },
-            {
-                "name": "wouters_f",
-                "homepage": "https://www.drupal.org/user/721548"
-            },
-            {
-                "name": "zkday",
-                "homepage": "https://www.drupal.org/user/888644"
-            }
-        ],
-        "description": "DropzoneJS Entity browser widget",
-        "homepage": "https://www.drupal.org/project/dropzonejs",
-        "support": {
-            "source": "http://cgit.drupalcode.org/dropzonejs"
-        }
-    },
     {
         "name": "drupal/drupalmoduleupgrader",
         "version": "dev-1.x",
             "irc": "irc://irc.freenode.org/drupal-contribute"
         }
     },
-    {
-        "name": "drupal/entity_browser_entity_form",
-        "version": "1.4.0",
-        "version_normalized": "1.4.0.0",
-        "require": {
-            "drupal/core": "~8.0",
-            "drupal/entity_browser": "self.version",
-            "drupal/inline_entity_form": "*"
-        },
-        "type": "metapackage",
-        "extra": {
-            "branch-alias": {
-                "dev-1.x": "1.x-dev"
-            },
-            "drupal": {
-                "version": "8.x-1.4",
-                "datestamp": "1512033785",
-                "security-coverage": {
-                    "status": "covered",
-                    "message": "Covered by Drupal's security advisory policy"
-                }
-            }
-        },
-        "notification-url": "https://packages.drupal.org/8/downloads",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "authors": [
-            {
-                "name": "Dave Reid",
-                "homepage": "https://www.drupal.org/user/53892"
-            },
-            {
-                "name": "Devin Carlson",
-                "homepage": "https://www.drupal.org/user/290182"
-            },
-            {
-                "name": "Drupal Media Team",
-                "homepage": "https://www.drupal.org/user/3260690"
-            },
-            {
-                "name": "Primsi",
-                "homepage": "https://www.drupal.org/user/282629"
-            },
-            {
-                "name": "marcingy",
-                "homepage": "https://www.drupal.org/user/77320"
-            },
-            {
-                "name": "samuel.mortenson",
-                "homepage": "https://www.drupal.org/user/2582268"
-            },
-            {
-                "name": "slashrsm",
-                "homepage": "https://www.drupal.org/user/744628"
-            }
-        ],
-        "description": "Entity browser inline entity form integration.",
-        "homepage": "https://www.drupal.org/project/entity_browser",
-        "support": {
-            "source": "http://cgit.drupalcode.org/entity_browser"
-        }
-    },
     {
         "name": "drupal/entity_embed",
         "version": "1.0.0-beta2",
     },
     {
         "name": "drupal/libraries",
-        "version": "dev-3.x",
-        "version_normalized": "dev-3.x",
+        "version": "3.0.0-alpha1",
+        "version_normalized": "3.0.0.0-alpha1",
         "source": {
             "type": "git",
             "url": "https://git.drupal.org/project/libraries",
-            "reference": "061ead081c92a6209b09eaf23b4e3103f360946e"
+            "reference": "8.x-3.0-alpha1"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha1.zip",
+            "reference": "8.x-3.0-alpha1",
+            "shasum": "bb07036b1eaeea7d736fc7e72416238830cd8d67"
         },
         "require": {
             "drupal/core": "~8.0"
                 "dev-3.x": "3.x-dev"
             },
             "drupal": {
-                "version": "8.x-3.x-dev",
-                "datestamp": "1487978583"
+                "version": "8.x-3.0-alpha1",
+                "datestamp": "1517046484",
+                "security-coverage": {
+                    "status": "not-covered",
+                    "message": "Alpha releases are not covered by Drupal security advisories."
+                }
             }
         },
         "installation-source": "source",
             "source": "http://cgit.drupalcode.org/livereload"
         }
     },
-    {
-        "name": "drupal/media",
-        "version": "dev-1.x",
-        "version_normalized": "dev-1.x",
-        "source": {
-            "type": "git",
-            "url": "https://git.drupal.org/project/media",
-            "reference": "b9d72f21ea20c583ec4b83081720eba65670a8da"
-        },
-        "require": {
-            "drupal/core": "*",
-            "drupal/dropzonejs_eb_widget": "*",
-            "drupal/entity_browser": "*",
-            "drupal/entity_browser_entity_form": "*",
-            "drupal/entity_embed": "*",
-            "drupal/image_widget_crop": "*",
-            "drupal/inline_entity_form": "*",
-            "drupal/media_entity": "*",
-            "drupal/media_entity_document": "*",
-            "drupal/media_entity_image": "*",
-            "drupal/media_entity_instagram": "*",
-            "drupal/media_entity_slideshow": "*",
-            "drupal/media_entity_twitter": "*",
-            "drupal/slick_media": "*",
-            "drupal/video_embed_field": "*",
-            "drupal/video_embed_media": "*"
-        },
-        "require-dev": {
-            "drupal/dropzonejs_eb_widget": "*",
-            "drupal/entity_browser": "*",
-            "drupal/entity_browser_entity_form": "*",
-            "drupal/entity_embed": "*",
-            "drupal/image_widget_crop": "*",
-            "drupal/inline_entity_form": "*",
-            "drupal/media_entity": "*",
-            "drupal/media_entity_document": "*",
-            "drupal/media_entity_image": "*",
-            "drupal/media_entity_instagram": "*",
-            "drupal/media_entity_slideshow": "*",
-            "drupal/media_entity_twitter": "*",
-            "drupal/slick_media": "*",
-            "drupal/video_embed_field": "*",
-            "drupal/video_embed_media": "*"
-        },
-        "type": "drupal-module",
-        "extra": {
-            "branch-alias": {
-                "dev-1.x": "1.x-dev"
-            },
-            "drupal": {
-                "version": "8.x-1.x-dev",
-                "datestamp": "1476811139"
-            }
-        },
-        "installation-source": "source",
-        "notification-url": "https://packages.drupal.org/8/downloads",
-        "license": [
-            "GPL-2.0+"
-        ],
-        "authors": [
-            {
-                "name": "Dave Reid",
-                "homepage": "https://www.drupal.org/user/53892"
-            },
-            {
-                "name": "David_Rothstein",
-                "homepage": "https://www.drupal.org/user/124982"
-            },
-            {
-                "name": "Devin Carlson",
-                "homepage": "https://www.drupal.org/user/290182"
-            },
-            {
-                "name": "Drupal Media Team",
-                "homepage": "https://www.drupal.org/user/3260690"
-            },
-            {
-                "name": "ParisLiakos",
-                "homepage": "https://www.drupal.org/user/1011436"
-            },
-            {
-                "name": "arthurf",
-                "homepage": "https://www.drupal.org/user/27259"
-            },
-            {
-                "name": "becw",
-                "homepage": "https://www.drupal.org/user/81067"
-            },
-            {
-                "name": "effulgentsia",
-                "homepage": "https://www.drupal.org/user/78040"
-            },
-            {
-                "name": "joseph.olstad",
-                "homepage": "https://www.drupal.org/user/1321830"
-            },
-            {
-                "name": "ksenzee",
-                "homepage": "https://www.drupal.org/user/139855"
-            },
-            {
-                "name": "paul.lovvik",
-                "homepage": "https://www.drupal.org/user/289213"
-            },
-            {
-                "name": "robeano",
-                "homepage": "https://www.drupal.org/user/67660"
-            },
-            {
-                "name": "slashrsm",
-                "homepage": "https://www.drupal.org/user/744628"
-            }
-        ],
-        "description": "Media module for Drupal",
-        "homepage": "https://github.com/drupal-media/media/",
-        "support": {
-            "source": "http://cgit.drupalcode.org/media",
-            "irc": "irc://irc.freenode.org/drupal-contribute"
-        }
-    },
     {
         "name": "drupal/media_entity",
         "version": "2.0.0-beta2",
             "source": "http://cgit.drupalcode.org/media_entity_actions"
         }
     },
-    {
-        "name": "drupal/media_entity_document",
-        "version": "1.0.0",
-        "version_normalized": "1.0.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://git.drupal.org/project/media_entity_document",
-            "reference": "8.x-1.0"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/media_entity_document-8.x-1.0.zip",
-            "reference": "8.x-1.0",
-            "shasum": "fc4d87126ebb5ac3dc135809ff4dc96d955e6539"
-        },
-        "require": {
-            "drupal/core": "~8.0",
-            "drupal/media_entity": "*"
-        },
-        "type": "drupal-module",
-        "extra": {
-            "branch-alias": {
-                "dev-1.x": "1.x-dev"
-            },
-            "drupal": {
-                "version": "8.x-1.0",
-                "datestamp": "1470211439",
-                "security-coverage": {
-                    "status": "covered",
-                    "message": "Covered by Drupal's security advisory policy"
-                }
-            }
-        },
-        "installation-source": "dist",
-        "notification-url": "https://packages.drupal.org/8/downloads",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "authors": [
-            {
-                "name": "NerOcrO",
-                "homepage": "https://www.drupal.org/user/1728164"
-            }
-        ],
-        "description": "Media entity local documents provider.",
-        "homepage": "https://www.drupal.org/project/media_entity_document",
-        "support": {
-            "source": "http://cgit.drupalcode.org/media_entity_document"
-        }
-    },
-    {
-        "name": "drupal/media_entity_image",
-        "version": "1.3.0",
-        "version_normalized": "1.3.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://git.drupal.org/project/media_entity_image",
-            "reference": "8.x-1.3"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/media_entity_image-8.x-1.3.zip",
-            "reference": "8.x-1.3",
-            "shasum": "53e21655e49e38fbd3fe696c4132460491879280"
-        },
-        "require": {
-            "drupal/core": "~8.1",
-            "drupal/media_entity": "~1.0 || ~8.1.0 || ~2.0"
-        },
-        "require-dev": {
-            "drupal/entity_browser": "*"
-        },
-        "type": "drupal-module",
-        "extra": {
-            "branch-alias": {
-                "dev-1.x": "1.x-dev"
-            },
-            "drupal": {
-                "version": "8.x-1.3",
-                "datestamp": "1525218780",
-                "security-coverage": {
-                    "status": "covered",
-                    "message": "Covered by Drupal's security advisory policy"
-                }
-            }
-        },
-        "installation-source": "dist",
-        "notification-url": "https://packages.drupal.org/8/downloads",
-        "license": [
-            "GPL-2.0+"
-        ],
-        "authors": [
-            {
-                "name": "Drupal Media Team",
-                "homepage": "https://www.drupal.org/user/3260690"
-            },
-            {
-                "name": "Primsi",
-                "homepage": "https://www.drupal.org/user/282629"
-            },
-            {
-                "name": "marcoscano",
-                "homepage": "https://www.drupal.org/user/1288796"
-            },
-            {
-                "name": "phenaproxima",
-                "homepage": "https://www.drupal.org/user/205645"
-            },
-            {
-                "name": "slashrsm",
-                "homepage": "https://www.drupal.org/user/744628"
-            }
-        ],
-        "description": "Local images integration for Drupal Media entity.",
-        "homepage": "https://www.drupal.org/project/media_entity_image",
-        "keywords": [
-            "Drupal",
-            "image",
-            "media"
-        ],
-        "support": {
-            "source": "https://www.drupal.org/project/media_entity_image",
-            "issues": "https://www.drupal.org/project/issues/media_entity_image"
-        }
-    },
     {
         "name": "drupal/media_entity_instagram",
         "version": "2.0.0-alpha1",
     },
     {
         "name": "drupal/pathologic",
-        "version": "dev-1.x",
-        "version_normalized": "dev-1.x",
+        "version": "1.0.0-alpha1",
+        "version_normalized": "1.0.0.0-alpha1",
         "source": {
             "type": "git",
             "url": "https://git.drupal.org/project/pathologic",
-            "reference": "d50e6430f3259afa9d79123825e6e4b7a5cf39a8"
+            "reference": "8.x-1.0-alpha1"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://ftp.drupal.org/files/projects/pathologic-8.x-1.0-alpha1.zip",
+            "reference": "8.x-1.0-alpha1",
+            "shasum": "51c699cc001969baa00cca60cf2302a32e578090"
         },
         "require": {
             "drupal/core": "*"
                 "dev-1.x": "1.x-dev"
             },
             "drupal": {
-                "version": "8.x-1.x-dev",
-                "datestamp": "1525211280",
+                "version": "8.x-1.0-alpha1",
+                "datestamp": "1525211884",
                 "security-coverage": {
                     "status": "not-covered",
-                    "message": "Dev releases are not covered by Drupal security advisories."
+                    "message": "Alpha releases are not covered by Drupal security advisories."
                 }
             }
         },
     },
     {
         "name": "drupal/views_bootstrap",
-        "version": "dev-3.x",
-        "version_normalized": "dev-3.x",
+        "version": "3.0.0",
+        "version_normalized": "3.0.0.0",
         "source": {
             "type": "git",
             "url": "https://git.drupal.org/project/views_bootstrap",
-            "reference": "8a8d1add3a575842e33c51a3733b43c24c4bc41f"
+            "reference": "8.x-3.0"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://ftp.drupal.org/files/projects/views_bootstrap-8.x-3.0.zip",
+            "reference": "8.x-3.0",
+            "shasum": "65f6ebc231b28235d0404140cc8420580206e101"
         },
         "require": {
             "drupal/core": "*"
                 "dev-3.x": "3.x-dev"
             },
             "drupal": {
-                "version": "8.x-3.0+4-dev",
-                "datestamp": "1523236084",
+                "version": "8.x-3.0",
+                "datestamp": "1507098244",
                 "security-coverage": {
-                    "status": "not-covered",
-                    "message": "Dev releases are not covered by Drupal security advisories."
+                    "status": "covered",
+                    "message": "Covered by Drupal's security advisory policy"
                 }
             }
         },
     },
     {
         "name": "psy/psysh",
-        "version": "v0.9.3",
-        "version_normalized": "0.9.3.0",
+        "version": "v0.9.4",
+        "version_normalized": "0.9.4.0",
         "source": {
             "type": "git",
             "url": "https://github.com/bobthecow/psysh.git",
-            "reference": "79c280013cf0b30fa23f3ba8bd3649218075adf4"
+            "reference": "4d969a0e08e1e05e7207c07cb4207017ecc9a331"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/bobthecow/psysh/zipball/79c280013cf0b30fa23f3ba8bd3649218075adf4",
-            "reference": "79c280013cf0b30fa23f3ba8bd3649218075adf4",
+            "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4d969a0e08e1e05e7207c07cb4207017ecc9a331",
+            "reference": "4d969a0e08e1e05e7207c07cb4207017ecc9a331",
             "shasum": ""
         },
         "require": {
             "symfony/var-dumper": "~2.7|~3.0|~4.0"
         },
         "require-dev": {
+            "bamarni/composer-bin-plugin": "^1.2",
             "hoa/console": "~2.15|~3.16",
-            "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0",
-            "symfony/finder": "~2.1|~3.0|~4.0"
+            "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
         },
         "suggest": {
             "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
             "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
             "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
         },
-        "time": "2018-04-18T12:32:50+00:00",
+        "time": "2018-05-22T06:48:07+00:00",
         "bin": [
             "bin/psysh"
         ],
index 779f99a12b5c71692ad6d6908d6d2fc3bdba485d..fddf9c1c6b64519e58c5c04eb924477214c7aec3 100644 (file)
@@ -10,3 +10,6 @@ insert_final_newline = true
 
 [*.md]
 trim_trailing_whitespace = false
+
+[Makefile]
+indent_style = tab
index d4300e2bb15997b1df8d06bfcc4c3a2686ed0c3e..da05f58cb71b2bec8bf9c114b3407a2ad59e6e8e 100644 (file)
@@ -1,11 +1,9 @@
-build-vendor/
-vendor/
-composer.lock
-composer-compat.json
-composer-compat.lock
-manual/
-dist/
-__pycache__
-.php_cs.cache
-psysh.phar
-psysh-compat.phar
+/build/
+/dist/
+/composer.lock
+/manual/
+/psysh
+/__pycache__
+/.php_cs.cache
+/vendor/
+/vendor-bin/*/vendor/
index 396e461f5a67ced72ab06732c1d920df409298cb..30ab567ce95890c8293b84d7fab2cdbab05b8aa4 100644 (file)
@@ -18,12 +18,18 @@ matrix:
     - php: 5.4
       env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"'
     - php: hhvm
+  fast_finish: true
 
 install: travis_retry composer update --no-interaction $COMPOSER_FLAGS
 
-script: vendor/bin/phpunit --verbose
+script:
+ - vendor/bin/phpunit --verbose --coverage-clover=coverage.xml
+ - '[[ $TRAVIS_PHP_VERSION = 7.2* ]] && make build || true'
 
-before_deploy: bin/package -v $TRAVIS_TAG
+after_success:
+  - bash <(curl -s https://codecov.io/bash)
+
+before_deploy: make dist
 
 deploy:
   provider: releases
@@ -35,4 +41,4 @@ deploy:
   on:
     tags: true
     repo: bobthecow/psysh
-    condition: (($TRAVIS_PHP_VERSION = 5.4* && -z "$COMPOSER_FLAGS") || $TRAVIS_PHP_VERSION = 7.0*)
+    condition: $TRAVIS_PHP_VERSION = 7.2*
index fdd27fb734824d12e845af779a98f2f484eda45d..2c6a4513708c7c9f5231297e71937a1210592918 100644 (file)
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2012-2017 Justin Hileman
+Copyright (c) 2012-2018 Justin Hileman
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/psy/psysh/Makefile b/vendor/psy/psysh/Makefile
new file mode 100644 (file)
index 0000000..d144ab4
--- /dev/null
@@ -0,0 +1,93 @@
+PSYSH_SRC = bin src box.json.dist composer.json build/stub
+PSYSH_SRC_FILES = $(shell find src -type f -name "*.php")
+VERSION = $(shell git describe --tag --always --dirty=-dev)
+
+COMPOSER_OPTS = --no-interaction --no-progress --verbose
+COMPOSER_REQUIRE_OPTS = $(COMPOSER_OPTS) --no-update
+COMPOSER_UPDATE_OPTS = $(COMPOSER_OPTS) --prefer-stable --no-dev --classmap-authoritative --prefer-dist
+
+
+# Commands
+
+.PHONY: help clean build dist
+.DEFAULT_GOAL := help
+
+help:
+       @echo "\033[33mUsage:\033[0m\n  make TARGET\n\n\033[33mTargets:\033[0m"
+       @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[32m%-7s\033[0m %s\n", $$1, $$2}'
+
+clean: ## Clean all created artifacts
+       rm -rf build/*
+       rm -rf dist/*
+       rm -rf vendor-bin/*/vendor/
+
+build: ## Compile PHARs
+build: build/psysh/psysh build/psysh-compat/psysh build/psysh-php54/psysh build/psysh-php54-compat/psysh
+
+dist: ## Build tarballs for distribution
+dist: dist/psysh-$(VERSION).tar.gz dist/psysh-$(VERSION)-compat.tar.gz dist/psysh-$(VERSION)-php54.tar.gz dist/psysh-$(VERSION)-php54-compat.tar.gz
+
+
+# All the composer stuffs
+
+composer.lock: composer.json
+       composer install
+       touch $@
+
+vendor/autoload.php: composer.lock
+       composer install
+       touch $@
+
+vendor/bin/box: vendor/autoload.php
+       composer bin box install
+       touch $@
+
+
+# Lots of PHARs
+
+build/stub: bin/build-stub bin/psysh LICENSE
+       bin/build-stub
+
+build/psysh: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
+       rm -rf $@ || true
+       mkdir $@
+       cp -R $(PSYSH_SRC) $@/
+       composer config --working-dir $@ platform.php 7.0
+       composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0'
+       composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
+
+build/psysh-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
+       rm -rf $@ || true
+       mkdir $@
+       cp -R $(PSYSH_SRC) $@/
+       composer config --working-dir $@ platform.php 7.0
+       composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0'
+       composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console
+       composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
+
+build/psysh-php54: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
+       rm -rf $@ || true
+       mkdir $@
+       cp -R $(PSYSH_SRC) $@/
+       composer config --working-dir $@ platform.php 5.4
+       composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
+
+build/psysh-php54-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
+       rm -rf $@ || true
+       mkdir $@
+       cp -R $(PSYSH_SRC) $@/
+       composer config --working-dir $@ platform.php 5.4
+       composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console:^2.15
+       composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
+
+build/%/psysh: vendor/bin/box build/%
+       vendor/bin/box compile --working-dir $(dir $@)
+
+
+# Dist packages
+
+dist/psysh-$(VERSION).tar.gz: build/psysh/psysh
+       tar -czf $@ $<
+
+dist/psysh-$(VERSION)-%.tar.gz: build/psysh-%/psysh
+       tar -czf $@ $<
diff --git a/vendor/psy/psysh/bin/build b/vendor/psy/psysh/bin/build
deleted file mode 100755 (executable)
index 79f2192..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "${BASH_SOURCE%/*}/.."
-
-echo "Building phar"
-./bin/build-vendor
-php -d 'phar.readonly=0' ./bin/build-phar
-
-echo "Building compat phar"
-./bin/build-vendor-compat
-php -d 'phar.readonly=0' ./bin/build-phar --compat
diff --git a/vendor/psy/psysh/bin/build-manual b/vendor/psy/psysh/bin/build-manual
deleted file mode 100755 (executable)
index 432926a..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2017 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-define('WRAP_WIDTH', 100);
-
-$count = 0;
-
-if (count($argv) !== 3 || !is_dir($argv[1])) {
-    echo "usage: build_manual path/to/manual output_filename.db\n";
-    exit(1);
-}
-
-function htmlwrap($text, $width = null)
-{
-    if ($width === null) {
-        $width = WRAP_WIDTH;
-    }
-
-    $len = strlen($text);
-
-    $return = [];
-    $lastSpace = null;
-    $inTag = false;
-    $i = $tagWidth = 0;
-    do {
-        switch (substr($text, $i, 1)) {
-            case "\n":
-                $return[] = trim(substr($text, 0, $i));
-                $text     = substr($text, $i);
-                $len      = strlen($text);
-
-                $i = $lastSpace = 0;
-                continue;
-
-            case ' ':
-                if (!$inTag) {
-                    $lastSpace = $i;
-                }
-                break;
-
-            case '<':
-                $inTag = true;
-                break;
-
-            case '>':
-                $inTag = false;
-                break;
-        }
-
-        if ($inTag) {
-            $tagWidth++;
-        }
-
-        $i++;
-
-        if (!$inTag && ($i - $tagWidth > $width)) {
-            $lastSpace = $lastSpace ?: $width;
-
-            $return[] = trim(substr($text, 0, $lastSpace));
-            $text     = substr($text, $lastSpace);
-            $len      = strlen($text);
-
-            $i = $tagWidth = 0;
-        }
-    } while ($i < $len);
-
-    $return[] = trim($text);
-
-    return implode("\n", $return);
-}
-
-function extract_paragraphs($element)
-{
-    $paragraphs = [];
-    foreach ($element->getElementsByTagName('para') as $p) {
-        $text = '';
-        foreach ($p->childNodes as $child) {
-            // @todo figure out if there's something we can do with tables.
-            if ($child instanceof DOMElement && $child->tagName === 'table') {
-                continue;
-            }
-
-            // skip references, because ugh.
-            if (preg_match('{^\s*&[a-z][a-z\.]+;\s*$}', $child->textContent)) {
-                continue;
-            }
-
-            $text .= $child->ownerDocument->saveXML($child);
-        }
-
-        if ($text = trim(preg_replace('{\n[ \t]+}', ' ', $text))) {
-            $paragraphs[] = $text;
-        }
-    }
-
-    return implode("\n\n", $paragraphs);
-}
-
-function format_doc($doc)
-{
-    $chunks   = [];
-
-    if (!empty($doc['description'])) {
-        $chunks[] = '<comment>Description:</comment>';
-        $chunks[] = indent_text(htmlwrap(thunk_tags($doc['description']), WRAP_WIDTH - 2));
-        $chunks[] = '';
-    }
-
-    if (!empty($doc['params'])) {
-        $chunks[] = '<comment>Param:</comment>';
-
-        $typeMax = max(array_map(function ($param) {
-            return strlen($param['type']);
-        }, $doc['params']));
-
-        $max = max(array_map(function ($param) {
-            return strlen($param['name']);
-        }, $doc['params']));
-
-        $template  = '  <info>%-' . $typeMax . 's</info>  <strong>%-' . $max . 's</strong>  %s';
-        $indent    = str_repeat(' ', $typeMax + $max + 6);
-        $wrapWidth = WRAP_WIDTH - strlen($indent);
-
-        foreach ($doc['params'] as $param) {
-            $desc = indent_text(htmlwrap(thunk_tags($param['description']), $wrapWidth), $indent, false);
-            $chunks[] = sprintf($template, $param['type'], $param['name'], $desc);
-        }
-        $chunks[] = '';
-    }
-
-    if (isset($doc['return']) || isset($doc['return_type'])) {
-        $chunks[] = '<comment>Return:</comment>';
-
-        $type   = isset($doc['return_type']) ? $doc['return_type'] : 'unknown';
-        $desc   = isset($doc['return']) ? $doc['return'] : '';
-
-        $indent    = str_repeat(' ', strlen($type) + 4);
-        $wrapWidth = WRAP_WIDTH - strlen($indent);
-
-        if (!empty($desc)) {
-            $desc = indent_text(htmlwrap(thunk_tags($doc['return']), $wrapWidth), $indent, false);
-        }
-
-        $chunks[] = sprintf('  <info>%s</info>  %s', $type, $desc);
-        $chunks[] = '';
-    }
-
-    array_pop($chunks); // get rid of the trailing newline
-
-    return implode("\n", $chunks);
-}
-
-function thunk_tags($text)
-{
-    $tagMap = [
-        'parameter>' => 'strong>',
-        'function>'  => 'strong>',
-        'literal>'   => 'return>',
-        'type>'      => 'info>',
-        'constant>'  => 'info>',
-    ];
-
-    $andBack = [
-        '&amp;'       => '&',
-        '&amp;true;'  => '<return>true</return>',
-        '&amp;false;' => '<return>false</return>',
-        '&amp;null;'  => '<return>null</return>',
-    ];
-
-    return strtr(strip_tags(strtr($text, $tagMap), '<strong><return><info>'), $andBack);
-}
-
-function indent_text($text, $indent = '  ', $leading = true)
-{
-    return ($leading ? $indent : '') . str_replace("\n", "\n" . $indent, $text);
-}
-
-function find_type($xml, $paramName)
-{
-    foreach ($xml->getElementsByTagName('methodparam') as $param) {
-        if ($type = $param->getElementsByTagName('type')->item(0)) {
-            if ($parameter = $param->getElementsByTagName('parameter')->item(0)) {
-                if ($paramName === $parameter->textContent) {
-                    return $type->textContent;
-                }
-            }
-        }
-    }
-}
-
-function format_function_doc($xml)
-{
-    $doc = [];
-    $refsect1s = $xml->getElementsByTagName('refsect1');
-    foreach ($refsect1s as $refsect1) {
-        $role = $refsect1->getAttribute('role');
-        switch ($role) {
-            case 'description':
-                $doc['description'] = extract_paragraphs($refsect1);
-
-                if ($synopsis = $refsect1->getElementsByTagName('methodsynopsis')->item(0)) {
-                    foreach ($synopsis->childNodes as $node) {
-                        if ($node instanceof DOMElement && $node->tagName === 'type') {
-                            $doc['return_type'] = $node->textContent;
-                            break;
-                        }
-                    }
-                }
-                break;
-
-            case 'returnvalues':
-                // do nothing.
-                $doc['return'] = extract_paragraphs($refsect1);
-                break;
-
-            case 'parameters':
-                $params = [];
-                $vars = $refsect1->getElementsByTagName('varlistentry');
-                foreach ($vars as $var) {
-                    if ($name = $var->getElementsByTagName('parameter')->item(0)) {
-                        $params[] = [
-                            'name'        => '$' . $name->textContent,
-                            'type'        => find_type($xml, $name->textContent),
-                            'description' => extract_paragraphs($var),
-                        ];
-                    }
-                }
-
-                $doc['params'] = $params;
-                break;
-        }
-    }
-
-    // and the purpose
-    if ($purpose = $xml->getElementsByTagName('refpurpose')->item(0)) {
-        $desc = htmlwrap($purpose->textContent);
-        if (isset($doc['description'])) {
-            $desc .= "\n\n" . $doc['description'];
-        }
-
-        $doc['description'] = trim($desc);
-    }
-
-    $ids = [];
-    foreach ($xml->getElementsByTagName('refname') as $ref) {
-        $ids[] = $ref->textContent;
-    }
-
-    return [$ids, format_doc($doc)];
-}
-
-function format_class_doc($xml)
-{
-    // @todo implement this
-    return [[], null];
-}
-
-$dir = new RecursiveDirectoryIterator($argv[1]);
-$filter = new RecursiveCallbackFilterIterator($dir, function ($current, $key, $iterator) {
-    return $current->getFilename()[0] !== '.' &&
-        ($current->isDir() || $current->getExtension() === 'xml') &&
-        strpos($current->getFilename(), 'entities.') !== 0 &&
-        $current->getFilename() !== 'pdo_4d'; // Temporarily blacklist this one, the docs are weird.
-});
-$iterator = new RecursiveIteratorIterator($filter);
-
-$docs = [];
-foreach ($iterator as $file) {
-    $xmlstr = str_replace('&', '&amp;', file_get_contents($file));
-
-    $xml = new DOMDocument();
-    $xml->preserveWhiteSpace = false;
-
-    if (!@$xml->loadXml($xmlstr)) {
-        echo "XML Parse Error: $file\n";
-        continue;
-    }
-
-    if ($xml->getElementsByTagName('refentry')->length !== 0) {
-        list($ids, $doc) = format_function_doc($xml);
-    } elseif ($xml->getElementsByTagName('classref')->length !== 0) {
-        list($ids, $doc) = format_class_doc($xml);
-    } else {
-        $ids = [];
-        $doc = null;
-    }
-
-    foreach ($ids as $id) {
-        $docs[$id] = $doc;
-    }
-}
-
-if (is_file($argv[2])) {
-    unlink($argv[2]);
-}
-
-$db = new PDO('sqlite:' . $argv[2]);
-
-$db->query('CREATE TABLE php_manual (id char(256) PRIMARY KEY, doc TEXT)');
-$cmd = $db->prepare('INSERT INTO php_manual (id, doc) VALUES (?, ?)');
-foreach ($docs as $id => $doc) {
-    $cmd->execute([$id, $doc]);
-}
diff --git a/vendor/psy/psysh/bin/build-phar b/vendor/psy/psysh/bin/build-phar
deleted file mode 100755 (executable)
index 43db2f6..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2017 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-if (!is_file(dirname(__DIR__) . '/vendor/autoload.php')) {
-    throw new RuntimeException('Missing PsySH dev dependencies in ' . dirname(__DIR__) . '/vendor/' . ', install with `composer.phar install --dev`.');
-}
-
-require dirname(__DIR__) . '/vendor/autoload.php';
-
-if (!class_exists('Symfony\Component\Finder\Finder')) {
-    throw new RuntimeException('Missing PsySH dev dependencies, install with `composer.phar install --dev`.');
-}
-
-if (!is_file(dirname(__DIR__) . '/build-vendor/autoload.php')) {
-    throw new RuntimeException('Missing phar vendor dependencies, install with bin/build-vendor');
-}
-
-use Psy\Compiler;
-
-error_reporting(-1);
-ini_set('display_errors', 1);
-
-$compiler = new Compiler();
-
-if (isset($_SERVER['argv']) && isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] === '--compat') {
-    $compiler->compile('psysh-compat.phar');
-} else {
-    $compiler->compile();
-}
diff --git a/vendor/psy/psysh/bin/build-stub b/vendor/psy/psysh/bin/build-stub
new file mode 100755 (executable)
index 0000000..0d26110
--- /dev/null
@@ -0,0 +1,22 @@
+#!/usr/bin/env php
+<?php
+
+$license = file_get_contents(dirname(__DIR__) . '/LICENSE');
+$license = str_replace('The MIT License (MIT)', '', $license);
+$license = str_replace("\n", "\n * ", trim($license));
+
+$autoload = <<<'EOS'
+    Phar::mapPhar('psysh.phar');
+    require 'phar://psysh.phar/.box/check_requirements.php';
+    require 'phar://psysh.phar/vendor/autoload.php';
+EOS;
+
+$content = file_get_contents(dirname(__DIR__) . '/bin/psysh');
+$content = preg_replace('{/\* <<<.*?>>> \*/}sm', $autoload, $content);
+$content = preg_replace('/\\(c\\) .*?with this source code./sm', $license, $content);
+
+$content .= '__HALT_COMPILER();';
+
+@mkdir(dirname(__DIR__) . '/build');
+
+file_put_contents(dirname(__DIR__) . '/build/stub', $content);
diff --git a/vendor/psy/psysh/bin/build-vendor b/vendor/psy/psysh/bin/build-vendor
deleted file mode 100755 (executable)
index f0057d5..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "${BASH_SOURCE%/*}/.."
-
-rm -rf build-vendor
-
-COMPOSER_VENDOR_DIR=build-vendor composer update \
-  --prefer-stable --no-dev --no-progress --classmap-authoritative --no-interaction --verbose
diff --git a/vendor/psy/psysh/bin/build-vendor-compat b/vendor/psy/psysh/bin/build-vendor-compat
deleted file mode 100755 (executable)
index 5098a8b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "${BASH_SOURCE%/*}/.."
-
-rm -rf build-vendor
-rm -f composer-*.lock
-
-cp composer.json composer-compat.json
-
-if [[ $(php --version) = PHP\ 5.4* ]]; then
-  HOA_VERSION=^2.15
-fi
-
-COMPOSER=composer-compat.json COMPOSER_VENDOR_DIR=build-vendor \
-  composer require symfony/intl hoa/console $HOA_VERSION --no-progress --no-update --no-interaction --verbose
-
-COMPOSER=composer-compat.json COMPOSER_VENDOR_DIR=build-vendor \
-  composer update --prefer-stable --no-dev --no-progress --classmap-authoritative --no-interaction --verbose
-
diff --git a/vendor/psy/psysh/bin/package b/vendor/psy/psysh/bin/package
deleted file mode 100755 (executable)
index 6b65824..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "${BASH_SOURCE%/*}/.."
-
-USAGE="usage: bin/package [-v PACKAGE_VERSION]"
-
-while getopts ":v:h" opt; do
-  case $opt in
-    v)
-      PKG_VERSION="v${OPTARG#v}"
-      ;;
-    h)
-      echo $USAGE >&2
-      exit
-      ;;
-    \?)
-      echo "Invalid option: -$OPTARG" >&2
-      echo $USAGE >&2
-      exit 1
-      ;;
-    :)
-      echo "Option -$OPTARG requires an argument" >&2
-      echo $USAGE >&2
-      exit 1
-      ;;
-  esac
-done
-
-if [ -z "$PKG_VERSION" ]; then
-  PKG_VERSION=$(git describe --tag --exact-match)
-fi
-
-if [[ $(php --version) = PHP\ 5.4* ]]; then
-  PKG_VERSION=${PKG_VERSION}-php54
-fi
-
-echo "Packaging $PKG_VERSION"
-
-mkdir -p dist || exit 1
-
-./bin/build || exit 1
-chmod +x *.phar
-
-echo "Creating tarballs"
-
-# Support BSD tar because OS X :(
-if [[ $(tar --version) = bsdtar* ]]; then
-  tar -s "/.*/psysh/" -czf dist/psysh-${PKG_VERSION}.tar.gz psysh.phar
-  tar -s "/.*/psysh/" -czf dist/psysh-${PKG_VERSION}-compat.tar.gz psysh-compat.phar
-else
-  tar --transform "s/.*/psysh/" -czf dist/psysh-${PKG_VERSION}.tar.gz psysh.phar
-  tar --transform "s/.*/psysh/" -czf dist/psysh-${PKG_VERSION}-compat.tar.gz psysh-compat.phar
-fi
diff --git a/vendor/psy/psysh/box.json.dist b/vendor/psy/psysh/box.json.dist
new file mode 100644 (file)
index 0000000..32305a5
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "stub": "stub",
+    "output": "psysh",
+    "compactors": [
+        "KevinGH\\Box\\Compactor\\Php"
+    ],
+    "chmod": "0755",
+    "blacklist": [
+        "grammar",
+        "test_old",
+        "Documentation"
+    ]
+}
index 4bfe652f6f74b1d7a7c4d7934cd83bbd224378cf..3e169be91fc31d5658766850829fc3e2d909ccb7 100644 (file)
@@ -22,8 +22,8 @@
     },
     "require-dev": {
         "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0",
-        "symfony/finder": "~2.1|~3.0|~4.0",
-        "hoa/console": "~2.15|~3.16"
+        "hoa/console": "~2.15|~3.16",
+        "bamarni/composer-bin-plugin": "^1.2"
     },
     "suggest": {
         "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
index 5db277e1365bbca0e5e54a787cfbebef9f403f2c..0f0d378f7e2ec68ab347c394f39edbdf2aa581c9 100644 (file)
@@ -26,6 +26,7 @@ use Psy\CodeCleaner\ImplicitReturnPass;
 use Psy\CodeCleaner\InstanceOfPass;
 use Psy\CodeCleaner\LeavePsyshAlonePass;
 use Psy\CodeCleaner\LegacyEmptyPass;
+use Psy\CodeCleaner\ListPass;
 use Psy\CodeCleaner\LoopContextPass;
 use Psy\CodeCleaner\MagicConstantsPass;
 use Psy\CodeCleaner\NamespacePass;
@@ -99,6 +100,7 @@ class CodeCleaner
             new InstanceOfPass(),
             new LeavePsyshAlonePass(),
             new LegacyEmptyPass(),
+            new ListPass(),
             new LoopContextPass(),
             new PassableByReferencePass(),
             new ValidConstructorPass(),
index e883a807bc13e07d6fee105688f859a3f764509a..c3aad342f9fc6b462f52581820b0c161a2ad3c25 100644 (file)
@@ -68,7 +68,7 @@ class FunctionReturnInWriteContextPass extends CodeCleanerPass
                 throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
             }
         } elseif ($node instanceof Empty_ && !$this->atLeastPhp55 && $this->isCallNode($node->expr)) {
-            throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine());
+            throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); // @codeCoverageIgnore
         } elseif ($node instanceof Assign && $this->isCallNode($node->var)) {
             throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine());
         }
index 82bb21d8b42b63989589f291c4c96ee85171677d..60826712b5c113e007a60ed56303a9b66a20d6d7 100644 (file)
@@ -77,10 +77,12 @@ class ImplicitReturnPass extends CodeCleanerPass
                 }
             }
         } elseif ($last instanceof Expr && !($last instanceof Exit_)) {
+            // @codeCoverageIgnoreStart
             $nodes[count($nodes) - 1] = new Return_($last, [
                 'startLine' => $last->getLine(),
                 'endLine'   => $last->getLine(),
             ]);
+        // @codeCoverageIgnoreEnd
         } elseif ($last instanceof Expression && !($last->expr instanceof Exit_)) {
             // For PHP Parser 4.x
             $nodes[count($nodes) - 1] = new Return_($last->expr, [
index d1dba096c3b38114f65baeba3fc01a0431e3dd8d..a298c849448a11f244b5d9ff192b058f3d03d69a 100644 (file)
@@ -19,6 +19,8 @@ use Psy\Exception\ParseErrorException;
 /**
  * Validate that the user did not call the language construct `empty()` on a
  * statement in PHP < 5.5.
+ *
+ * @codeCoverageIgnore
  */
 class LegacyEmptyPass extends CodeCleanerPass
 {
diff --git a/vendor/psy/psysh/src/CodeCleaner/ListPass.php b/vendor/psy/psysh/src/CodeCleaner/ListPass.php
new file mode 100644 (file)
index 0000000..0b44082
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr\Array_;
+use PhpParser\Node\Expr\ArrayItem;
+use PhpParser\Node\Expr\Assign;
+use PhpParser\Node\Expr\List_;
+use PhpParser\Node\Expr\Variable;
+use Psy\Exception\ParseErrorException;
+
+/**
+ * Validate that the list assignment.
+ */
+class ListPass extends CodeCleanerPass
+{
+    private $atLeastPhp71;
+
+    public function __construct()
+    {
+        $this->atLeastPhp71 = version_compare(PHP_VERSION, '7.1', '>=');
+    }
+
+    /**
+     * Validate use of list assignment.
+     *
+     * @throws ParseErrorException if the user used empty with anything but a variable
+     *
+     * @param Node $node
+     */
+    public function enterNode(Node $node)
+    {
+        if (!$node instanceof Assign) {
+            return;
+        }
+
+        if (!$node->var instanceof Array_ && !$node->var instanceof List_) {
+            return;
+        }
+
+        if (!$this->atLeastPhp71 && $node->var instanceof Array_) {
+            $msg = "syntax error, unexpected '='";
+            throw new ParseErrorException($msg, $node->expr->getLine());
+        }
+
+        // Polyfill for PHP-Parser 2.x
+        $items = isset($node->var->items) ? $node->var->items : $node->var->vars;
+
+        if ($items === [] || $items === [null]) {
+            throw new ParseErrorException('Cannot use empty list', $node->var->getLine());
+        }
+
+        foreach ($items as $item) {
+            if ($item === null) {
+                throw new ParseErrorException('Cannot use empty list', $item->getLine());
+            }
+
+            // List_->$vars in PHP-Parser 2.x is Variable instead of ArrayItem.
+            if (!$this->atLeastPhp71 && $item instanceof ArrayItem && $item->key !== null) {
+                $msg = 'Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \',\' or \')\'';
+                throw new ParseErrorException($msg, $item->key->getLine());
+            }
+
+            $value = ($item instanceof ArrayItem) ? $item->value : $item;
+
+            if (!$value instanceof Variable) {
+                $msg = 'Assignments can only happen to writable values';
+                throw new ParseErrorException($msg, $item->getLine());
+            }
+        }
+    }
+}
index 81bf839f4550a152d31f2b1bc86aebf101130d43..a63fe75e7258cb829404562b767505c1d1ca8320 100644 (file)
@@ -52,7 +52,7 @@ class StrictTypesPass extends CodeCleanerPass
     public function beforeTraverse(array $nodes)
     {
         if (!$this->atLeastPhp7) {
-            return;
+            return; // @codeCoverageIgnore
         }
 
         $prependStrictTypes = $this->strictTypes;
index f62e2a4a62e1ec75a11b2a4ba608ce07c486d138..5de75d5f9154853cffb5b033b0dc960b46e72f70 100644 (file)
@@ -117,7 +117,7 @@ class ValidClassNamePass extends NamespaceAwarePass
      */
     protected function validateClassStatement(Class_ $stmt)
     {
-        $this->ensureCanDefine($stmt);
+        $this->ensureCanDefine($stmt, self::CLASS_TYPE);
         if (isset($stmt->extends)) {
             $this->ensureClassExists($this->getFullyQualifiedName($stmt->extends), $stmt);
         }
@@ -131,7 +131,7 @@ class ValidClassNamePass extends NamespaceAwarePass
      */
     protected function validateInterfaceStatement(Interface_ $stmt)
     {
-        $this->ensureCanDefine($stmt);
+        $this->ensureCanDefine($stmt, self::INTERFACE_TYPE);
         $this->ensureInterfacesExist($stmt->extends, $stmt);
     }
 
@@ -142,7 +142,7 @@ class ValidClassNamePass extends NamespaceAwarePass
      */
     protected function validateTraitStatement(Trait_ $stmt)
     {
-        $this->ensureCanDefine($stmt);
+        $this->ensureCanDefine($stmt, self::TRAIT_TYPE);
     }
 
     /**
@@ -194,9 +194,10 @@ class ValidClassNamePass extends NamespaceAwarePass
      *
      * @throws FatalErrorException
      *
-     * @param Stmt $stmt
+     * @param Stmt   $stmt
+     * @param string $scopeType
      */
-    protected function ensureCanDefine(Stmt $stmt)
+    protected function ensureCanDefine(Stmt $stmt, $scopeType = self::CLASS_TYPE)
     {
         $name = $this->getFullyQualifiedName($stmt->name);
 
@@ -216,7 +217,7 @@ class ValidClassNamePass extends NamespaceAwarePass
 
         // Store creation for the rest of this code snippet so we can find local
         // issue too
-        $this->currentScope[strtolower($name)] = $this->getScopeType($stmt);
+        $this->currentScope[strtolower($name)] = $scopeType;
     }
 
     /**
@@ -304,6 +305,9 @@ class ValidClassNamePass extends NamespaceAwarePass
     /**
      * Get a symbol type key for storing in the scope name cache.
      *
+     * @deprecated No longer used. Scope type should be passed into ensureCanDefine directly.
+     * @codeCoverageIgnore
+     *
      * @param Stmt $stmt
      *
      * @return string
index 0bf8327c919a52d088249b8cf87e9057996a9f12..8e1091d63cdfbfd5b8a4c6b124c76d9f17896a66 100644 (file)
@@ -14,6 +14,7 @@ namespace Psy\Command;
 use Psy\CodeCleaner\NoReturnValue;
 use Psy\Context;
 use Psy\ContextAware;
+use Psy\Exception\ErrorException;
 use Psy\Exception\RuntimeException;
 use Psy\Util\Mirror;
 
@@ -84,6 +85,8 @@ abstract class ReflectingCommand extends Command implements ContextAware
     /**
      * Resolve a class or function name (with the current shell namespace).
      *
+     * @throws ErrorException when `self` or `static` is used in a non-class scope
+     *
      * @param string $name
      * @param bool   $includeFunctions (default: false)
      *
@@ -91,11 +94,27 @@ abstract class ReflectingCommand extends Command implements ContextAware
      */
     protected function resolveName($name, $includeFunctions = false)
     {
+        $shell = $this->getApplication();
+
+        // While not *technically* 100% accurate, let's treat `self` and `static` as equivalent.
+        if (in_array(strtolower($name), ['self', 'static'])) {
+            if ($boundClass = $shell->getBoundClass()) {
+                return $boundClass;
+            }
+
+            if ($boundObject = $shell->getBoundObject()) {
+                return get_class($boundObject);
+            }
+
+            $msg = sprintf('Cannot use "%s" when no class scope is active', strtolower($name));
+            throw new ErrorException($msg, 0, E_USER_ERROR, "eval()'d code", 1);
+        }
+
         if (substr($name, 0, 1) === '\\') {
             return $name;
         }
 
-        if ($namespace = $this->getApplication()->getNamespace()) {
+        if ($namespace = $shell->getNamespace()) {
             $fullName = $namespace . '\\' . $name;
 
             if (class_exists($fullName) || interface_exists($fullName) || ($includeFunctions && function_exists($fullName))) {
index b9e37c64a49979d6386df3c502acb938349130b6..becc583164d381f55b502c1d55d208c603af0632 100644 (file)
@@ -126,7 +126,7 @@ HELP
             $line     = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
 
             // Leave execution loop out of the `eval()'d code` lines
-            if (preg_match("#/src/ExecutionClosure.php\(\d+\) : eval\(\)'d code$#", str_replace('\\', '/', $file))) {
+            if (preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", str_replace('\\', '/', $file))) {
                 $file = "eval()'d code";
             }
 
diff --git a/vendor/psy/psysh/src/Compiler.php b/vendor/psy/psysh/src/Compiler.php
deleted file mode 100644 (file)
index b777c4d..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy;
-
-use Symfony\Component\Finder\Finder;
-
-/**
- * A Psy Shell Phar compiler.
- */
-class Compiler
-{
-    private $version;
-
-    /**
-     * Compiles psysh into a single phar file.
-     *
-     * @param string $pharFile The full path to the file to create
-     */
-    public function compile($pharFile = 'psysh.phar')
-    {
-        if (file_exists($pharFile)) {
-            unlink($pharFile);
-        }
-
-        $this->version = Shell::VERSION;
-
-        $phar = new \Phar($pharFile, 0, 'psysh.phar');
-        $phar->setSignatureAlgorithm(\Phar::SHA1);
-
-        $phar->startBuffering();
-
-        $finder = Finder::create()
-            ->files()
-            ->ignoreVCS(true)
-            ->name('*.php')
-            ->notName('Compiler.php')
-            ->in(__DIR__);
-
-        foreach ($finder as $file) {
-            $this->addFile($phar, $file);
-        }
-
-        $finder = Finder::create()
-            ->files()
-            ->ignoreVCS(true)
-            ->name('*.php')
-            ->exclude('Tests')
-            ->exclude('tests')
-            ->exclude('Test')
-            ->exclude('test')
-            ->in(dirname(__DIR__) . '/build-vendor');
-
-        foreach ($finder as $file) {
-            $this->addFile($phar, $file);
-        }
-
-        // Stubs
-        $phar->setStub($this->getStub());
-
-        $phar->stopBuffering();
-
-        unset($phar);
-    }
-
-    /**
-     * Add a file to the psysh Phar.
-     *
-     * @param \Phar        $phar
-     * @param \SplFileInfo $file
-     * @param bool         $strip (default: true)
-     */
-    private function addFile($phar, $file, $strip = true)
-    {
-        $path = str_replace(dirname(__DIR__) . DIRECTORY_SEPARATOR, '', $file->getRealPath());
-
-        $content = file_get_contents($file);
-        if ($strip) {
-            $content = $this->stripWhitespace($content);
-        } elseif ('LICENSE' === basename($file)) {
-            $content = "\n" . $content . "\n";
-        }
-
-        $phar->addFromString($path, $content);
-    }
-
-    /**
-     * Removes whitespace from a PHP source string while preserving line numbers.
-     *
-     * @param string $source A PHP string
-     *
-     * @return string The PHP string with the whitespace removed
-     */
-    private function stripWhitespace($source)
-    {
-        if (!function_exists('token_get_all')) {
-            return $source;
-        }
-
-        $output = '';
-        foreach (token_get_all($source) as $token) {
-            if (is_string($token)) {
-                $output .= $token;
-            } elseif (in_array($token[0], [T_COMMENT, T_DOC_COMMENT])) {
-                $output .= str_repeat("\n", substr_count($token[1], "\n"));
-            } elseif (T_WHITESPACE === $token[0]) {
-                // reduce wide spaces
-                $whitespace = preg_replace('{[ \t]+}', ' ', $token[1]);
-                // normalize newlines to \n
-                $whitespace = preg_replace('{(?:\r\n|\r|\n)}', "\n", $whitespace);
-                // trim leading spaces
-                $whitespace = preg_replace('{\n +}', "\n", $whitespace);
-                $output .= $whitespace;
-            } else {
-                $output .= $token[1];
-            }
-        }
-
-        return $output;
-    }
-
-    private static function getStubLicense()
-    {
-        $license = file_get_contents(dirname(__DIR__) . '/LICENSE');
-        $license = str_replace('The MIT License (MIT)', '', $license);
-        $license = str_replace("\n", "\n * ", trim($license));
-
-        return $license;
-    }
-
-    const STUB_AUTOLOAD = <<<'EOS'
-    Phar::mapPhar('psysh.phar');
-    require 'phar://psysh.phar/build-vendor/autoload.php';
-EOS;
-
-    /**
-     * Get a Phar stub for psysh.
-     *
-     * This is basically the psysh bin, with the autoload require statements swapped out.
-     *
-     * @return string
-     */
-    private function getStub()
-    {
-        $content = file_get_contents(dirname(__DIR__) . '/bin/psysh');
-        $content = preg_replace('{/\* <<<.*?>>> \*/}sm', self::STUB_AUTOLOAD, $content);
-        $content = preg_replace('/\\(c\\) .*?with this source code./sm', self::getStubLicense(), $content);
-
-        $content .= '__HALT_COMPILER();';
-
-        return $content;
-    }
-}
index 41e0f64df1b2e944e0eddfd17c99423dafb51e53..c0e58e89b17f246d1bcf8ba9d8f9a68bf19d11d1 100644 (file)
@@ -33,6 +33,7 @@ class Context
     private $lastException;
     private $lastStdout;
     private $boundObject;
+    private $boundClass;
 
     /**
      * Get a context variable.
@@ -221,11 +222,14 @@ class Context
     /**
      * Set the bound object ($this variable) for the interactive shell.
      *
+     * Note that this unsets the bound class, if any exists.
+     *
      * @param object|null $boundObject
      */
     public function setBoundObject($boundObject)
     {
         $this->boundObject = is_object($boundObject) ? $boundObject : null;
+        $this->boundClass = null;
     }
 
     /**
@@ -238,6 +242,29 @@ class Context
         return $this->boundObject;
     }
 
+    /**
+     * Set the bound class (self) for the interactive shell.
+     *
+     * Note that this unsets the bound object, if any exists.
+     *
+     * @param string|null $boundClass
+     */
+    public function setBoundClass($boundClass)
+    {
+        $this->boundClass = (is_string($boundClass) && $boundClass !== '') ? $boundClass : null;
+        $this->boundObject = null;
+    }
+
+    /**
+     * Get the bound class (self) for the interactive shell.
+     *
+     * @return string|null
+     */
+    public function getBoundClass()
+    {
+        return $this->boundClass;
+    }
+
     /**
      * Set command-scope magic variables: $__class, $__file, etc.
      *
index fe7ef129419fd55974ce5fd115ae1147917bad9a..9dbdb936517769ed4a3555d9f3e22a4fdcc4cbb2 100644 (file)
@@ -50,6 +50,6 @@ class TypeErrorException extends \Exception implements Exception
      */
     public static function fromTypeError(\TypeError $e)
     {
-        return new self($e->getMessage(), $e->getLine());
+        return new self($e->getMessage(), $e->getCode());
     }
 }
index d2c551b8c14d2409d1d995b532177e8993cb5950..29a3bcc6d9169eeef89614069aec0a800b3ae28b 100644 (file)
@@ -25,7 +25,7 @@ class ExecutionClosure
      */
     public function __construct(Shell $__psysh__)
     {
-        $exec = function () use ($__psysh__) {
+        $this->setClosure($__psysh__, function () use ($__psysh__) {
             try {
                 // Restore execution scope variables
                 extract($__psysh__->getScopeVariables(false));
@@ -66,20 +66,27 @@ class ExecutionClosure
             $__psysh__->setScopeVariables(get_defined_vars());
 
             return $_;
-        };
+        });
+    }
 
+    /**
+     * Set the closure instance.
+     *
+     * @param Shell    $psysh
+     * @param \Closure $closure
+     */
+    protected function setClosure(Shell $shell, \Closure $closure)
+    {
         if (self::shouldBindClosure()) {
-            $that = $__psysh__->getBoundObject();
+            $that = $shell->getBoundObject();
             if (is_object($that)) {
-                $this->closure = $exec->bindTo($that, get_class($that));
+                $closure = $closure->bindTo($that, get_class($that));
             } else {
-                $this->closure = $exec->bindTo(null, null);
+                $closure = $closure->bindTo(null, $shell->getBoundClass());
             }
-
-            return;
         }
 
-        $this->closure = $exec;
+        $this->closure = $closure;
     }
 
     /**
index 59f043723c9457bb87e5b80e004153f556ae3f37..eacd1d3c4fba2735d76bbf96e3b1258c374cd417 100644 (file)
 
 namespace Psy;
 
-use Psy\Exception\BreakException;
 use Psy\Exception\ErrorException;
-use Psy\Exception\ThrowUpException;
-use Psy\Exception\TypeErrorException;
 
 /**
  * The Psy Shell execution loop.
@@ -32,33 +29,8 @@ class ExecutionLoop
     {
         $this->loadIncludes($shell);
 
-        $closure = new ExecutionClosure($shell);
-
-        do {
-            $shell->beforeLoop();
-
-            try {
-                $shell->getInput();
-                $_ = $closure->execute();
-                $shell->writeReturnValue($_);
-            } catch (BreakException $_e) {
-                $shell->writeException($_e);
-
-                return;
-            } catch (ThrowUpException $_e) {
-                $shell->writeException($_e);
-
-                throw $_e;
-            } catch (\TypeError $_e) {
-                $shell->writeException(TypeErrorException::fromTypeError($_e));
-            } catch (\Error $_e) {
-                $shell->writeException(ErrorException::fromError($_e));
-            } catch (\Exception $_e) {
-                $shell->writeException($_e);
-            }
-
-            $shell->afterLoop();
-        } while (true);
+        $closure = new ExecutionLoopClosure($shell);
+        $closure->execute();
     }
 
     /**
diff --git a/vendor/psy/psysh/src/ExecutionLoopClosure.php b/vendor/psy/psysh/src/ExecutionLoopClosure.php
new file mode 100644 (file)
index 0000000..e34848e
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy;
+
+use Psy\Exception\BreakException;
+use Psy\Exception\ErrorException;
+use Psy\Exception\ThrowUpException;
+use Psy\Exception\TypeErrorException;
+
+/**
+ * The Psy Shell's execution loop scope.
+ *
+ * @todo Once we're on PHP 5.5, we can switch ExecutionClosure to a generator
+ * and get rid of the duplicate closure implementations :)
+ */
+class ExecutionLoopClosure extends ExecutionClosure
+{
+    /**
+     * @param Shell $__psysh__
+     */
+    public function __construct(Shell $__psysh__)
+    {
+        $this->setClosure($__psysh__, function () use ($__psysh__) {
+            // Restore execution scope variables
+            extract($__psysh__->getScopeVariables(false));
+
+            do {
+                $__psysh__->beforeLoop();
+
+                try {
+                    $__psysh__->getInput();
+
+                    try {
+                        // Buffer stdout; we'll need it later
+                        ob_start([$__psysh__, 'writeStdout'], 1);
+
+                        // Convert all errors to exceptions
+                        set_error_handler([$__psysh__, 'handleError']);
+
+                        // Evaluate the current code buffer
+                        $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT));
+                    } catch (\Throwable $_e) {
+                        // Clean up on our way out.
+                        restore_error_handler();
+                        if (ob_get_level() > 0) {
+                            ob_end_clean();
+                        }
+
+                        throw $_e;
+                    } catch (\Exception $_e) {
+                        // Clean up on our way out.
+                        restore_error_handler();
+                        if (ob_get_level() > 0) {
+                            ob_end_clean();
+                        }
+
+                        throw $_e;
+                    }
+
+                    // Won't be needing this anymore
+                    restore_error_handler();
+
+                    // Flush stdout (write to shell output, plus save to magic variable)
+                    ob_end_flush();
+
+                    // Save execution scope variables for next time
+                    $__psysh__->setScopeVariables(get_defined_vars());
+
+                    $__psysh__->writeReturnValue($_);
+                } catch (BreakException $_e) {
+                    $__psysh__->writeException($_e);
+
+                    return;
+                } catch (ThrowUpException $_e) {
+                    $__psysh__->writeException($_e);
+
+                    throw $_e;
+                } catch (\TypeError $_e) {
+                    $__psysh__->writeException(TypeErrorException::fromTypeError($_e));
+                } catch (\Error $_e) {
+                    $__psysh__->writeException(ErrorException::fromError($_e));
+                } catch (\Exception $_e) {
+                    $__psysh__->writeException($_e);
+                }
+
+                $__psysh__->afterLoop();
+            } while (true);
+        });
+    }
+}
index 5117363a36e92f9dbca62aa9ba8c22a3e5e1bf2e..5ef195dffdb50f7e1eb3426f67bc4ed9db8c7188 100644 (file)
@@ -37,10 +37,6 @@ class CodeFormatter implements Formatter
 
         $colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
 
-        if ($reflector instanceof \ReflectionGenerator) {
-            $reflector = $reflector->getFunction();
-        }
-
         if ($fileName = $reflector->getFileName()) {
             if (!is_file($fileName)) {
                 throw new RuntimeException('Source code unavailable');
@@ -70,7 +66,6 @@ class CodeFormatter implements Formatter
     private static function isReflectable(\Reflector $reflector)
     {
         return $reflector instanceof \ReflectionClass ||
-            $reflector instanceof \ReflectionFunctionAbstract ||
-            $reflector instanceof \ReflectionGenerator;
+            $reflector instanceof \ReflectionFunctionAbstract;
     }
 }
index 4a0bfa8e9294156987f82de3567c49dd1466b319..0ef3e8b32d357bdf4d041cb90f5c35f6ea1ff9e5 100644 (file)
@@ -78,6 +78,14 @@ class SignatureFormatter implements Formatter
      */
     private static function formatModifiers(\Reflector $reflector)
     {
+        if ($reflector instanceof \ReflectionClass && $reflector->isTrait()) {
+            // For some reason, PHP 5.x returns `abstract public` modifiers for
+            // traits. Let's just ignore that business entirely.
+            if (version_compare(PHP_VERSION, '7.0.0', '<')) {
+                return [];
+            }
+        }
+
         return implode(' ', array_map(function ($modifier) {
             return sprintf('<keyword>%s</keyword>', $modifier);
         }, \Reflection::getModifierNames($reflector->getModifiers())));
@@ -161,7 +169,7 @@ class SignatureFormatter implements Formatter
         } elseif (is_bool($value) || is_null($value)) {
             return 'bool';
         } else {
-            return 'strong';
+            return 'strong'; // @codeCoverageIgnore
         }
     }
 
@@ -238,11 +246,14 @@ class SignatureFormatter implements Formatter
                 // come to think of it, the only time I've seen this is with the intl extension.
 
                 // Hax: we'll try to extract it :P
+
+                // @codeCoverageIgnoreStart
                 $chunks = explode('$' . $param->getName(), (string) $param);
                 $chunks = explode(' ', trim($chunks[0]));
                 $guess  = end($chunks);
 
                 $hint = sprintf('<urgent>%s</urgent> ', $guess);
+                // @codeCoverageIgnoreEnd
             }
 
             if ($param->isOptional()) {
index 3e5325b8560511f14ba967728da1dbabd3d0cada..bda0819467b19ece0a9f0cb69a724d6cd5a0cea4 100644 (file)
@@ -76,7 +76,7 @@ class ReflectionLanguageConstruct extends \ReflectionFunctionAbstract
      */
     public function __construct($keyword)
     {
-        if (self::isLanguageConstruct($keyword)) {
+        if (!self::isLanguageConstruct($keyword)) {
             throw new \InvalidArgumentException('Unknown language construct: ' . $keyword);
         }
 
@@ -128,6 +128,18 @@ class ReflectionLanguageConstruct extends \ReflectionFunctionAbstract
         return $params;
     }
 
+    /**
+     * Gets the file name from a language construct.
+     *
+     * (Hint: it always returns false)
+     *
+     * @return bool false
+     */
+    public function getFileName()
+    {
+        return false;
+    }
+
     /**
      * To string.
      *
index 47a32ae7f888f13829959b6bd0c13487de907c47..2a82facdd9dbaacedf60110731e2b46eace315aa 100644 (file)
@@ -47,7 +47,7 @@ use Symfony\Component\Console\Output\OutputInterface;
  */
 class Shell extends Application
 {
-    const VERSION = 'v0.9.3';
+    const VERSION = 'v0.9.4';
 
     const PROMPT      = '>>> ';
     const BUFF_PROMPT = '... ';
@@ -118,14 +118,14 @@ class Shell extends Application
      * @see Psy\debug
      * @deprecated will be removed in 1.0. Use \Psy\debug instead
      *
-     * @param array  $vars        Scope variables from the calling context (default: array())
-     * @param object $boundObject Bound object ($this) value for the shell
+     * @param array         $vars   Scope variables from the calling context (default: array())
+     * @param object|string $bindTo Bound object ($this) or class (self) value for the shell
      *
      * @return array Scope variables from the debugger session
      */
-    public static function debug(array $vars = [], $boundObject = null)
+    public static function debug(array $vars = [], $bindTo = null)
     {
-        return \Psy\debug($vars, $boundObject);
+        return \Psy\debug($vars, $bindTo);
     }
 
     /**
@@ -392,13 +392,14 @@ class Shell extends Application
             }
 
             // handle empty input
-            if (trim($input) === '') {
+            if (trim($input) === '' && !$this->codeBufferOpen) {
                 continue;
             }
 
             $input = $this->onInput($input);
 
-            if ($this->hasCommand($input)) {
+            // If the input isn't in an open string or comment, check for commands to run.
+            if ($this->hasCommand($input) && !$this->inputInOpenStringOrComment($input)) {
                 $this->addHistory($input);
                 $this->runCommand($input);
 
@@ -409,6 +410,28 @@ class Shell extends Application
         } while (!$this->hasValidCode());
     }
 
+    /**
+     * Check whether the code buffer (plus current input) is in an open string or comment.
+     *
+     * @param string $input current line of input
+     *
+     * @return bool true if the input is in an open string or comment
+     */
+    private function inputInOpenStringOrComment($input)
+    {
+        if (!$this->hasCode()) {
+            return;
+        }
+
+        $code = $this->codeBuffer;
+        array_push($code, $input);
+        $tokens = @token_get_all('<?php ' . implode("\n", $code));
+        $last = array_pop($tokens);
+
+        return $last === '"' || $last === '`' ||
+            (is_array($last) && in_array($last[0], [T_ENCAPSED_AND_WHITESPACE, T_START_HEREDOC, T_COMMENT]));
+    }
+
     /**
      * Run execution loop listeners before the shell session.
      */
@@ -587,6 +610,26 @@ class Shell extends Application
         return $this->context->getBoundObject();
     }
 
+    /**
+     * Set the bound class (self) for the interactive shell.
+     *
+     * @param string|null $boundClass
+     */
+    public function setBoundClass($boundClass)
+    {
+        $this->context->setBoundClass($boundClass);
+    }
+
+    /**
+     * Get the bound class (self) for the interactive shell.
+     *
+     * @return string|null
+     */
+    public function getBoundClass()
+    {
+        return $this->context->getBoundClass();
+    }
+
     /**
      * Add includes, to be parsed and executed before running the interactive shell.
      *
@@ -945,7 +988,7 @@ class Shell extends Application
         }
 
         $message = preg_replace(
-            "#(\\w:)?(/\\w+)*/src/ExecutionClosure.php\(\d+\) : eval\(\)'d code#",
+            "#(\\w:)?(/\\w+)*/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code#",
             "eval()'d code",
             str_replace('\\', '/', $message)
         );
@@ -1089,9 +1132,8 @@ class Shell extends Application
      */
     protected function hasCommand($input)
     {
-        $input = new StringInput($input);
-        if ($name = $input->getFirstArgument()) {
-            return $this->has($name);
+        if (preg_match('/([^\s]+?)(?:\s|$)/A', ltrim($input), $match)) {
+            return $this->has($match[1]);
         }
 
         return false;
index a9a093fca3493c5728e0ab2aa6680db6495e4963..efa9e57e49c44178d71211eba44b55894dd0a622 100644 (file)
@@ -86,6 +86,10 @@ abstract class AbstractMatcher
             [self::T_NS_SEPARATOR, self::T_STRING],
             $token = array_pop($tokens)
         )) {
+            if (self::needCompleteClass($token)) {
+                continue;
+            }
+
             $class = $token[1] . $class;
         }
 
@@ -167,6 +171,11 @@ abstract class AbstractMatcher
         return strpos(self::MISC_OPERATORS, $token) !== false;
     }
 
+    public static function needCompleteClass($token)
+    {
+        return in_array($token[1], ['doc', 'ls', 'show']);
+    }
+
     /**
      * Check whether $token type is present in $coll.
      *
index 13a1746f6f6701e181851a272bc8913402890682..b26df77811cc8924e867a147e5d4d1a65e4ed5db 100644 (file)
@@ -54,7 +54,10 @@ class ClassAttributesMatcher extends AbstractMatcher
 
         return array_map(
             function ($name) use ($class) {
-                return $class . '::' . $name;
+                $chunks = explode('\\', $class);
+                $className = array_pop($chunks);
+
+                return $className . '::' . $name;
             },
             array_filter(
                 $vars,
index e1b4053c1f2f663ab0d8c5d52c989cbdd66d8804..2aba6dc1a8cb26fa91abde024416c1855f2d9f08 100644 (file)
@@ -42,14 +42,22 @@ class ClassMethodsMatcher extends AbstractMatcher
             return [];
         }
 
-        $methods = $reflection->getMethods(\ReflectionMethod::IS_STATIC);
+        if (self::needCompleteClass($tokens[1])) {
+            $methods = $reflection->getMethods();
+        } else {
+            $methods = $reflection->getMethods(\ReflectionMethod::IS_STATIC);
+        }
+
         $methods = array_map(function (\ReflectionMethod $method) {
             return $method->getName();
         }, $methods);
 
         return array_map(
             function ($name) use ($class) {
-                return $class . '::' . $name;
+                $chunks = explode('\\', $class);
+                $className = array_pop($chunks);
+
+                return $className . '::' . $name;
             },
             array_filter($methods, function ($method) use ($input) {
                 return AbstractMatcher::startsWith($input, $method);
index 45c1fdb8497800f8915def9d3b5f3a4bdc7ede92..8c35094f5183db6141a95f0d1b10f2f4a5688683 100644 (file)
@@ -65,7 +65,7 @@ class ClassNamesMatcher extends AbstractMatcher
             case self::hasToken([$blacklistedTokens], $prevToken):
             case is_string($token) && $token === '$':
                 return false;
-            case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR], $prevToken):
+            case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR, self::T_STRING], $prevToken):
             case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR], $token):
             case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $token):
             case self::isOperator($token):
index edbef1fcde81c0dc1ab29cab48e680a69465fb63..b07c492071b31571c4b6b554ae5d2560d0a39d0f 100644 (file)
@@ -28,7 +28,7 @@ if (!function_exists('Psy\sh')) {
      */
     function sh()
     {
-        return 'extract(\Psy\debug(get_defined_vars(), isset($this) ? $this : null));';
+        return 'extract(\Psy\debug(get_defined_vars(), isset($this) ? $this : @get_called_class()));';
     }
 }
 
@@ -50,9 +50,9 @@ if (!function_exists('Psy\debug')) {
      *         var_dump($item); // will be whatever you set $item to in Psy Shell
      *     }
      *
-     * Optionally, supply an object as the `$boundObject` parameter. This
-     * determines the value `$this` will have in the shell, and sets up class
-     * scope so that private and protected members are accessible:
+     * Optionally, supply an object as the `$bindTo` parameter. This determines
+     * the value `$this` will have in the shell, and sets up class scope so that
+     * private and protected members are accessible:
      *
      *     class Foo {
      *         function bar() {
@@ -60,12 +60,22 @@ if (!function_exists('Psy\debug')) {
      *         }
      *     }
      *
-     * @param array  $vars        Scope variables from the calling context (default: array())
-     * @param object $boundObject Bound object ($this) value for the shell
+     * For the static equivalent, pass a class name as the `$bindTo` parameter.
+     * This makes `self` work in the shell, and sets up static scope so that
+     * private and protected static members are accessible:
+     *
+     *     class Foo {
+     *         static function bar() {
+     *             \Psy\debug(get_defined_vars(), get_called_class());
+     *         }
+     *     }
+     *
+     * @param array         $vars   Scope variables from the calling context (default: array())
+     * @param object|string $bindTo Bound object ($this) or class (self) value for the shell
      *
      * @return array Scope variables from the debugger session
      */
-    function debug(array $vars = [], $boundObject = null)
+    function debug(array $vars = [], $bindTo = null)
     {
         echo PHP_EOL;
 
@@ -79,8 +89,10 @@ if (!function_exists('Psy\debug')) {
             $sh->addInput('whereami -n2', true);
         }
 
-        if ($boundObject !== null) {
-            $sh->setBoundObject($boundObject);
+        if (is_string($bindTo)) {
+            $sh->setBoundClass($bindTo);
+        } elseif ($bindTo !== null) {
+            $sh->setBoundObject($bindTo);
         }
 
         $sh->run();
index 419369b496334921cc65a3f93b6c41443b07dd3a..fb323ab5610b61cc2f0d4bdb0780c40580229673 100644 (file)
@@ -72,4 +72,20 @@ class FunctionReturnInWriteContextPassTest extends CodeCleanerTestCase
 
         $this->traverser->traverse($this->parse('empty(strtolower("A"))'));
     }
+
+    /**
+     * @dataProvider validStatements
+     */
+    public function testValidStatements($code)
+    {
+        $this->parseAndTraverse($code);
+        $this->assertTrue(true);
+    }
+
+    public function validStatements()
+    {
+        return [
+            ['isset($foo)'],
+        ];
+    }
 }
index 29470d50b45a24f11fc31846a352e1e05a69e01e..1c28b4a859409d4fe7840135e48b8690c2e60a69 100644 (file)
@@ -34,8 +34,16 @@ class ImplicitReturnPassTest extends CodeCleanerTestCase
             ['4',        'return 4;'],
             ['foo()',    'return foo();'],
             ['return 1', 'return 1;'],
+            ['',         'return new \Psy\CodeCleaner\NoReturnValue();'],
         ];
 
+        $from = 'echo "foo";';
+        $to   = <<<'EOS'
+echo "foo";
+return new \Psy\CodeCleaner\NoReturnValue();
+EOS;
+        $data[] = [$from, $to];
+
         $from = 'if (true) { 1; } elseif (true) { 2; } else { 3; }';
         $to   = <<<'EOS'
 if (true) {
@@ -85,6 +93,18 @@ return new \Psy\CodeCleaner\NoReturnValue();
 EOS;
         $data[] = [$from, $to];
 
+        $from = <<<'EOS'
+namespace Foo {
+    1 + 1;
+}
+EOS;
+        $to = <<<'EOS'
+namespace Foo;
+
+return 1 + 1;
+EOS;
+        $data[] = [$from, $to];
+
         $data[] = ['exit()', 'exit;'];
 
         return $data;
diff --git a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php
new file mode 100644 (file)
index 0000000..06954cb
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\CodeCleaner;
+
+use Psy\CodeCleaner\ListPass;
+
+class ListPassTest extends CodeCleanerTestCase
+{
+    public function setUp()
+    {
+        $this->setPass(new ListPass());
+    }
+
+    /**
+     * @dataProvider invalidStatements
+     * @expectedException \Psy\Exception\ParseErrorException
+     */
+    public function testProcessInvalidStatement($code, $expectedMessage)
+    {
+        if (method_exists($this, 'setExpectedException')) {
+            $this->setExpectedException('Psy\Exception\ParseErrorException', $expectedMessage);
+        } else {
+            $this->expectExceptionMessage($expectedMessage);
+        }
+
+        $stmts = $this->parse($code);
+        $this->traverser->traverse($stmts);
+    }
+
+    public function invalidStatements()
+    {
+        // Not typo.  It is ambiguous whether "Syntax" or "syntax".
+        $errorShortListAssign = "yntax error, unexpected '='";
+        $errorEmptyList = 'Cannot use empty list';
+        $errorAssocListAssign = 'Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \',\' or \')\'';
+        $errorNonVariableAssign = 'Assignments can only happen to writable values';
+        $errorPhpParserSyntax = 'PHP Parse error: Syntax error, unexpected';
+
+        $invalidExpr = [
+            ['list() = array()', $errorEmptyList],
+            ['list("a") = array(1)', $errorPhpParserSyntax],
+        ];
+
+        if (version_compare(PHP_VERSION, '7.1', '<')) {
+            return array_merge($invalidExpr, [
+                ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax],
+                ['[] = []', $errorShortListAssign],
+                ['[$a] = [1]', $errorShortListAssign],
+                ['list("a" => $a) = array("a" => 1)', $errorAssocListAssign],
+            ]);
+        }
+
+        return array_merge($invalidExpr, [
+            ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax],
+            ['["a"] = [1]', $errorNonVariableAssign],
+            ['[] = []', $errorEmptyList],
+        ]);
+    }
+
+    /**
+     * @dataProvider validStatements
+     */
+    public function testProcessValidStatement($code)
+    {
+        $stmts = $this->parse($code);
+        $this->traverser->traverse($stmts);
+        $this->assertTrue(true);
+    }
+
+    public function validStatements()
+    {
+        $validExpr = [
+            ['list($a) = array(1)'],
+            ['list($x, $y) = array(1, 2)'],
+        ];
+
+        if (version_compare(PHP_VERSION, '7.1', '>=')) {
+            return array_merge($validExpr, [
+                ['[$a] = array(1)'],
+                ['list($b) = [2]'],
+                ['[$x, $y] = array(1, 2)'],
+                ['[$a] = [1]'],
+                ['[$x, $y] = [1, 2]'],
+                ['["_" => $v] = ["_" => 1]'],
+            ]);
+        }
+
+        return $validExpr;
+    }
+}
index 20724f9f9862a906617efb9c311c8737d9af66d3..0c28dc6e47e01d342b37e26ba039b04bc2768c85 100644 (file)
@@ -26,6 +26,9 @@ class NamespacePassTest extends CodeCleanerTestCase
 
     public function testProcess()
     {
+        $this->parseAndTraverse('');
+        $this->assertNull($this->cleaner->getNamespace());
+
         $this->parseAndTraverse('array_merge()');
         $this->assertNull($this->cleaner->getNamespace());
 
index 55b5c658402a11cc49726b1a7af6314e1eab547a..0b7b3bc37e9842073a4c08e535c17476ed9917a9 100644 (file)
@@ -85,4 +85,9 @@ class RequirePassTest extends CodeCleanerTestCase
             [''],
         ];
     }
+
+    public function testResolveWorks()
+    {
+        $this->assertEquals(__FILE__, RequirePass::resolve(__FILE__, 3));
+    }
 }
index a54dae238f30df94341ffdbff006daea261d89ce..aedfd499d2a811b05977ce4d98d80d6de25a0b70 100644 (file)
@@ -55,6 +55,48 @@ class UseStatementPassTest extends CodeCleanerTestCase
                 "namespace Foo;\nuse Bar;\n\$baz = new Bar\\Baz();",
                 "namespace Foo;\n\n\$baz = new \\Bar\\Baz();",
             ],
+            [
+                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Foo;\n\n\$std = new S();",
+                "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Foo;\n\n\$std = new \\StdClass();",
+            ],
+            [
+                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Bar;\n\n\$std = new S();",
+                "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Bar;\n\n\$std = new S();",
+            ],
+            [
+                "use Foo\\Bar as fb, Qux as Q;\n\$baz = new fb\\Baz();\n\$qux = new Q();",
+                "\$baz = new \\Foo\\Bar\\Baz();\n\$qux = new \\Qux();",
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider groupUseStatements
+     */
+    public function testGroupUseProcess($from, $to)
+    {
+        $this->assertProcessesAs($from, $to);
+    }
+
+    public function groupUseStatements()
+    {
+        if (version_compare(PHP_VERSION, '7.0', '<')) {
+            $this->markTestSkipped();
+        }
+
+        return [
+            [
+                "use Foo\\{Bar, Baz, Qux as Q};\n\$bar = new Bar();\n\$baz = new Baz();\n\$qux = new Q();",
+                "\$bar = new \\Foo\\Bar();\n\$baz = new \\Foo\\Baz();\n\$qux = new \\Foo\\Qux();",
+            ],
+            [
+                "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$baz = new B\\Baz();",
+                "\$foo = new \\X\\Foo();\n\$baz = new \\X\\Bar\\Baz();",
+            ],
+            [
+                "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$bar = new Bar();\n\$baz = new B\\Baz();",
+                "\$foo = new \\X\\Foo();\n\$bar = new Bar();\n\$baz = new \\X\\Bar\\Baz();",
+            ],
         ];
     }
 }
index f986371ba551015fd49d414d55f12a5dacdc7706..67b1575015566eb877669453aac75e9b7ed4060d 100644 (file)
@@ -109,6 +109,7 @@ class ValidClassNamePassTest extends CodeCleanerTestCase
             // static call
             ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::foo()'],
             ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::$foo()'],
+            ['Psy\\Test\\CodeCleaner\\ValidClassNamePassTest::notAMethod()'],
         ];
     }
 
index e00b0678e2ab45e36e2537e02229035666d9fa33..40ec6b42e4e5a3024c4686b4c723c7bf6f294f83 100644 (file)
@@ -60,6 +60,8 @@ class CodeCleanerTest extends \PHPUnit\Framework\TestCase
             [['echo \''],  true],
             [['if (1) {'], true],
 
+            [['echo "foo",'], true],
+
             [['echo ""'],   false],
             [["echo ''"],   false],
             [['if (1) {}'], false],
diff --git a/vendor/psy/psysh/test/ContextTest.php b/vendor/psy/psysh/test/ContextTest.php
new file mode 100644 (file)
index 0000000..0b8b6dc
--- /dev/null
@@ -0,0 +1,325 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test;
+
+use Psy\Context;
+
+class ContextTest extends \PHPUnit\Framework\TestCase
+{
+    public function testGet()
+    {
+        $this->assertTrue(true);
+    }
+
+    public function testGetAll()
+    {
+        $this->assertTrue(true);
+    }
+
+    public function testGetSpecialVariables()
+    {
+        $context = new Context();
+
+        $this->assertNull($context->get('_'));
+        $this->assertNull($context->getReturnValue());
+
+        $this->assertEquals(['_' => null], $context->getAll());
+
+        $e = new \Exception('eeeeeee');
+        $obj = new \StdClass();
+        $context->setLastException($e);
+        $context->setLastStdout('out');
+        $context->setBoundObject($obj);
+
+        $context->setCommandScopeVariables([
+            '__function'  => 'function',
+            '__method'    => 'method',
+            '__class'     => 'class',
+            '__namespace' => 'namespace',
+            '__file'      => 'file',
+            '__line'      => 'line',
+            '__dir'       => 'dir',
+        ]);
+
+        $expected = [
+            '_'           => null,
+            '_e'          => $e,
+            '__out'       => 'out',
+            'this'        => $obj,
+            '__function'  => 'function',
+            '__method'    => 'method',
+            '__class'     => 'class',
+            '__namespace' => 'namespace',
+            '__file'      => 'file',
+            '__line'      => 'line',
+            '__dir'       => 'dir',
+        ];
+
+        $this->assertEquals($expected, $context->getAll());
+    }
+
+    public function testSetAll()
+    {
+        $context = new Context();
+
+        $baz = new \StdClass();
+        $vars = [
+            'foo' => 'Foo',
+            'bar' => 123,
+            'baz' => $baz,
+
+            '_'         => 'fail',
+            '_e'        => 'fail',
+            '__out'     => 'fail',
+            'this'      => 'fail',
+            '__psysh__' => 'fail',
+
+            '__function'  => 'fail',
+            '__method'    => 'fail',
+            '__class'     => 'fail',
+            '__namespace' => 'fail',
+            '__file'      => 'fail',
+            '__line'      => 'fail',
+            '__dir'       => 'fail',
+        ];
+
+        $context->setAll($vars);
+
+        $this->assertEquals('Foo', $context->get('foo'));
+        $this->assertEquals(123, $context->get('bar'));
+        $this->assertSame($baz, $context->get('baz'));
+
+        $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll());
+    }
+
+    /**
+     * @dataProvider specialNames
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/
+     */
+    public function testSetAllDoesNotSetSpecial($name)
+    {
+        $context = new Context();
+        $context->setAll([$name => 'fail']);
+        $context->get($name);
+    }
+
+    public function specialNames()
+    {
+        return [
+            ['_e'],
+            ['__out'],
+            ['this'],
+            ['__psysh__'],
+            ['__function'],
+            ['__method'],
+            ['__class'],
+            ['__namespace'],
+            ['__file'],
+            ['__line'],
+            ['__dir'],
+        ];
+    }
+
+    public function testReturnValue()
+    {
+        $context = new Context();
+        $this->assertNull($context->getReturnValue());
+
+        $val = 'some string';
+        $context->setReturnValue($val);
+        $this->assertEquals($val, $context->getReturnValue());
+        $this->assertEquals($val, $context->get('_'));
+
+        $obj = new \StdClass();
+        $context->setReturnValue($obj);
+        $this->assertSame($obj, $context->getReturnValue());
+        $this->assertSame($obj, $context->get('_'));
+
+        $context->setReturnValue(null);
+        $this->assertNull($context->getReturnValue());
+    }
+
+    public function testLastException()
+    {
+        $context = new Context();
+        $e = new \Exception('wat');
+        $context->setLastException($e);
+        $this->assertSame($e, $context->getLastException());
+        $this->assertSame($e, $context->get('_e'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage No most-recent exception
+     */
+    public function testLastExceptionThrowsSometimes()
+    {
+        $context = new Context();
+        $context->getLastException();
+    }
+
+    public function testLastStdout()
+    {
+        $context = new Context();
+        $context->setLastStdout('ouuuuut');
+        $this->assertEquals('ouuuuut', $context->getLastStdout());
+        $this->assertEquals('ouuuuut', $context->get('__out'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage No most-recent output
+     */
+    public function testLastStdoutThrowsSometimes()
+    {
+        $context = new Context();
+        $context->getLastStdout();
+    }
+
+    public function testBoundObject()
+    {
+        $context = new Context();
+        $this->assertNull($context->getBoundObject());
+
+        $obj = new \StdClass();
+        $context->setBoundObject($obj);
+        $this->assertSame($obj, $context->getBoundObject());
+        $this->assertSame($obj, $context->get('this'));
+
+        $context->setBoundObject(null);
+        $this->assertNull($context->getBoundObject());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Unknown variable: $this
+     */
+    public function testBoundObjectThrowsSometimes()
+    {
+        $context = new Context();
+        $context->get('this');
+    }
+
+    public function testBoundClass()
+    {
+        $context = new Context();
+        $this->assertNull($context->getBoundClass());
+
+        $context->setBoundClass('');
+        $this->assertNull($context->getBoundClass());
+
+        $context->setBoundClass('Psy\Shell');
+        $this->assertEquals('Psy\Shell', $context->getBoundClass());
+
+        $context->setBoundObject(new \StdClass());
+        $this->assertNotNull($context->getBoundObject());
+        $this->assertNull($context->getBoundClass());
+
+        $context->setBoundClass('Psy\Shell');
+        $this->assertEquals('Psy\Shell', $context->getBoundClass());
+        $this->assertNull($context->getBoundObject());
+
+        $context->setBoundClass(null);
+        $this->assertNull($context->getBoundClass());
+        $this->assertNull($context->getBoundObject());
+    }
+
+    public function testCommandScopeVariables()
+    {
+        $__function  = 'donkey';
+        $__method    = 'diddy';
+        $__class     = 'cranky';
+        $__namespace = 'funky';
+        $__file      = 'candy';
+        $__line      = 'dixie';
+        $__dir       = 'wrinkly';
+
+        $vars = compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir');
+
+        $context = new Context();
+        $context->setCommandScopeVariables($vars);
+
+        $this->assertEquals($vars, $context->getCommandScopeVariables());
+
+        $this->assertEquals($__function, $context->get('__function'));
+        $this->assertEquals($__method, $context->get('__method'));
+        $this->assertEquals($__class, $context->get('__class'));
+        $this->assertEquals($__namespace, $context->get('__namespace'));
+        $this->assertEquals($__file, $context->get('__file'));
+        $this->assertEquals($__line, $context->get('__line'));
+        $this->assertEquals($__dir, $context->get('__dir'));
+
+        $someVars = compact('__function', '__namespace', '__file', '__line', '__dir');
+        $context->setCommandScopeVariables($someVars);
+    }
+
+    public function testGetUnusedCommandScopeVariableNames()
+    {
+        $context = new Context();
+
+        $this->assertEquals(
+            ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'],
+            $context->getUnusedCommandScopeVariableNames()
+        );
+
+        $context->setCommandScopeVariables([
+            '__function'  => 'foo',
+            '__namespace' => 'bar',
+            '__file'      => 'baz',
+            '__line'      => 123,
+            '__dir'       => 'qux',
+        ]);
+
+        $this->assertEquals(
+            ['__method', '__class'],
+            array_values($context->getUnusedCommandScopeVariableNames())
+        );
+    }
+
+    /**
+     * @dataProvider specialAndNotSpecialVariableNames
+     */
+    public function testIsSpecialVariableName($name, $isSpecial)
+    {
+        $context = new Context();
+
+        if ($isSpecial) {
+            $this->assertTrue($context->isSpecialVariableName($name));
+        } else {
+            $this->assertFalse($context->isSpecialVariableName($name));
+        }
+    }
+
+    public function specialAndNotSpecialVariableNames()
+    {
+        return [
+            ['foo', false],
+            ['psysh', false],
+            ['__psysh', false],
+
+            ['_', true],
+            ['_e', true],
+            ['__out', true],
+            ['this', true],
+            ['__psysh__', true],
+
+            ['__function', true],
+            ['__method', true],
+            ['__class', true],
+            ['__namespace', true],
+            ['__file', true],
+            ['__line', true],
+            ['__dir', true],
+        ];
+    }
+}
index a3333a644633526d3cae03860189330441ffab83..ae39fb1f488673680edd89b244825529c96fcac2 100644 (file)
@@ -30,4 +30,13 @@ class BreakExceptionTest extends \PHPUnit\Framework\TestCase
         $this->assertContains('foo', $e->getMessage());
         $this->assertSame('foo', $e->getRawMessage());
     }
+
+    /**
+     * @expectedException \Psy\Exception\BreakException
+     * @expectedExceptionMessage Goodbye
+     */
+    public function testExitShell()
+    {
+        BreakException::exitShell();
+    }
 }
index 2fd9ab7ffaac735947936ae8dd96918517d45c75..e66319b919b37249ac9e0f9ea026362f46ebd6f8 100644 (file)
@@ -59,12 +59,15 @@ class ErrorExceptionTest extends \PHPUnit\Framework\TestCase
     public function getLevels()
     {
         return [
-            [E_WARNING,         'Warning'],
-            [E_CORE_WARNING,    'Warning'],
-            [E_COMPILE_WARNING, 'Warning'],
-            [E_USER_WARNING,    'Warning'],
-            [E_STRICT,          'Strict error'],
-            [0,                 'Error'],
+            [E_WARNING,           'Warning'],
+            [E_CORE_WARNING,      'Warning'],
+            [E_COMPILE_WARNING,   'Warning'],
+            [E_USER_WARNING,      'Warning'],
+            [E_STRICT,            'Strict error'],
+            [E_DEPRECATED,        'Deprecated'],
+            [E_USER_DEPRECATED,   'Deprecated'],
+            [E_RECOVERABLE_ERROR, 'Recoverable fatal error'],
+            [0,                   'Error'],
         ];
     }
 
@@ -104,4 +107,19 @@ class ErrorExceptionTest extends \PHPUnit\Framework\TestCase
         $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/File.php');
         $this->assertNotEmpty($e->getFile());
     }
+
+    public function testFromError()
+    {
+        if (version_compare(PHP_VERSION, '7.0.0', '<')) {
+            $this->markTestSkipped();
+        }
+
+        $error = new \Error('{{message}}', 0);
+        $exception = ErrorException::fromError($error);
+
+        $this->assertContains('PHP Error:  {{message}}', $exception->getMessage());
+        $this->assertEquals(0, $exception->getCode());
+        $this->assertEquals($error->getFile(), $exception->getFile());
+        $this->assertSame($exception->getPrevious(), $error);
+    }
 }
diff --git a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php b/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php
new file mode 100644 (file)
index 0000000..f44ab87
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Exception;
+
+use Psy\Exception\ThrowUpException;
+
+class ThrowUpExceptionTest extends \PHPUnit\Framework\TestCase
+{
+    public function testException()
+    {
+        $previous = new \Exception('{{message}}', 123);
+        $e = new ThrowUpException($previous);
+
+        $this->assertInstanceOf('Psy\Exception\Exception', $e);
+        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
+
+        $this->assertEquals("Throwing Exception with message '{{message}}'", $e->getMessage());
+        $this->assertEquals('{{message}}', $e->getRawMessage());
+        $this->assertEquals(123, $e->getCode());
+        $this->assertSame($previous, $e->getPrevious());
+    }
+
+    public function testFromThrowable()
+    {
+        $previous = new \Exception('{{message}}');
+        $e = ThrowUpException::fromThrowable($previous);
+
+        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
+        $this->assertSame($previous, $e->getPrevious());
+    }
+
+    public function testFromThrowableWithError()
+    {
+        if (version_compare(PHP_VERSION, '7.0.0', '<')) {
+            $this->markTestSkipped();
+        }
+
+        $previous = new \Error('{{message}}');
+        $e = ThrowUpException::fromThrowable($previous);
+
+        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
+        $this->assertInstanceOf('Psy\Exception\ErrorException', $e->getPrevious());
+
+        $this->assertNotSame($previous, $e->getPrevious());
+        $this->assertSame($previous, $e->getPrevious()->getPrevious());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage throw-up can only throw Exceptions and Errors
+     */
+    public function testFromThrowableThrowsError()
+    {
+        $notThrowable = new \StdClass();
+        ThrowUpException::fromThrowable($notThrowable);
+    }
+}
diff --git a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php
new file mode 100644 (file)
index 0000000..7bf27af
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Exception;
+
+use Psy\Exception\TypeErrorException;
+
+class TypeErrorExceptionTest extends \PHPUnit\Framework\TestCase
+{
+    public function testException()
+    {
+        $e = new TypeErrorException('{{message}}', 13);
+
+        $this->assertInstanceOf('Psy\Exception\Exception', $e);
+        $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e);
+
+        $this->assertEquals('TypeError: {{message}}', $e->getMessage());
+        $this->assertEquals('{{message}}', $e->getRawMessage());
+        $this->assertEquals(13, $e->getCode());
+    }
+
+    public function testStripsEvalFromMessage()
+    {
+        $message = 'Something or other, called in line 10: eval()\'d code';
+        $e = new TypeErrorException($message);
+        $this->assertEquals($message, $e->getRawMessage());
+        $this->assertEquals('TypeError: Something or other', $e->getMessage());
+    }
+
+    public function testFromTypeError()
+    {
+        if (version_compare(PHP_VERSION, '7.0.0', '<')) {
+            $this->markTestSkipped();
+        }
+
+        $previous = new \TypeError('{{message}}', 13);
+        $e = TypeErrorException::fromTypeError($previous);
+
+        $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e);
+        $this->assertEquals('TypeError: {{message}}', $e->getMessage());
+        $this->assertEquals('{{message}}', $e->getRawMessage());
+        $this->assertEquals(13, $e->getCode());
+    }
+}
index 4a7ccccf9c9112f9d21fcf2dedecb903adfbfd21..ee213f1c0aab0670743ba1a87e9b89156a47e30d 100644 (file)
 namespace Psy\Test\Formatter;
 
 use Psy\Formatter\CodeFormatter;
+use Psy\Test\Formatter\Fixtures\SomeClass;
 
 class CodeFormatterTest extends \PHPUnit\Framework\TestCase
 {
-    private function ignoreThisMethod($arg)
+    /**
+     * @dataProvider reflectors
+     */
+    public function testFormat($reflector, $expected)
     {
-        echo 'whot!';
+        $formatted = CodeFormatter::format($reflector);
+        $formattedWithoutColors = preg_replace('#' . chr(27) . '\[\d\d?m#', '', $formatted);
+
+        $this->assertEquals($expected, self::trimLines($formattedWithoutColors));
+        $this->assertNotEquals($expected, self::trimLines($formatted));
     }
 
-    public function testFormat()
+    public function reflectors()
     {
-        $expected = <<<'EOS'
-  > 18|     private function ignoreThisMethod($arg)
-    19|     {
-    20|         echo 'whot!';
-    21|     }
+        $expectClass = <<<'EOS'
+  > 14| class SomeClass
+    15| {
+    16|     const SOME_CONST = 'some const';
+    17|     private $someProp = 'some prop';
+    18|
+    19|     public function someMethod($someParam)
+    20|     {
+    21|         return 'some method';
+    22|     }
+    23|
+    24|     public static function someClosure()
+    25|     {
+    26|         return function () {
+    27|             return 'some closure';
+    28|         };
+    29|     }
+    30| }
 EOS;
 
-        $formatted = CodeFormatter::format(new \ReflectionMethod($this, 'ignoreThisMethod'));
-        $formattedWithoutColors = preg_replace('#' . chr(27) . '\[\d\d?m#', '', $formatted);
+        $expectMethod = <<<'EOS'
+  > 19|     public function someMethod($someParam)
+    20|     {
+    21|         return 'some method';
+    22|     }
+EOS;
+
+        $expectClosure = <<<'EOS'
+  > 26|         return function () {
+    27|             return 'some closure';
+    28|         };
+EOS;
+
+        return [
+            [new \ReflectionClass('Psy\Test\Formatter\Fixtures\SomeClass'), $expectClass],
+            [new \ReflectionObject(new SomeClass()), $expectClass],
+            [new \ReflectionMethod('Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'), $expectMethod],
+            [new \ReflectionFunction(SomeClass::someClosure()), $expectClosure],
+        ];
+    }
+
+    /**
+     * @dataProvider invalidReflectors
+     * @expectedException \Psy\Exception\RuntimeException
+     */
+    public function testCodeFormatterThrowsExceptionForReflectorsItDoesntUnderstand($reflector)
+    {
+        CodeFormatter::format($reflector);
+    }
+
+    public function invalidReflectors()
+    {
+        $reflectors = [
+            [new \ReflectionExtension('json')],
+            [new \ReflectionParameter(['Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'], 'someParam')],
+            [new \ReflectionProperty('Psy\Test\Formatter\Fixtures\SomeClass', 'someProp')],
+        ];
+
+        if (version_compare(PHP_VERSION, '7.1.0', '>=')) {
+            $reflectors[] = [new \ReflectionClassConstant('Psy\Test\Formatter\Fixtures\SomeClass', 'SOME_CONST')];
+        }
 
-        $this->assertEquals($expected, rtrim($formattedWithoutColors));
-        $this->assertNotEquals($expected, rtrim($formatted));
+        return $reflectors;
     }
 
     /**
      * @dataProvider filenames
      * @expectedException \Psy\Exception\RuntimeException
      */
-    public function testCodeFormatterThrowsException($filename)
+    public function testCodeFormatterThrowsExceptionForMissingFile($filename)
     {
         $reflector = $this->getMockBuilder('ReflectionClass')
             ->disableOriginalConstructor()
@@ -62,4 +121,9 @@ EOS;
 
         return [[null], ['not a file']];
     }
+
+    private static function trimLines($code)
+    {
+        return rtrim(implode("\n", array_map('rtrim', explode("\n", $code))));
+    }
 }
diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php b/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php
new file mode 100644 (file)
index 0000000..9f13ab9
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Formatter\Fixtures;
+
+trait BoringTrait
+{
+    public function boringMethod($one = 1)
+    {
+        // Do nothing.
+    }
+}
diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php b/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php
new file mode 100644 (file)
index 0000000..8208fe3
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Formatter\Fixtures;
+
+class SomeClass
+{
+    const SOME_CONST = 'some const';
+    private $someProp = 'some prop';
+
+    public function someMethod($someParam)
+    {
+        return 'some method';
+    }
+
+    public static function someClosure()
+    {
+        return function () {
+            return 'some closure';
+        };
+    }
+}
index d2919799033412b1242730eb387469d9de312147..42361792068a6166c51ab1911bda5bd575e6dfd4 100644 (file)
@@ -56,6 +56,18 @@ class SignatureFormatterTest extends \PHPUnit\Framework\TestCase
                 . 'extends PhpParser\NodeVisitorAbstract '
                 . 'implements PhpParser\NodeVisitor',
             ],
+            [
+                new \ReflectionFunction('array_chunk'),
+                'function array_chunk($arg, $size, $preserve_keys = unknown)',
+            ],
+            [
+                new \ReflectionClass('Psy\Test\Formatter\Fixtures\BoringTrait'),
+                'trait Psy\Test\Formatter\Fixtures\BoringTrait',
+            ],
+            [
+                new \ReflectionMethod('Psy\Test\Formatter\Fixtures\BoringTrait', 'boringMethod'),
+                'public function boringMethod($one = 1)',
+            ],
         ];
     }
 
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php
new file mode 100644 (file)
index 0000000..223432f
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Reflection;
+
+use Psy\Reflection\ReflectionLanguageConstruct;
+use Psy\Reflection\ReflectionLanguageConstructParameter;
+
+class ReflectionLanguageConstructParameterTest extends \PHPUnit\Framework\TestCase
+{
+    public function testOptions()
+    {
+        $keyword = new ReflectionLanguageConstruct('die');
+
+        $refl = new ReflectionLanguageConstructParameter($keyword, 'one', [
+            'isArray'             => false,
+            'defaultValue'        => null,
+            'isOptional'          => false,
+            'isPassedByReference' => false,
+        ]);
+
+        $this->assertNull($refl->getClass());
+        $this->assertEquals('one', $refl->getName());
+        $this->assertFalse($refl->isArray());
+        $this->assertTrue($refl->isDefaultValueAvailable());
+        $this->assertNull($refl->getDefaultValue());
+        $this->assertFalse($refl->isOptional());
+        $this->assertFalse($refl->isPassedByReference());
+
+        $reflTwo = new ReflectionLanguageConstructParameter($keyword, 'two', [
+            'isArray'             => true,
+            'isOptional'          => true,
+            'isPassedByReference' => true,
+        ]);
+
+        $this->assertNull($refl->getClass());
+        $this->assertEquals('two', $reflTwo->getName());
+        $this->assertTrue($reflTwo->isArray());
+        $this->assertFalse($reflTwo->isDefaultValueAvailable());
+        $this->assertNull($reflTwo->getDefaultValue());
+        $this->assertTrue($reflTwo->isOptional());
+        $this->assertTrue($reflTwo->isPassedByReference());
+
+        $refl = new ReflectionLanguageConstructParameter($keyword, 'three', [
+            'defaultValue' => 3,
+        ]);
+
+        $this->assertNull($refl->getClass());
+        $this->assertEquals('three', $refl->getName());
+        $this->assertFalse($refl->isArray());
+        $this->assertTrue($refl->isDefaultValueAvailable());
+        $this->assertEquals(3, $refl->getDefaultValue());
+        $this->assertFalse($refl->isOptional());
+        $this->assertFalse($refl->isPassedByReference());
+    }
+}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php
new file mode 100644 (file)
index 0000000..872a726
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Reflection;
+
+use Psy\Reflection\ReflectionLanguageConstruct;
+
+class ReflectionLanguageConstructTest extends \PHPUnit\Framework\TestCase
+{
+    /**
+     * @dataProvider languageConstructs
+     */
+    public function testConstruction($keyword)
+    {
+        $refl = new ReflectionLanguageConstruct($keyword);
+        $this->assertEquals($keyword, $refl->getName());
+        $this->assertEquals($keyword, (string) $refl);
+    }
+
+    /**
+     * @dataProvider languageConstructs
+     */
+    public function testKnownLanguageConstructs($keyword)
+    {
+        $this->assertTrue(ReflectionLanguageConstruct::isLanguageConstruct($keyword));
+    }
+
+    /**
+     * @dataProvider languageConstructs
+     */
+    public function testFileName($keyword)
+    {
+        $refl = new ReflectionLanguageConstruct($keyword);
+        $this->assertFalse($refl->getFileName());
+    }
+
+    /**
+     * @dataProvider languageConstructs
+     */
+    public function testReturnsReference($keyword)
+    {
+        $refl = new ReflectionLanguageConstruct($keyword);
+        $this->assertFalse($refl->returnsReference());
+    }
+
+    /**
+     * @dataProvider languageConstructs
+     */
+    public function testGetParameters($keyword)
+    {
+        $refl = new ReflectionLanguageConstruct($keyword);
+        $this->assertNotEmpty($refl->getParameters());
+    }
+
+    /**
+     * @dataProvider languageConstructs
+     * @expectedException \RuntimeException
+     */
+    public function testExportThrows($keyword)
+    {
+        ReflectionLanguageConstruct::export($keyword);
+    }
+
+    public function languageConstructs()
+    {
+        return [
+            ['isset'],
+            ['unset'],
+            ['empty'],
+            ['echo'],
+            ['print'],
+            ['die'],
+            ['exit'],
+        ];
+    }
+
+    /**
+     * @dataProvider unknownLanguageConstructs
+     * @expectedException \InvalidArgumentException
+     */
+    public function testUnknownLanguageConstructsThrowExceptions($keyword)
+    {
+        new ReflectionLanguageConstruct($keyword);
+    }
+
+    public function unknownLanguageConstructs()
+    {
+        return [
+            ['async'],
+            ['await'],
+            ['comefrom'],
+        ];
+    }
+}
index 1fb78b230908407147b141e43d78f807b1764945..5b587d634f7b2b6522158d333f1b23910fdb062b 100644 (file)
@@ -380,6 +380,38 @@ class ShellTest extends \PHPUnit\Framework\TestCase
         ];
     }
 
+    /**
+     * @dataProvider commandsToHas
+     */
+    public function testHasCommand($command, $has)
+    {
+        $shell = new Shell($this->getConfig());
+
+        // :-/
+        $refl = new \ReflectionClass('Psy\\Shell');
+        $method = $refl->getMethod('hasCommand');
+        $method->setAccessible(true);
+
+        $this->assertEquals($method->invokeArgs($shell, [$command]), $has);
+    }
+
+    public function commandsToHas()
+    {
+        return [
+            ['help', true],
+            ['help help', true],
+            ['"help"', false],
+            ['"help help"', false],
+            ['ls -al ', true],
+            ['ls "-al" ', true],
+            ['ls"-al"', false],
+            [' q', true],
+            ['   q  --help', true],
+            ['"q"', false],
+            ['"q",', false],
+        ];
+    }
+
     private function getOutput()
     {
         $stream = fopen('php://memory', 'w+');
index 262ef6d17bc6140257377b2df6cf16e383547dd7..258780462ac8c6ee4f3e76b3384338fc9e702e32 100644 (file)
@@ -127,17 +127,17 @@ class AutoCompleterTest extends \PHPUnit\Framework\TestCase
             ],
             [
                 'Psy\Test\TabCompletion\StaticSample::CO',
-                ['Psy\Test\TabCompletion\StaticSample::CONSTANT_VALUE'],
+                ['StaticSample::CONSTANT_VALUE'],
                 [],
             ],
             [
                 'Psy\Test\TabCompletion\StaticSample::',
-                ['Psy\Test\TabCompletion\StaticSample::$staticVariable'],
+                ['StaticSample::$staticVariable'],
                 [],
             ],
             [
                 'Psy\Test\TabCompletion\StaticSample::',
-                ['Psy\Test\TabCompletion\StaticSample::staticFunction'],
+                ['StaticSample::staticFunction'],
                 [],
             ],
         ];
diff --git a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php
new file mode 100644 (file)
index 0000000..b9ba568
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\VersionUpdater;
+
+use Psy\Shell;
+use Psy\VersionUpdater\NoopChecker;
+
+class NoopCheckerTest extends \PHPUnit\Framework\TestCase
+{
+    public function testTheThings()
+    {
+        $checker = new NoopChecker();
+        $this->assertTrue($checker->isLatest());
+        $this->assertEquals(Shell::VERSION, $checker->getLatest());
+    }
+}
diff --git a/vendor/psy/psysh/vendor-bin/box/composer.json b/vendor/psy/psysh/vendor-bin/box/composer.json
new file mode 100644 (file)
index 0000000..a5ef206
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "minimum-stability": "dev",
+    "prefer-stable": true,
+    "require": {
+        "humbug/box": "^3.0@alpha"
+    }
+}
diff --git a/vendor/psy/psysh/vendor-bin/box/composer.lock b/vendor/psy/psysh/vendor-bin/box/composer.lock
new file mode 100644 (file)
index 0000000..3c44963
--- /dev/null
@@ -0,0 +1,2524 @@
+{
+    "_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",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "d98ffe050f0ba4e81c2d1a98ca945200",
+    "packages": [
+        {
+            "name": "amphp/amp",
+            "version": "v2.0.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/amp.git",
+                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/amp/zipball/d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
+                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7"
+            },
+            "require-dev": {
+                "amphp/phpunit-util": "^1",
+                "friendsofphp/php-cs-fixer": "^2.3",
+                "phpstan/phpstan": "^0.8.5",
+                "phpunit/phpunit": "^6.0.9",
+                "react/promise": "^2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Amp\\": "lib"
+                },
+                "files": [
+                    "lib/functions.php",
+                    "lib/Internal/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bob Weinand",
+                    "email": "bobwei9@hotmail.com"
+                },
+                {
+                    "name": "Niklas Keller",
+                    "email": "me@kelunik.com"
+                },
+                {
+                    "name": "Daniel Lowrey",
+                    "email": "rdlowrey@php.net"
+                },
+                {
+                    "name": "Aaron Piotrowski",
+                    "email": "aaron@trowski.com"
+                }
+            ],
+            "description": "A non-blocking concurrency framework for PHP applications.",
+            "homepage": "http://amphp.org/amp",
+            "keywords": [
+                "async",
+                "asynchronous",
+                "awaitable",
+                "concurrency",
+                "event",
+                "event-loop",
+                "future",
+                "non-blocking",
+                "promise"
+            ],
+            "time": "2018-04-30T20:49:57+00:00"
+        },
+        {
+            "name": "amphp/byte-stream",
+            "version": "v1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/byte-stream.git",
+                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/1b75b122e6f069e7d102eef065dc192119d99ca7",
+                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7",
+                "shasum": ""
+            },
+            "require": {
+                "amphp/amp": "^2"
+            },
+            "require-dev": {
+                "amphp/phpunit-util": "^1",
+                "friendsofphp/php-cs-fixer": "^2.3",
+                "phpunit/phpunit": "^6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Amp\\ByteStream\\": "lib"
+                },
+                "files": [
+                    "lib/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Niklas Keller",
+                    "email": "me@kelunik.com"
+                },
+                {
+                    "name": "Aaron Piotrowski",
+                    "email": "aaron@trowski.com"
+                }
+            ],
+            "description": "A stream abstraction to make working with non-blocking I/O simple.",
+            "homepage": "http://amphp.org/byte-stream",
+            "keywords": [
+                "amp",
+                "amphp",
+                "async",
+                "io",
+                "non-blocking",
+                "stream"
+            ],
+            "time": "2018-04-04T05:33:09+00:00"
+        },
+        {
+            "name": "amphp/parallel",
+            "version": "v0.2.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/parallel.git",
+                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/parallel/zipball/732694688461936bec02c0ccf020dfee10c4f7ee",
+                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee",
+                "shasum": ""
+            },
+            "require": {
+                "amphp/amp": "^2",
+                "amphp/byte-stream": "^1.2",
+                "amphp/parser": "^1",
+                "amphp/process": "^0.2 || ^0.3",
+                "amphp/sync": "^1.0.1"
+            },
+            "require-dev": {
+                "amphp/phpunit-util": "^1",
+                "friendsofphp/php-cs-fixer": "^2.3",
+                "phpunit/phpunit": "^6"
+            },
+            "suggest": {
+                "ext-pthreads": "Required for thread contexts"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Amp\\Parallel\\": "lib"
+                },
+                "files": [
+                    "lib/Worker/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Stephen Coakley",
+                    "email": "me@stephencoakley.com"
+                },
+                {
+                    "name": "Aaron Piotrowski",
+                    "email": "aaron@trowski.com"
+                }
+            ],
+            "description": "Parallel processing component for Amp.",
+            "homepage": "https://github.com/amphp/parallel",
+            "keywords": [
+                "async",
+                "asynchronous",
+                "concurrent",
+                "multi-processing",
+                "multi-threading"
+            ],
+            "time": "2018-03-21T14:37:51+00:00"
+        },
+        {
+            "name": "amphp/parallel-functions",
+            "version": "v0.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/parallel-functions.git",
+                "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48",
+                "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48",
+                "shasum": ""
+            },
+            "require": {
+                "amphp/amp": "^2.0.3",
+                "amphp/parallel": "^0.1.8 || ^0.2",
+                "opis/closure": "^3.0.7",
+                "php": ">=7"
+            },
+            "require-dev": {
+                "amphp/phpunit-util": "^1.0",
+                "friendsofphp/php-cs-fixer": "^2.9",
+                "phpunit/phpunit": "^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Amp\\ParallelFunctions\\": "src"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Niklas Keller",
+                    "email": "me@kelunik.com"
+                }
+            ],
+            "description": "Parallel processing made simple.",
+            "time": "2017-12-17T18:33:29+00:00"
+        },
+        {
+            "name": "amphp/parser",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/parser.git",
+                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
+                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.3",
+                "phpunit/phpunit": "^6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Amp\\Parser\\": "lib"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Niklas Keller",
+                    "email": "me@kelunik.com"
+                },
+                {
+                    "name": "Aaron Piotrowski",
+                    "email": "aaron@trowski.com"
+                }
+            ],
+            "description": "A generator parser to make streaming parsers simple.",
+            "homepage": "https://github.com/amphp/parser",
+            "keywords": [
+                "async",
+                "non-blocking",
+                "parser",
+                "stream"
+            ],
+            "time": "2017-06-06T05:29:10+00:00"
+        },
+        {
+            "name": "amphp/process",
+            "version": "v0.3.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/process.git",
+                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/process/zipball/b795d20a7f6d5a0637128a02be613f520f1705fc",
+                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc",
+                "shasum": ""
+            },
+            "require": {
+                "amphp/amp": "^2",
+                "amphp/byte-stream": "^1",
+                "php": ">=7"
+            },
+            "require-dev": {
+                "amphp/phpunit-util": "^1",
+                "friendsofphp/php-cs-fixer": "^2.3",
+                "phpunit/phpunit": "^6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Amp\\Process\\": "lib"
+                },
+                "files": [
+                    "lib/constants.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bob Weinand",
+                    "email": "bobwei9@hotmail.com"
+                },
+                {
+                    "name": "Niklas Keller",
+                    "email": "me@kelunik.com"
+                },
+                {
+                    "name": "Aaron Piotrowski",
+                    "email": "aaron@trowski.com"
+                }
+            ],
+            "description": "Asynchronous process manager.",
+            "homepage": "https://github.com/amphp/process",
+            "time": "2018-04-08T18:55:42+00:00"
+        },
+        {
+            "name": "amphp/sync",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/amphp/sync.git",
+                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/amphp/sync/zipball/a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
+                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
+                "shasum": ""
+            },
+            "require": {
+                "amphp/amp": "^2"
+            },
+            "require-dev": {
+                "amphp/phpunit-util": "^1",
+                "friendsofphp/php-cs-fixer": "^2.3",
+                "phpunit/phpunit": "^6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Amp\\Sync\\": "lib"
+                },
+                "files": [
+                    "lib/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Stephen Coakley",
+                    "email": "me@stephencoakley.com"
+                },
+                {
+                    "name": "Aaron Piotrowski",
+                    "email": "aaron@trowski.com"
+                }
+            ],
+            "description": "Mutex, Semaphore, and other synchronization tools for Amp.",
+            "homepage": "https://github.com/amphp/sync",
+            "keywords": [
+                "async",
+                "asynchronous",
+                "mutex",
+                "semaphore",
+                "synchronization"
+            ],
+            "time": "2017-11-29T21:48:53+00:00"
+        },
+        {
+            "name": "beberlei/assert",
+            "version": "v2.9.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/beberlei/assert.git",
+                "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/beberlei/assert/zipball/c07fe163d6a3b3e4b1275981ec004397954afa89",
+                "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "php": ">=5.3"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.1.1",
+                "phpunit/phpunit": "^4.8.35|^5.7"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Assert\\": "lib/Assert"
+                },
+                "files": [
+                    "lib/Assert/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Richard Quadling",
+                    "email": "rquadling@gmail.com",
+                    "role": "Collaborator"
+                }
+            ],
+            "description": "Thin assertion library for input validation in business models.",
+            "keywords": [
+                "assert",
+                "assertion",
+                "validation"
+            ],
+            "time": "2018-04-16T11:18:27+00:00"
+        },
+        {
+            "name": "composer/ca-bundle",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
+                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0 || ^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "time": "2018-03-29T19:57:20+00:00"
+        },
+        {
+            "name": "composer/composer",
+            "version": "1.6.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/composer.git",
+                "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/composer/zipball/b184a92419cc9a9c4c6a09db555a94d441cb11c9",
+                "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9",
+                "shasum": ""
+            },
+            "require": {
+                "composer/ca-bundle": "^1.0",
+                "composer/semver": "^1.0",
+                "composer/spdx-licenses": "^1.2",
+                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
+                "php": "^5.3.2 || ^7.0",
+                "psr/log": "^1.0",
+                "seld/cli-prompt": "^1.0",
+                "seld/jsonlint": "^1.4",
+                "seld/phar-utils": "^1.0",
+                "symfony/console": "^2.7 || ^3.0 || ^4.0",
+                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
+                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
+                "symfony/process": "^2.7 || ^3.0 || ^4.0"
+            },
+            "conflict": {
+                "symfony/console": "2.8.38"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7",
+                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
+            },
+            "suggest": {
+                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+                "ext-zip": "Enabling the zip extension allows you to unzip archives",
+                "ext-zlib": "Allow gzip compression of HTTP requests"
+            },
+            "bin": [
+                "bin/composer"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\": "src/Composer"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
+            "homepage": "https://getcomposer.org/",
+            "keywords": [
+                "autoload",
+                "dependency",
+                "package"
+            ],
+            "time": "2018-05-04T09:44:59+00:00"
+        },
+        {
+            "name": "composer/semver",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/semver.git",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5 || ^5.0.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Semver\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "keywords": [
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
+            ],
+            "time": "2016-08-30T16:08:34+00:00"
+        },
+        {
+            "name": "composer/spdx-licenses",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/spdx-licenses.git",
+                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
+                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
+                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Spdx\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "SPDX licenses list and validation library.",
+            "keywords": [
+                "license",
+                "spdx",
+                "validator"
+            ],
+            "time": "2018-04-30T10:33:04+00:00"
+        },
+        {
+            "name": "composer/xdebug-handler",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/xdebug-handler.git",
+                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
+                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0",
+                "psr/log": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Composer\\XdebugHandler\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "John Stevenson",
+                    "email": "john-stevenson@blueyonder.co.uk"
+                }
+            ],
+            "description": "Restarts a process without xdebug.",
+            "keywords": [
+                "Xdebug",
+                "performance"
+            ],
+            "time": "2018-04-11T15:42:36+00:00"
+        },
+        {
+            "name": "doctrine/annotations",
+            "version": "v1.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/annotations.git",
+                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
+                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/lexer": "1.*",
+                "php": "^7.1"
+            },
+            "require-dev": {
+                "doctrine/cache": "1.*",
+                "phpunit/phpunit": "^6.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "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": "Docblock Annotations Parser",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "parser"
+            ],
+            "time": "2017-12-06T07:11:42+00:00"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
+                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Doctrine\\Common\\Lexer\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "lexer",
+                "parser"
+            ],
+            "time": "2014-09-09T13:34:57+00:00"
+        },
+        {
+            "name": "herrera-io/annotations",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/kherge-abandoned/php-annotations.git",
+                "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/kherge-abandoned/php-annotations/zipball/7d8b9a536da7f12aad8de7f28b2cb5266bde8da1",
+                "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/annotations": "~1.0",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "herrera-io/phpunit-test-case": "1.*",
+                "phpunit/phpunit": "3.7.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Herrera\\Annotations": "src/lib"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kevin Herrera",
+                    "email": "kevin@herrera.io",
+                    "homepage": "http://kevin.herrera.io"
+                }
+            ],
+            "description": "A tokenizer for Doctrine annotations.",
+            "homepage": "https://github.com/herrera-io/php-annotations",
+            "keywords": [
+                "annotations",
+                "doctrine",
+                "tokenizer"
+            ],
+            "abandoned": true,
+            "time": "2014-02-03T17:34:08+00:00"
+        },
+        {
+            "name": "humbug/box",
+            "version": "3.0.0-alpha.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/humbug/box.git",
+                "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/humbug/box/zipball/26b3f481e3b375f55c0644f501b831f7c05d8058",
+                "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058",
+                "shasum": ""
+            },
+            "require": {
+                "amphp/parallel-functions": "^0.1.2",
+                "beberlei/assert": "^2.8",
+                "composer/composer": "^1.6",
+                "composer/xdebug-handler": "^1.1.0",
+                "ext-phar": "*",
+                "herrera-io/annotations": "~1.0",
+                "humbug/php-scoper": "^1.0@dev",
+                "justinrainbow/json-schema": "^5.2",
+                "nikic/iter": "^1.6",
+                "php": "^7.1",
+                "phpseclib/phpseclib": "~2.0",
+                "seld/jsonlint": "^1.6",
+                "symfony/console": "^3.4 || ^4.0",
+                "symfony/filesystem": "^3.4 || ^4.0",
+                "symfony/finder": "^3.4 || ^4.0",
+                "symfony/var-dumper": "^3.4 || ^4.0",
+                "webmozart/path-util": "^2.3"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.2",
+                "infection/infection": "^0.8",
+                "mikey179/vfsstream": "^1.1",
+                "phpunit/phpunit": "^7.0"
+            },
+            "suggest": {
+                "ext-openssl": "To accelerate private key generation."
+            },
+            "bin": [
+                "bin/box"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                },
+                "bamarni-bin": {
+                    "bin-links": false
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "KevinGH\\Box\\": "src"
+                },
+                "files": [
+                    "src/FileSystem/file_system.php",
+                    "src/functions.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kevin Herrera",
+                    "email": "kevin@herrera.io",
+                    "homepage": "http://kevin.herrera.io"
+                },
+                {
+                    "name": "Théo Fidry",
+                    "email": "theo.fidry@gmail.com"
+                }
+            ],
+            "description": "Fast, zero config application bundler with PHARs.",
+            "keywords": [
+                "phar"
+            ],
+            "time": "2018-05-04T22:04:10+00:00"
+        },
+        {
+            "name": "humbug/php-scoper",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/humbug/php-scoper.git",
+                "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/humbug/php-scoper/zipball/450fe36a7457847d0cb431e7379b5df9d05992a4",
+                "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^3.0",
+                "ocramius/package-versions": "^1.1",
+                "padraic/phar-updater": "^1.0",
+                "php": "^7.1",
+                "roave/better-reflection": "^2.0",
+                "symfony/console": "^3.2 || ^4.0",
+                "symfony/filesystem": "^3.2 || ^4.0",
+                "symfony/finder": "^3.2 || ^4.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.1",
+                "phpunit/phpunit": "^6.1"
+            },
+            "bin": [
+                "bin/php-scoper"
+            ],
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": false
+                },
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Humbug\\PhpScoper\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                },
+                {
+                    "name": "Théo Fidry",
+                    "email": "theo.fidry@gmail.com"
+                },
+                {
+                    "name": "Pádraic Brady",
+                    "email": "padraic.brady@gmail.com"
+                }
+            ],
+            "description": "Prefixes all PHP namespaces in a file or directory.",
+            "time": "2018-04-25T21:59:07+00:00"
+        },
+        {
+            "name": "justinrainbow/json-schema",
+            "version": "5.2.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/justinrainbow/json-schema.git",
+                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
+                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^2.1",
+                "json-schema/json-schema-test-suite": "1.2.0",
+                "phpunit/phpunit": "^4.8.35"
+            },
+            "bin": [
+                "bin/validate-json"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "JsonSchema\\": "src/JsonSchema/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "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": "Robert Schönthal",
+                    "email": "seroscho@googlemail.com"
+                }
+            ],
+            "description": "A library to validate a json schema.",
+            "homepage": "https://github.com/justinrainbow/json-schema",
+            "keywords": [
+                "json",
+                "schema"
+            ],
+            "time": "2018-02-14T22:26:30+00:00"
+        },
+        {
+            "name": "nikic/iter",
+            "version": "v1.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/iter.git",
+                "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/iter/zipball/fed36b417ea93fe9b4b7cb2e2abf98d91092564c",
+                "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0|~5.0"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov",
+                    "email": "nikic@php.net"
+                }
+            ],
+            "description": "Iteration primitives using generators",
+            "keywords": [
+                "functional",
+                "generator",
+                "iterator"
+            ],
+            "time": "2017-11-10T22:56:03+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v3.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0|~5.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "time": "2018-02-28T20:30:58+00:00"
+        },
+        {
+            "name": "ocramius/package-versions",
+            "version": "1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Ocramius/PackageVersions.git",
+                "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f",
+                "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.0.0",
+                "php": "^7.1.0"
+            },
+            "require-dev": {
+                "composer/composer": "^1.6.3",
+                "ext-zip": "*",
+                "infection/infection": "^0.7.1",
+                "phpunit/phpunit": "^7.0.0"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "PackageVersions\\Installer",
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PackageVersions\\": "src/PackageVersions"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com"
+                }
+            ],
+            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+            "time": "2018-02-05T13:05:30+00:00"
+        },
+        {
+            "name": "opis/closure",
+            "version": "3.0.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/opis/closure.git",
+                "reference": "507a28d15e79258d404ba76e73976ba895d0eb11"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/opis/closure/zipball/507a28d15e79258d404ba76e73976ba895d0eb11",
+                "reference": "507a28d15e79258d404ba76e73976ba895d0eb11",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "jeremeamia/superclosure": "^2.0",
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Opis\\Closure\\": "src/"
+                },
+                "files": [
+                    "functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marius Sarca",
+                    "email": "marius.sarca@gmail.com"
+                }
+            ],
+            "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+            "homepage": "http://www.opis.io/closure",
+            "keywords": [
+                "anonymous functions",
+                "closure",
+                "function",
+                "serializable",
+                "serialization",
+                "serialize"
+            ],
+            "time": "2018-02-23T08:08:14+00:00"
+        },
+        {
+            "name": "padraic/humbug_get_contents",
+            "version": "1.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/humbug/file_get_contents.git",
+                "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/humbug/file_get_contents/zipball/dcb086060c9dd6b2f51d8f7a895500307110b7a7",
+                "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7",
+                "shasum": ""
+            },
+            "require": {
+                "composer/ca-bundle": "^1.0",
+                "ext-openssl": "*",
+                "php": "^5.3 || ^7.0 || ^7.1 || ^7.2"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.1",
+                "mikey179/vfsstream": "^1.6",
+                "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5"
+            },
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": false
+                },
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Humbug\\": "src/"
+                },
+                "files": [
+                    "src/function.php",
+                    "src/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Padraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "http://blog.astrumfutura.com"
+                },
+                {
+                    "name": "Théo Fidry",
+                    "email": "theo.fidry@gmail.com"
+                }
+            ],
+            "description": "Secure wrapper for accessing HTTPS resources with file_get_contents for PHP 5.3+",
+            "homepage": "https://github.com/padraic/file_get_contents",
+            "keywords": [
+                "download",
+                "file_get_contents",
+                "http",
+                "https",
+                "ssl",
+                "tls"
+            ],
+            "time": "2018-02-12T18:47:17+00:00"
+        },
+        {
+            "name": "padraic/phar-updater",
+            "version": "v1.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/humbug/phar-updater.git",
+                "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/humbug/phar-updater/zipball/d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1",
+                "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1",
+                "shasum": ""
+            },
+            "require": {
+                "padraic/humbug_get_contents": "^1.0",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Humbug\\SelfUpdate\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Pádraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "http://blog.astrumfutura.com"
+                }
+            ],
+            "description": "A thing to make PHAR self-updating easy and secure.",
+            "keywords": [
+                "humbug",
+                "phar",
+                "self-update",
+                "update"
+            ],
+            "time": "2018-03-30T12:52:15+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6"
+            },
+            "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": "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": "2017-09-11T18:02:19+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "4.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
+                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "shasum": ""
+            },
+            "require": {
+                "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": "4.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"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2017-11-30T07:14:17+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "0.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5 || ^7.0",
+                "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": "2017-07-14T14:27:02+00:00"
+        },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "2.0.11",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b",
+                "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phing/phing": "~2.7",
+                "phpunit/phpunit": "^4.8.35|^5.7|^6.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": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "role": "Developer"
+                }
+            ],
+            "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": "2018-04-15T16:55:05+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2016-10-10T12:19:37+00:00"
+        },
+        {
+            "name": "roave/better-reflection",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Roave/BetterReflection.git",
+                "reference": "efc45b50cb52d5eeaacab15741376e981e28738b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/efc45b50cb52d5eeaacab15741376e981e28738b",
+                "reference": "efc45b50cb52d5eeaacab15741376e981e28738b",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^3.1.1",
+                "php": ">=7.1.0,<7.3.0",
+                "phpdocumentor/reflection-docblock": "^4.1.1",
+                "phpdocumentor/type-resolver": "^0.4.0",
+                "roave/signature": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.3.0"
+            },
+            "suggest": {
+                "composer/composer": "Required to use the ComposerSourceLocator"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Roave\\BetterReflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.io/"
+                },
+                {
+                    "name": "James Titcumb",
+                    "email": "james@asgrim.com",
+                    "homepage": "https://github.com/asgrim"
+                },
+                {
+                    "name": "Gary Hockin",
+                    "email": "gary@roave.com",
+                    "homepage": "https://github.com/geeh"
+                },
+                {
+                    "name": "Jaroslav Hanslík",
+                    "email": "kukulich@kukulich.cz",
+                    "homepage": "https://github.com/kukulich"
+                }
+            ],
+            "description": "Better Reflection - an improved code reflection API",
+            "time": "2018-02-05T08:08:57+00:00"
+        },
+        {
+            "name": "roave/signature",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Roave/Signature.git",
+                "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Roave/Signature/zipball/bed4ecbdd7f312ab6bb39561ac191f520bcee386",
+                "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0|^7.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Roave\\Signature\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Sign and verify stuff",
+            "time": "2017-02-17T13:53:21+00:00"
+        },
+        {
+            "name": "seld/cli-prompt",
+            "version": "1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/cli-prompt.git",
+                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
+                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Seld\\CliPrompt\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be"
+                }
+            ],
+            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
+            "keywords": [
+                "cli",
+                "console",
+                "hidden",
+                "input",
+                "prompt"
+            ],
+            "time": "2017-03-18T11:32:45+00:00"
+        },
+        {
+            "name": "seld/jsonlint",
+            "version": "1.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/jsonlint.git",
+                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
+                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.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"
+                }
+            ],
+            "description": "JSON Linter",
+            "keywords": [
+                "json",
+                "linter",
+                "parser",
+                "validator"
+            ],
+            "time": "2018-01-24T12:46:19+00:00"
+        },
+        {
+            "name": "seld/phar-utils",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/phar-utils.git",
+                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Seld\\PharUtils\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be"
+                }
+            ],
+            "description": "PHAR file format utilities, for when PHP phars you up",
+            "keywords": [
+                "phra"
+            ],
+            "time": "2015-10-13T18:44:15+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v4.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae",
+                "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/process": "<3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~3.4|~4.0",
+                "symfony/dependency-injection": "~3.4|~4.0",
+                "symfony/event-dispatcher": "~3.4|~4.0",
+                "symfony/lock": "~3.4|~4.0",
+                "symfony/process": "~3.4|~4.0"
+            },
+            "suggest": {
+                "psr/log-implementation": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "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 Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-04-30T01:23:47+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v4.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21",
+                "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "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 Filesystem Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-02-22T10:50:29+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v4.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
+                "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "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 Finder Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-04-04T05:10:37+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
+                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2018-04-26T10:06:28+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
+                "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2018-04-26T10:06:28+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v4.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
+                "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "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 Process Component",
+            "homepage": "https://symfony.com",
+            "time": "2018-04-03T05:24:00+00:00"
+        },
+        {
+            "name": "symfony/var-dumper",
+            "version": "v4.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3c34cf3f4bbac9e003d9325225e9ef1a49180a18",
+                "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18",
+                "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"
+            },
+            "require-dev": {
+                "ext-iconv": "*",
+                "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"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-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": "2018-04-26T16:12:06+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
+                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6",
+                "sebastian/version": "^1.0.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2018-01-29T19:49:41+00:00"
+        },
+        {
+            "name": "webmozart/path-util",
+            "version": "2.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/path-util.git",
+                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "webmozart/assert": "~1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6",
+                "sebastian/version": "^1.0.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\PathUtil\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
+            "time": "2015-12-17T08:42:14+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "dev",
+    "stability-flags": {
+        "humbug/box": 15
+    },
+    "prefer-stable": true,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": []
+}
diff --git a/web/modules/contrib/media_entity_document/LICENSE.txt b/web/modules/contrib/media_entity_document/LICENSE.txt
deleted file mode 100644 (file)
index d159169..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/web/modules/contrib/media_entity_document/config/schema/media_entity_document.schema.yml b/web/modules/contrib/media_entity_document/config/schema/media_entity_document.schema.yml
deleted file mode 100644 (file)
index c738749..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-media_entity.bundle.type.document:
-  type: mapping
-  label: 'Document type configuration'
-  mapping:
-    source_field:
-      type: string
-      label: 'Field with source information'
diff --git a/web/modules/contrib/media_entity_document/images/icons/document.png b/web/modules/contrib/media_entity_document/images/icons/document.png
deleted file mode 100755 (executable)
index 8f9da3d..0000000
Binary files a/web/modules/contrib/media_entity_document/images/icons/document.png and /dev/null differ
diff --git a/web/modules/contrib/media_entity_document/media_entity_document.info.yml b/web/modules/contrib/media_entity_document/media_entity_document.info.yml
deleted file mode 100644 (file)
index 7f2f436..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-name: Media entity document
-description: 'Media entity local documents provider.'
-type: module
-package: Media
-# core: 8.x
-dependencies:
-  - media_entity
-
-# Information added by Drupal.org packaging script on 2016-06-02
-version: '8.x-1.0'
-core: '8.x'
-project: 'media_entity_document'
-datestamp: 1464882942
diff --git a/web/modules/contrib/media_entity_document/media_entity_document.install b/web/modules/contrib/media_entity_document/media_entity_document.install
deleted file mode 100644 (file)
index 2039f28..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * @file
- * Install, uninstall and update hooks for Media entity document module.
- */
-
-/**
- * Implements hook_install().
- */
-function media_entity_document_install() {
-  $source = drupal_get_path('module', 'media_entity_document') . '/images/icons';
-  $destination = \Drupal::config('media_entity.settings')->get('icon_base');
-  media_entity_copy_icons($source, $destination);
-}
diff --git a/web/modules/contrib/media_entity_document/media_entity_document.module b/web/modules/contrib/media_entity_document/media_entity_document.module
deleted file mode 100644 (file)
index b3d9bbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/web/modules/contrib/media_entity_document/src/Plugin/EntityBrowser/Widget/Upload.php b/web/modules/contrib/media_entity_document/src/Plugin/EntityBrowser/Widget/Upload.php
deleted file mode 100644 (file)
index b377b6d..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-namespace Drupal\media_entity_document\Plugin\EntityBrowser\Widget;
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\entity_browser\Plugin\EntityBrowser\Widget\Upload as FileUpload;
-use Drupal\Core\Url;
-
-/**
- * Uses upload to create media entity documents.
- *
- * @EntityBrowserWidget(
- *   id = "media_entity_document_upload",
- *   label = @Translation("Upload documents"),
- *   description = @Translation("Upload widget that creates media entity documents.")
- * )
- */
-class Upload extends FileUpload {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function defaultConfiguration() {
-    return [
-      'extensions' => 'txt, pdf',
-      'media bundle' => NULL,
-    ] + parent::defaultConfiguration();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getForm(array &$original_form, FormStateInterface $form_state, array $aditional_widget_parameters) {
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    if (!$this->configuration['media bundle'] || !($bundle = $this->entityManager->getStorage('media_bundle')->load($this->configuration['media bundle']))) {
-      return ['#markup' => $this->t('The media bundle is not configured correctly.')];
-    }
-
-    if ($bundle->getType()->getPluginId() != 'document') {
-      return ['#markup' => $this->t('The configured bundle is not using document plugin.')];
-    }
-
-    $form = parent::getForm($original_form, $form_state, $aditional_widget_parameters);
-    $form['upload']['upload_validators']['file_validate_extensions'] = [$this->configuration['extensions']];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submit(array &$element, array &$form, FormStateInterface $form_state) {
-    $documents = [];
-
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $this->entityManager
-      ->getStorage('media_bundle')
-      ->load($this->configuration['media bundle']);
-    $files = $this->extractFiles($form_state);
-
-    foreach ($files as $file) {
-      /** @var \Drupal\media_entity\MediaInterface $document */
-      $document = $this->entityManager->getStorage('media')->create([
-        'bundle' => $bundle->id(),
-        $bundle->getTypeConfiguration()['source_field'] => $file,
-      ]);
-
-      $filename = $file->filename->value;
-      if ($filename) {
-        $document->set('name', $filename);
-      }
-
-      $document->save();
-      $documents[] = $document;
-    }
-
-    $this->selectEntities($documents, $form_state);
-    $this->clearFormValues($element, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $bundle_options = [];
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    $form['extensions'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Allowed extensions'),
-      '#default_value' => $this->configuration['extensions'],
-      '#required' => TRUE,
-    ];
-
-    $bundles = $this->entityManager
-      ->getStorage('media_bundle')
-      ->loadByProperties(['type' => 'document']);
-
-    foreach ($bundles as $bundle) {
-      $bundle_options[$bundle->id()] = $bundle->label();
-    }
-
-    switch (count($bundle_options)) {
-      case 0:
-        $url = Url::fromRoute('media.bundle_add')->toString();
-        $form['media bundle'] = [
-          '#markup' => $this->t("You don't have media bundle of the Document type. You should <a href='!link'>create one</a>", ['!link' => $url]),
-        ];
-        break;
-
-      case 1:
-        $form['media bundle'] = [
-          '#value' => key($bundle_options),
-          '#type' => 'value',
-        ];
-        break;
-
-      default:
-        $form['media bundle'] = [
-          '#type' => 'select',
-          '#title' => $this->t('Media bundle'),
-          '#default_value' => $this->configuration['media bundle'],
-          '#options' => $bundle_options,
-        ];
-    }
-
-    return $form;
-  }
-
-}
diff --git a/web/modules/contrib/media_entity_document/src/Plugin/MediaEntity/Type/Document.php b/web/modules/contrib/media_entity_document/src/Plugin/MediaEntity/Type/Document.php
deleted file mode 100644 (file)
index 196117d..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-namespace Drupal\media_entity_document\Plugin\MediaEntity\Type;
-
-use Drupal\media_entity\MediaInterface;
-use Drupal\media_entity\MediaTypeBase;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Provides media type plugin for Document.
- *
- * @MediaType(
- *   id = "document",
- *   label = @Translation("Document"),
- *   description = @Translation("Provides business logic and metadata for local documents.")
- * )
- */
-class Document extends MediaTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function providedFields() {
-    return [
-      'mime' => t('File MIME'),
-      'size' => t('Size'),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getField(MediaInterface $media, $name) {
-    $source_field = $this->configuration['source_field'];
-    $property_name = $media->{$source_field}->first()->mainPropertyName();
-
-    // Get the file document.
-    /** @var \Drupal\file\FileInterface $file */
-    $file = $this->entityTypeManager->getStorage('file')->load($media->{$source_field}->first()->{$property_name});
-
-    // Return the field.
-    switch ($name) {
-      case 'mime':
-        return !$file->filemime->isEmpty() ? $file->getMimeType() : FALSE;
-
-      case 'size':
-        $size = $file->getSize();
-        return $size ? $size : FALSE;
-    }
-
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $form_state->getFormObject()->getEntity();
-    $options = [];
-    $allowed_field_types = ['file'];
-    foreach ($this->entityFieldManager->getFieldDefinitions('media', $bundle->id()) as $field_name => $field) {
-      if (in_array($field->getType(), $allowed_field_types) && !$field->getFieldStorageDefinition()->isBaseField()) {
-        $options[$field_name] = $field->getLabel();
-      }
-    }
-
-    $form['source_field'] = [
-      '#type' => 'select',
-      '#title' => t('Field with source information'),
-      '#description' => t('Field on media entity that stores Document file. You can create a bundle without selecting a value for this dropdown initially. This dropdown can be populated after adding fields to the bundle.'),
-      '#default_value' => empty($this->configuration['source_field']) ? NULL : $this->configuration['source_field'],
-      '#options' => $options,
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function thumbnail(MediaInterface $media) {
-    $source_field = $this->configuration['source_field'];
-    /** @var \Drupal\file\FileInterface $file */
-    $file = $this->entityTypeManager->getStorage('file')->load($media->{$source_field}->target_id);
-    $mimetype = $file->getMimeType();
-    $mimetype = explode('/', $mimetype);
-    $thumbnail = $this->config->get('icon_base') . "/{$mimetype[0]}-{$mimetype[1]}.png";
-
-    if (!is_file($thumbnail)) {
-      $thumbnail = $this->config->get('icon_base') . "/{$mimetype[1]}.png";
-
-      if (!is_file($thumbnail)) {
-        $thumbnail = $this->config->get('icon_base') . '/document.png';
-      }
-    }
-
-    return $thumbnail;
-  }
-
-}
diff --git a/web/modules/contrib/media_entity_image/DEVELOPING.md b/web/modules/contrib/media_entity_image/DEVELOPING.md
deleted file mode 100644 (file)
index 6e3eeeb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Developing
-
-* Issues should be filed at [Drupal.org].
-* Code changes can be submitted in the patch form and uploaded to the Drupal.org
-  issue or as a [GitHub pull request].
-
-[Drupal.org]: http://drupal.org/project/issues/media_entity_image
-[GitHub pull request]: https://github.com/drupal-media/media_entity_image/pulls
diff --git a/web/modules/contrib/media_entity_image/LICENSE.txt b/web/modules/contrib/media_entity_image/LICENSE.txt
deleted file mode 100644 (file)
index d159169..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/web/modules/contrib/media_entity_image/README.md b/web/modules/contrib/media_entity_image/README.md
deleted file mode 100644 (file)
index 0265d08..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-## About Media entity
-
-Media entity provides a 'base' entity for a media element. This is a
-very basic entity which can reference to all kinds of media-objects
-(local files, YouTube videos, tweets, CDN-files, ...). This entity only
-provides a relation between Drupal (because it is an entity) and the
-resource. You can reference to this entity within any other Drupal
-entity.
-
-## About Media entity image
-
-This module provides local image integration for Media entity (i.e.
-media type provider plugin). The user can map fields from image's Exif
-data to media bundle fields.
-
-### Mapping meta-data to drupal fields
-
-If you want to map some of the image meta-data (for example some of the
-EXIF information), follow these steps:
-1- Create a media bundle of type image
-2- Create some normal fields that will be used to store this information
-3- Go back to the bundle edit form, select "Yes" on the "Whether to
-gather exif data" drop down
-4- Map the desired EXIF fields to the fields you created in step 2.
-These will get automatically populated each time the entity is saved and
-the drupal fields on the entity are empty.
-NOTE that this behavior (only mapping the meta-data when the drupal
-field is empty) may change in the future, once this issue is solved:
-https://www.drupal.org/node/2772045
-
-
-Project page: http://drupal.org/project/media_entity_image.
-
-Maintainers:
- - Janez Urevc (@slashrsm) drupal.org/user/744628
- - Primož Hmeljak (@primsi) drupal.org/user/282629
-
-IRC channel: #drupal-media
diff --git a/web/modules/contrib/media_entity_image/composer.json b/web/modules/contrib/media_entity_image/composer.json
deleted file mode 100644 (file)
index 62b5c9d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "name": "drupal/media_entity_image",
-  "type": "drupal-module",
-  "description": "Local images integration for Drupal Media entity.",
-  "keywords": ["Drupal", "media", "image"],
-  "license": "GPL-2.0+",
-  "homepage": "https://www.drupal.org/project/media_entity_image",
-  "minimum-stability": "dev",
-  "support": {
-    "issues": "https://www.drupal.org/project/issues/media_entity_image",
-    "source": "https://www.drupal.org/project/media_entity_image"
-  },
-  "repositories": [
-    {
-      "type": "composer",
-      "url": "https://packages.drupal.org/8"
-    }
-  ],
-  "require": {
-    "drupal/core": "~8.1",
-    "drupal/media_entity": "~1.0 || ~8.1.0 || ~2.0"
-  }
-}
diff --git a/web/modules/contrib/media_entity_image/config/schema/media_entity_image.schema.yml b/web/modules/contrib/media_entity_image/config/schema/media_entity_image.schema.yml
deleted file mode 100644 (file)
index 3ce6ec2..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-media_entity.bundle.type.image:
-  type: mapping
-  label: 'Image type configuration'
-  mapping:
-    source_field:
-      type: string
-      label: 'Field with embed code/URL'
-    gather_exif:
-      type: boolean
-      label: 'Gather EXIF metadata'
-
-entity_browser.browser.widget.media_entity_image_upload:
-  type: mapping
-  label: 'Media images upload widget configuration'
-  mapping:
-    submit_text:
-      type: string
-      label: 'Submit button text'
-    upload_location:
-      type: string
-      label: 'Upload location'
-    multiple:
-      type: boolean
-      label: 'Allow multiple uploads'
-    extensions:
-      type: string
-      label: 'Allowed file extensions'
-    media_bundle:
-      type: string
-      label: 'Media bundle for uploaded files'
diff --git a/web/modules/contrib/media_entity_image/images/icons/image.png b/web/modules/contrib/media_entity_image/images/icons/image.png
deleted file mode 100644 (file)
index c50e3c7..0000000
Binary files a/web/modules/contrib/media_entity_image/images/icons/image.png and /dev/null differ
diff --git a/web/modules/contrib/media_entity_image/media_entity_image.info.yml b/web/modules/contrib/media_entity_image/media_entity_image.info.yml
deleted file mode 100644 (file)
index 2fa74a6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-name: Media entity image
-description: 'Provides the Image plugin for Media Entity.'
-type: module
-package: Media
-# core: 8.x
-dependencies:
-  - media_entity
-
-test_dependencies:
-  - entity_browser
-
-# Information added by Drupal.org packaging script on 2018-05-01
-version: '8.x-1.3'
-core: '8.x'
-project: 'media_entity_image'
-datestamp: 1525218784
diff --git a/web/modules/contrib/media_entity_image/media_entity_image.install b/web/modules/contrib/media_entity_image/media_entity_image.install
deleted file mode 100644 (file)
index af92eba..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, uninstall and update hooks for Media entity image module.
- */
-
-/**
- * Implements hook_install().
- */
-function media_entity_image_install() {
-  $source = drupal_get_path('module', 'media_entity_image') . '/images/icons';
-  $destination = \Drupal::config('media_entity.settings')->get('icon_base');
-  media_entity_copy_icons($source, $destination);
-}
-
-/**
- * Implements hook_requirements().
- */
-function media_entity_image_requirements() {
-  $requirements = [];
-
-  if (version_compare(\Drupal::VERSION, '8.4.0', '>=') && \Drupal::moduleHandler()->moduleExists('media')) {
-    $requirements['media_entity_image: Not compatible with core Media'] = [
-      'title' => t('Core Media'),
-      'description' => t("Media Entity Image's functionality has been merged into the core Media module, so it cannot be installed alongside core Media."),
-      'severity' => REQUIREMENT_ERROR,
-    ];
-  }
-
-  return $requirements;
-}
diff --git a/web/modules/contrib/media_entity_image/media_entity_image.module b/web/modules/contrib/media_entity_image/media_entity_image.module
deleted file mode 100644 (file)
index efe5bbc..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * @file
- * Module implementation file.
- */
-
-use Drupal\Core\Routing\RouteMatchInterface;
-
-/**
- * Implements hook_help().
- */
-function media_entity_image_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.media_entity_image':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Media Entity Image module allows you to create media bundles that contain images. See the Media Entity module help
- page for general information on Media entity and how to create and manage media bundles.
- For more information, see the <a href=":online">online documentation for the Media Entity Image module</a>.', array(':online' => 'https://www.drupal.org/node/2718445')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Selecting the Media Entity Image Type provider') . '</dt>';
-      $output .= '<dd>' . t('The Media Entity Image type provider plugin, responsible for adding logic related to this Image media, is selectable when adding media bundles. When first creating Image media bundles, there are no fields on the media entity that store Image files. You can create a bundle without selecting a value for this initially. It can be populated after adding Image fields to the bundle.') . '</dd>';
-      $output .= '<dt>' . t('Populating Media Entity Image media bundles') . '</dt>';
-      $output .= '<dd>' . t('Populate media bundles using Manage fields, Manage form displays, and Manage displays as you would for Content, Contact, or Comment entity types. When an image field is added to the image media bundle the Type Provider Information recognizes it as a Field with source information, at which point the exif data information for that source can be gathered.') . '</dd>';
-      $output .= '<dt>' . t('Managing and Displaying Media Entity Image media bundles') . '</dt>';
-      $output .= '<dd>' . t('The <em>settings</em> and the <em>display</em> of the media entity image media bundles can be configured separately. See the Media Entity module help page for more information on how to manage media bundles and their display.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
diff --git a/web/modules/contrib/media_entity_image/src/Plugin/EntityBrowser/Widget/Upload.php b/web/modules/contrib/media_entity_image/src/Plugin/EntityBrowser/Widget/Upload.php
deleted file mode 100644 (file)
index 97551b7..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-namespace Drupal\media_entity_image\Plugin\EntityBrowser\Widget;
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\entity_browser\Plugin\EntityBrowser\Widget\Upload as FileUpload;
-use Drupal\media_entity\MediaInterface;
-
-/**
- * Uses upload to create media entity images.
- *
- * @EntityBrowserWidget(
- *   id = "media_entity_image_upload",
- *   label = @Translation("Upload images"),
- *   description = @Translation("Upload widget that creates media entity images."),
- *   auto_select = FALSE
- * )
- */
-class Upload extends FileUpload {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function defaultConfiguration() {
-    return [
-      'extensions' => 'jpg jpeg png gif',
-      'media_bundle' => NULL,
-    ] + parent::defaultConfiguration();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getForm(array &$original_form, FormStateInterface $form_state, array $aditional_widget_parameters) {
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    if (!$this->configuration['media_bundle'] || !($bundle = $this->entityTypeManager->getStorage('media_bundle')->load($this->configuration['media_bundle']))) {
-      return ['#markup' => $this->t('The media bundle is not configured correctly.')];
-    }
-
-    if ($bundle->getType()->getPluginId() != 'image') {
-      return ['#markup' => $this->t('The configured bundle is not using image plugin.')];
-    }
-
-    $form = parent::getForm($original_form, $form_state, $aditional_widget_parameters);
-    $form['upload']['#upload_validators']['file_validate_extensions'] = [$this->configuration['extensions']];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function prepareEntities(array $form, FormStateInterface $form_state) {
-    $files = parent::prepareEntities($form, $form_state);
-
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $this->entityTypeManager
-      ->getStorage('media_bundle')
-      ->load($this->configuration['media_bundle']);
-
-    $images = [];
-    foreach ($files as $file) {
-      /** @var \Drupal\media_entity\MediaInterface $image */
-      $image = $this->entityTypeManager->getStorage('media')->create([
-        'bundle' => $bundle->id(),
-        $bundle->getTypeConfiguration()['source_field'] => $file,
-      ]);
-      $images[] = $image;
-    }
-
-    return $images;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submit(array &$element, array &$form, FormStateInterface $form_state) {
-    if (!empty($form_state->getTriggeringElement()['#eb_widget_main_submit'])) {
-      $images = $this->prepareEntities($form, $form_state);
-      array_walk(
-        $images,
-        function (MediaInterface $media) {
-          $media->save();
-        }
-      );
-
-      $this->selectEntities($images, $form_state);
-      $this->clearFormValues($element, $form_state);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-    $form['extensions'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Allowed extensions'),
-      '#default_value' => $this->configuration['extensions'],
-      '#required' => TRUE,
-    ];
-
-    $bundle_options = [];
-    $bundles = $this
-      ->entityTypeManager
-      ->getStorage('media_bundle')
-      ->loadByProperties(['type' => 'image']);
-
-    foreach ($bundles as $bundle) {
-      $bundle_options[$bundle->id()] = $bundle->label();
-    }
-
-    if (empty($bundle_options)) {
-      $url = Url::fromRoute('media.bundle_add')->toString();
-      $form['media_bundle'] = [
-        '#markup' => $this->t("You don't have media bundle of the Image type. You should <a href='!link'>create one</a>", ['!link' => $url]),
-      ];
-    }
-    else {
-      $form['media_bundle'] = [
-        '#type' => 'select',
-        '#title' => $this->t('Media bundle'),
-        '#default_value' => $this->configuration['media_bundle'],
-        '#options' => $bundle_options,
-      ];
-    }
-
-    return $form;
-  }
-
-}
diff --git a/web/modules/contrib/media_entity_image/src/Plugin/MediaEntity/Type/Image.php b/web/modules/contrib/media_entity_image/src/Plugin/MediaEntity/Type/Image.php
deleted file mode 100644 (file)
index e2fab5b..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-namespace Drupal\media_entity_image\Plugin\MediaEntity\Type;
-
-use Drupal\Core\Config\Config;
-use Drupal\Core\Datetime\DrupalDateTime;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Image\ImageFactory;
-use Drupal\media_entity\MediaInterface;
-use Drupal\media_entity\MediaTypeBase;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Provides media type plugin for Image.
- *
- * @MediaType(
- *   id = "image",
- *   label = @Translation("Image"),
- *   description = @Translation("Provides business logic and metadata for local images.")
- * )
- */
-class Image extends MediaTypeBase {
-
-  /**
-   * The image factory service..
-   *
-   * @var \Drupal\Core\Image\ImageFactory
-   */
-  protected $imageFactory;
-
-  /**
-   * The exif data.
-   *
-   * @var array
-   */
-  protected $exif;
-
-  /**
-   * Constructs a new class instance.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param mixed $plugin_definition
-   *   The plugin implementation definition.
-   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
-   *   Entity type manager service.
-   * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
-   *   Entity field manager service.
-   * @param \Drupal\Core\Image\ImageFactory $image_factory
-   *   The image factory.
-   * @param \Drupal\Core\Config\Config $config
-   *   Media entity config object.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, ImageFactory $image_factory, Config $config) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_field_manager, $config);
-    $this->imageFactory = $image_factory;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->get('entity_type.manager'),
-      $container->get('entity_field.manager'),
-      $container->get('image.factory'),
-      $container->get('config.factory')->get('media_entity.settings')
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function providedFields() {
-    $fields = array(
-      'mime' => $this->t('File MIME'),
-      'width' => $this->t('Width'),
-      'height' => $this->t('Height'),
-    );
-
-    if (!empty($this->configuration['gather_exif'])) {
-      $fields += array(
-        'model' => $this->t('Camera model'),
-        'created' => $this->t('Image creation datetime'),
-        'iso' => $this->t('Iso'),
-        'exposure' => $this->t('Exposure time'),
-        'aperture' => $this->t('Aperture value'),
-        'focal_length' => $this->t('Focal length'),
-      );
-    }
-    return $fields;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getField(MediaInterface $media, $name) {
-    $source_field = $this->configuration['source_field'];
-
-    // Get the file, image and exif data.
-    /** @var \Drupal\file\FileInterface $file */
-    $file = $media->{$source_field}->entity;
-    $image = $this->imageFactory->get($file->getFileUri());
-    $uri = $file->getFileUri();
-
-    // Return the field.
-    switch ($name) {
-      case 'mime':
-        return !$file->filemime->isEmpty() ? $file->getMimeType() : FALSE;
-
-      case 'width':
-        $width = $image->getWidth();
-        return $width ? $width : FALSE;
-
-      case 'height':
-        $height = $image->getHeight();
-        return $height ? $height : FALSE;
-
-      case 'size':
-        $size = $file->getSize();
-        return $size ? $size : FALSE;
-    }
-
-    if (!empty($this->configuration['gather_exif']) && function_exists('exif_read_data')) {
-      switch ($name) {
-        case 'model':
-          return $this->getExifField($uri, 'Model');
-
-        case 'created':
-          $date = new DrupalDateTime($this->getExifField($uri, 'DateTimeOriginal'));
-          return $date->getTimestamp();
-
-        case 'iso':
-          return $this->getExifField($uri, 'ISOSpeedRatings');
-
-        case 'exposure':
-          return $this->getExifField($uri, 'ExposureTime');
-
-        case 'aperture':
-          return $this->getExifField($uri, 'FNumber');
-
-        case 'focal_length':
-          return $this->getExifField($uri, 'FocalLength');
-      }
-    }
-
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $form_state->getFormObject()->getEntity();
-    $options = [];
-    $allowed_field_types = ['file', 'image'];
-    foreach ($this->entityFieldManager->getFieldDefinitions('media', $bundle->id()) as $field_name => $field) {
-      if (in_array($field->getType(), $allowed_field_types) && !$field->getFieldStorageDefinition()->isBaseField()) {
-        $options[$field_name] = $field->getLabel();
-      }
-    }
-
-    $form['source_field'] = [
-      '#type' => 'select',
-      '#title' => $this->t('Field with source information'),
-      '#description' => $this->t('Field on media entity that stores Image file. You can create a bundle without selecting a value for this dropdown initially. This dropdown can be populated after adding fields to the bundle.'),
-      '#default_value' => empty($this->configuration['source_field']) ? NULL : $this->configuration['source_field'],
-      '#options' => $options,
-    ];
-
-    $form['gather_exif'] = [
-      '#type' => 'select',
-      '#title' => $this->t('Whether to gather exif data.'),
-      '#description' => $this->t('Gather exif data using exif_read_data().'),
-      '#default_value' => empty($this->configuration['gather_exif']) || !function_exists('exif_read_data') ? 0 : $this->configuration['gather_exif'],
-      '#options' => [
-        0 => $this->t('No'),
-        1 => $this->t('Yes'),
-      ],
-      '#ajax' => [
-        'callback' => '::ajaxTypeProviderData',
-      ],
-      '#disabled' => (function_exists('exif_read_data')) ? FALSE : TRUE,
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultThumbnail() {
-    return $this->config->get('icon_base') . '/image.png';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function thumbnail(MediaInterface $media) {
-    $source_field = $this->configuration['source_field'];
-
-    /** @var \Drupal\file\FileInterface $file */
-    if ($file = $media->{$source_field}->entity) {
-      return $file->getFileUri();
-    }
-
-    return $this->getDefaultThumbnail();
-  }
-
-  /**
-   * Get exif field value.
-   *
-   * @param string $uri
-   *   The uri for the file that we are getting the Exif.
-   * @param string $field
-   *   The name of the exif field.
-   *
-   * @return string|bool
-   *   The value for the requested field or FALSE if is not set.
-   */
-  protected function getExifField($uri, $field) {
-    if (empty($this->exif)) {
-      $this->exif = $this->getExif($uri);
-    }
-    return !empty($this->exif[$field]) ? $this->exif[$field] : FALSE;
-  }
-
-  /**
-   * Read EXIF.
-   *
-   * @param string $uri
-   *   The uri for the file that we are getting the Exif.
-   *
-   * @return array|bool
-   *   An associative array where the array indexes are the header names and
-   *   the array values are the values associated with those headers or FALSE
-   *   if the data can't be read.
-   */
-  protected function getExif($uri) {
-    return exif_read_data($uri, 'EXIF');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultName(MediaInterface $media) {
-    // The default name will be the filename of the source_field, if present,
-    // or the parent's defaultName implementation if it was not possible to
-    // retrieve the filename.
-    $source_field = $this->configuration['source_field'];
-
-    /** @var \Drupal\file\FileInterface $file */
-    if (!empty($source_field) && ($file = $media->{$source_field}->entity)) {
-      return $file->getFilename();
-    }
-
-    return parent::getDefaultName($media);
-  }
-
-}
diff --git a/web/modules/contrib/media_entity_image/src/Tests/MediaEntityImageTest.php b/web/modules/contrib/media_entity_image/src/Tests/MediaEntityImageTest.php
deleted file mode 100644 (file)
index ef45fe1..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace Drupal\media_entity_image\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests for media entity image.
- *
- * @group media_entity_image
- */
-class MediaEntityImageTest extends WebTestBase {
-
-  /**
-   * Modules to install.
-   *
-   * @var array
-   */
-  public static $modules = [
-    'block',
-    'media_entity',
-    'entity_browser',
-    'media_entity_image_test',
-  ];
-
-  /**
-   * Tests media entity image.
-   */
-  public function testMediaEntityImage() {
-    $account = $this->drupalCreateUser([
-      'access test_entity_browser_for_images entity browser pages',
-    ]);
-    $this->drupalLogin($account);
-    $image = current($this->drupalGetTestFiles('image'));
-    // Go to the entity browser iframe link.
-    $this->drupalGet('/entity-browser/iframe/test_entity_browser_for_images');
-    $edit = [
-      'files[upload][]' => $this->container->get('file_system')->realpath($image->uri),
-    ];
-    $this->drupalPostForm(NULL, $edit, t('Select'));
-    $this->assertText('Labels:');
-    $this->assertNoText('The media bundle is not configured correctly.');
-  }
-
-}
diff --git a/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/entity_browser.browser.test_entity_browser_for_images.yml b/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/entity_browser.browser.test_entity_browser_for_images.yml
deleted file mode 100644 (file)
index d82fd5d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  module:
-    - media_entity_image
-name: test_entity_browser_for_images
-label: 'Test entity browser for images'
-display: iframe
-display_configuration:
-  width: '650'
-  height: '500'
-  link_text: 'Select entities'
-  auto_open: false
-selection_display: no_display
-selection_display_configuration: {  }
-widget_selector: tabs
-widget_selector_configuration: {  }
-widgets:
-  3d078004-0b1f-4663-9a5f-2af662e4c892:
-    settings:
-      submit_text: 'Select'
-      extensions: 'jpg jpeg png gif'
-      media_bundle: media_bundle_for_images
-      upload_location: 'public://'
-    uuid: 3d078004-0b1f-4663-9a5f-2af662e4c892
-    weight: 1
-    label: 'Media entity image upload'
-    id: media_entity_image_upload
diff --git a/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/field.field.media.media_bundle_for_images.field_image.yml b/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/field.field.media.media_bundle_for_images.field_image.yml
deleted file mode 100644 (file)
index 5abf3b0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  config:
-    - field.storage.media.field_image
-    - media_entity.bundle.media_bundle_for_images
-  module:
-    - image
-id: media.media_bundle_for_images.field_image
-field_name: field_image
-entity_type: media
-bundle: media_bundle_for_images
-label: image
-description: ''
-required: false
-translatable: false
-default_value: {  }
-default_value_callback: ''
-settings:
-  file_directory: '[date:custom:Y]-[date:custom:m]'
-  file_extensions: 'png gif jpg jpeg'
-  max_filesize: ''
-  max_resolution: ''
-  min_resolution: ''
-  alt_field: true
-  alt_field_required: true
-  title_field: false
-  title_field_required: false
-  default_image:
-    uuid: ''
-    alt: ''
-    title: ''
-    width: null
-    height: null
-  handler: 'default:file'
-  handler_settings: {  }
-field_type: image
diff --git a/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/field.storage.media.field_image.yml b/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/field.storage.media.field_image.yml
deleted file mode 100644 (file)
index 14aa06f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  module:
-    - file
-    - image
-    - media_entity
-id: media.field_image
-field_name: field_image
-entity_type: media
-type: image
-settings:
-  uri_scheme: public
-  default_image:
-    uuid: ''
-    alt: ''
-    title: ''
-    width: null
-    height: null
-  target_type: file
-  display_field: false
-  display_default: false
-module: image
-locked: false
-cardinality: 1
-translatable: true
-indexes: {  }
-persist_with_no_fields: false
-custom_storage: false
diff --git a/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/media_entity.bundle.media_bundle_for_images.yml b/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/config/install/media_entity.bundle.media_bundle_for_images.yml
deleted file mode 100644 (file)
index f6dabcf..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  module:
-    - media_entity_image
-id: media_bundle_for_images
-label: 'Media bundle for images'
-description: ''
-type: image
-queue_thumbnail_downloads: false
-new_revision: false
-type_configuration:
-  source_field: field_image
-  gather_exif: false
-field_map: {  }
diff --git a/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/media_entity_image_test.info.yml b/web/modules/contrib/media_entity_image/tests/modules/media_entity_image_test/media_entity_image_test.info.yml
deleted file mode 100644 (file)
index f9b8b53..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-name: 'Media entity image test'
-type: module
-description: 'Provides test bundle for media entity image.'
-# core: 8.x
-package: Testing
-
-dependencies:
-  - entity_browser
-  - media_entity_image
-
-# Information added by Drupal.org packaging script on 2018-05-01
-version: '8.x-1.3'
-core: '8.x'
-project: 'media_entity_image'
-datestamp: 1525218784
diff --git a/web/modules/contrib/security_review/API.txt b/web/modules/contrib/security_review/API.txt
deleted file mode 100644 (file)
index 627e264..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-For the latest documentation and code examples go to:
-https://www.drupal.org/node/2508415
-
-# Security Review API
-
-  * Defining a security check
-    * Identifiers
-    * Action and messages
-    * Help page
-    * Evaluation page (optional)
-    * Check-specific settings (optional)
-      * Form generation
-      * Configuration schema
-  * Hooks
-  * Alterable variables
-  * Drush usage
-
-## Defining a security check
-
-  This part of the documentation lets the developer understand the behavior of
-  the module. If anything's unclear it is recommended to look at the examples.
-
-  To define a security check for Security Review, one has to create a class that
-  extends Drupal\security_review\Check.
-  The functions that must be overridden are the following:
-    * getNamespace()
-    * getTitle()
-    * run()
-    * help()
-    * getMessage()
-
-  ### Identifiers
-
-    There are 5 kinds of identifiers for a given check:
-      * namespace
-      * machine namespace
-      * title
-      * machine title
-      * id
-
-    The 'namespace' must be manually set for each check by overriding the
-    getNamespace() method. This is the human-readable namespace of the check
-    (usually the module's name).
-
-    The 'machine namespace' is the version of namespace that is used internally.
-    If getMachineNamespace() isn't overridden, then it is produced from the
-    human-readable namespace by removing any non-alphanumeric characters and
-    replacing spaces with underscores. When overriding getMachineNamespace()
-    this rule must be followed.
-
-    The 'title' must be manually set for each check by overriding the getTitle()
-    method. This is the human-readable title of the check.
-
-    The 'machine title' has the same relationship to 'title' as 'machine
-    namespace' has to 'namespace'. The machine title should be unique to the
-    namespace. This might only be achievable by overriding getMachineTitle().
-
-    The 'id' is only used internally and cannot be overridden. It's constructed
-    by taking the 'machine namespace' and 'machine title' and putting a hyphen
-    between them.
-
-  ### Action and messages
-
-    The part where the actual security check happens is the run() method. This
-    method must be overridden, and should always return an instance of
-    Drupal\security_review\CheckResult.
-
-    Instantiating a CheckResult:
-
-    CheckResult defines one constructor:
-    (Check $check, $result, array $findings, $visible = TRUE, $time = NULL)
-      * $check
-        The Check that is responsible for the result
-      * $result
-        An integer that defines the outcome of the check:
-          * CheckResult::SUCCESS  - for a successful check
-          * CheckResult::FAIL     - for a failed check
-          * CheckResult::WARN     - for a check that only raised a warning
-          * CheckResult::INFO     - general result for providing information
-      * $findings
-        An array of findings that can be evaluated. It can be empty.
-      * $visible
-        Check results can be hidden from the user by setting $visible to FALSE.
-      * $time
-        Timestamp indicating the time when the result was produced. If left null
-        it will be the current time.
-
-    NOTE:
-    It's easier to instantiate a result with Check's createResult() method. It
-    has the same parameters as the constructor for CheckResult, except the
-    $check is left out (set to $this).
-
-    Human-readable messages for each result integer:
-
-    Must be defined by overriding the getMessage() method. The implementation is
-    usually a switch-case. For more details take a look at Security Review's own
-    Check implementations.
-
-  ### Help page
-
-    Every Check can have its own help page by overriding the help() method. This
-    should return a render array.
-    See https://www.drupal.org/developing/api/8/render/arrays
-
-  ### Evaluation page (optional)
-
-    The evaluation page is for providing an evaluation of a CheckResult produced
-    by the Check. Overriding this is optional, the default implementation
-    returns an empty array. If one chooses to override evaluate(), the function
-    must return a render array.
-    See https://www.drupal.org/developing/api/8/render/arrays
-
-  ### Check-specific settings (optional)
-
-    If the Check requires storage for settings, it can be accessed via
-    $this->settings(). This method returns a
-    Drupal\security_review\CheckSettingsInterface. It has get() and set()
-    methods for accessing the stored configuration, and buildForm(),
-    submitForm(), validateForm() for form building. By default Check's
-    implementation contains a Drupal\security_review\CheckSettings, which stores
-    the values in the Configuration system, and does nothing in its form
-    building methods. Usually it's enough to extend this class if the Check
-    needs separate settings on the Security Review settings page.
-
-    When using check-specific settings it's recommended to define a
-    configuration schema to store the values in their correct types. The schema
-    to declare is called security_review.check_settings.[id of check] .
-
-## Hooks
-
-  ### hook_security_review_checks()
-
-    To let Security Review know of the checks defined in the module it has to
-    implement hook_security_review_checks(). This hook is fairly simple. It has
-    to return an array of check instances.
-
-    For example implementations see security_review.api.php and
-    security_review.module and the examples.
-
-  ### hook_security_review_log()
-
-    Provides logging functions for various events:
-    Check skipped / enabled
-    Check ran
-    Check gave a NULL result
-
-    For example implementations see security_review.api.php and
-    security_review.module.
-
-## Alterable variables
-
-  To understand what alterable variables are, take a look at
-  https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Extension!ModuleHandler.php/function/ModuleHandler%3A%3Aalter/8
-  To modify an alterable variable you have to implement hook_[TYPE]_alter.
-  An example:
-
-  <?php
-  // ...
-  /**
-   * Implements hook_security_review_unsafe_extensions_alter().
-   */
-  function my_module_security_review_unsafe_extensions_alter(array &$variable) {
-    // Add the .reg file extension to the list of unsafe extensions.
-    $variable[] = 'reg';
-  }
-  ?>
-
-  ### security_review_unsafe_tags
-
-    The list of HTML tags considered to be unsafe.
-    See https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet .
-
-    Default variable content is at Security::unsafeTags().
-
-  ### security_review_unsafe_extensions
-
-    The list of file extensions considered to be unsafe for upload. Untrusted
-    users should not be allowed to upload files of these extensions.
-
-    Default variable content is at Security::unsafeExtensions().
-
-  ### security_review_file_ignore
-
-    The list of relative and absolute paths to ignore when running the File
-    permissions check.
-
-    Default variable content is at FilePermissions::run().
-
-  ### security_review_temporary_files
-
-    The list of files to check for the Temporary files security check.
-
-    Default variable definition is at TemporaryFiles::run().
-
-## Drush usage
-
-  Run the checklist via Drush with the "drush security-review" command.
-  Consult the Drush help on the security-review command for more information.
diff --git a/web/modules/contrib/security_review/IGNOREME.txt b/web/modules/contrib/security_review/IGNOREME.txt
deleted file mode 100644 (file)
index 72e8e13..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-You should read the README.txt but can ignore this file. It is used as part of
-the test to see if files are writable on your site. If you see timestamps below
-this line those are security runs which were able to write to this file.
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-20160608114206 - Your web server should not be able to write to your modules directory. This is a security vulnerable. Consult the Security Review file permissions check help for mitigation steps.
diff --git a/web/modules/contrib/security_review/PATCHES.txt b/web/modules/contrib/security_review/PATCHES.txt
deleted file mode 100644 (file)
index 3294fe1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches)
-Patches applied to this directory:
-
-Fix missing field review list
-Source: https://www.drupal.org/files/issues/security_review-dangerous-tags-list-2744805-2.patch
-
-
diff --git a/web/modules/contrib/security_review/README.txt b/web/modules/contrib/security_review/README.txt
deleted file mode 100644 (file)
index 03e7304..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-
--- ABOUT --
-
-Security Review automates checking many of the configuration errors that lead
-to an insecure Drupal site and looks for existing vulnerabilities and attack
-attempts.
-
-The primary goal of the module is to elevate your awareness of the importance of
-securing your Drupal site. The results of some checks may be incorrect depending
-on unique factors, this module does not make your site more secure. You should
-use the results of the checklist and its resources to manually secure your site.
-
-Refer to the support section below if you are interested in securing your Drupal
-site.
-
--- INSTALLATION --
-
-Place the security_review directory and its contents under /modules or a
-subdirectory of /modules in the Drupal root directory.
-
-Enable the module at Administer >> Modules and refer to the
-following sections for configuration and usage.
-
--- CONFIGURATION --
-
-Two permissions are provided and required to use the module. Navigate to
-Administer >> People >> Permissions to enable
-'access security review list' and 'run security checks' for trusted roles.
-
-NOTICE: This module provides information on the state of your site's security so
-it is imperative you grant these permissions to trusted roles and users only.
-For instance, if you have an admin role, be sure that all the users who have
-been granted this role are indeed users you trust if you grant them these
-permissions.
-
-After you have granted permissions to the module you should inform the system
-what roles are not trusted. Navigate to
-Administer >> Reports >> Security Review >> Settings to mark which roles are
-untrusted. Most checks only care if the resource is usable by
-untrusted roles.
-
-On this page you can also define the level of logging. The result
-of the last checklist is always stored but you can enable watchdog logging of
-each check if you like.
-
--- USAGE --
-
-Navigate to Administer >> Reports >> Security Review to run the checklist.
-
-If a check is enabled it will be run. You can enable or skip a check on this
-page only after it has been run. Clicking on the 'Help' link beside each check
-will provide details on why the check exists and what was found on the last run.
-
--- DRUSH USAGE --
-
-Running the Security Review checklist using Drush is a great way to build
-automated security audits of your site into your site development lifecycle and
-as part of continuous integration.
-
-With the module installed invoke 'drush secrev' from within your Drupal root.
-
-Call 'drush help secrev' to see available options.
-
-For running specific checks pass the '--check' option. Be sure to remove any
-whitespace characters separating check names.
-
-Consult implementations of hook_security_checks() for exact list of available
-check options. Standard Security Review checks are:
-
-file_perms, input_formats, field, error_reporting, private_files, query_errors,
-failed_logins, upload_extensions, admin_permissions, executable_php,
-trusted_hosts, temporary_files
-
-For custom checks you may prefix the check name with the module name and
-colon (:) character. For example:
-
-'drush secrev --check=my_module:my_check'
-
-Note, custom checks require that its module be enabled. Also, should you be
-skipping any check the 'store' option will not allow that check to be run.
-
--- SUPPORT --
-
-Please use the issue queue at http://drupal.org/project/security_review for all
-module support. You can read more about securely configuring your site at
-http://drupal.org/security/secure-configuration and http://drupalscout.com
-
--- CREDIT --
-
-Security Review module originally written by Benjamin Jeavons, drupal.org user
-coltrane. Ported to Drupal 8 by Viktor Bán.
diff --git a/web/modules/contrib/security_review/config/install/security_review.check.security_review-base_url_set.yml b/web/modules/contrib/security_review/config/install/security_review.check.security_review-base_url_set.yml
deleted file mode 100644 (file)
index 070f10a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-id: 'security_review-base_url_set'
-settings:
-  method: 'token'
diff --git a/web/modules/contrib/security_review/config/install/security_review.settings.yml b/web/modules/contrib/security_review/config/install/security_review.settings.yml
deleted file mode 100644 (file)
index fe575a5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-configured: false
-untrusted_roles: []
-log: true
diff --git a/web/modules/contrib/security_review/config/schema/security_review.schema.yml b/web/modules/contrib/security_review/config/schema/security_review.schema.yml
deleted file mode 100644 (file)
index 3d30179..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# The module's main settings.
-security_review.settings:
-  type: config_entity
-  mapping:
-    configured:
-      type: boolean
-      label: 'Has been configured'
-    untrusted_roles:
-      type: sequence
-      label: 'Untrusted roles'
-      sequence:
-        type: string
-        label: 'Role ID'
-    log:
-      type: boolean
-      label: 'Logging enabled'
-
-# Defines a security check's skip informations and settings.
-security_review.check.*:
-  type: config_entity
-  mapping:
-    id:
-      type: string
-      label: 'Check ID'
-    skipped:
-      type: boolean
-      label: 'Is skipped'
-    skipped_by:
-      type: integer
-      label: 'Skipped by'
-    skipped_on:
-      type: integer
-      label: 'Skipped on'
-    settings:
-      # Checks that need storage for settings are advised to define their settings schema.
-      # This way type-strict per-check settings storage can be created.
-      type: security_review.check_settings.[%parent.id]
-
-# Setting storage for Base URL check.
-security_review.check_settings.security_review-base_url_set:
-  type: mapping
-  mapping:
-    method:
-      type: string
-      label: 'Base URL identification method'
diff --git a/web/modules/contrib/security_review/css/security_review.run_and_review.css b/web/modules/contrib/security_review/css/security_review.run_and_review.css
deleted file mode 100644 (file)
index 56ed396..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-.security-review-run-and-review__table {
-  border: none;
-}
-
-.security-review-run-and-review__entry {
-  border-width: 1px 0 0 0;
-  border-style: solid;
-  border-color: #ccc;
-}
-
-.security-review-run-and-review__entry-icon {
-  width: 16px;
-}
-
-.security-review-run-and-review__entry:last-child {
-  border-bottom-width: 1px;
-}
-
-.security-review-run-and-review__entry.skipped {
-  color: #333333 !important;
-  background-color: #dddddd !important;
-}
-
-.security-review-run-and-review__entry.success {
-  color: #255b1e;
-  background-color: #e5ffe2;
-}
-
-.security-review-run-and-review__entry.fail {
-  color: #8c2e0b;
-  background-color: #fef5f1;
-}
-
-.security-review-run-and-review__entry.warning {
-  color: #734c00;
-  background-color: #fdf8ed;
-}
-
-.security-review-run-and-review__entry.info {
-  color: #000e6f;
-  background-color: #dfefff;
-}
diff --git a/web/modules/contrib/security_review/js/security_review.run_and_review.js b/web/modules/contrib/security_review/js/security_review.run_and_review.js
deleted file mode 100644 (file)
index f249e41..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * @file
- * Implementation of check toggling using AJAX.
- */
-
-(function ($) {
-  Drupal.behaviors.securityReview = {
-    attach: function (context) {
-      $(context).find('.security-review-toggle-link a').click(function () {
-        var link = $(this);
-        var url = link.attr('href');
-        var td = link.parent();
-        var tr = td.parent();
-        $.getJSON(url + '&js=1', function (data) {
-          if (data.skipped) {
-            tr.addClass('skipped');
-          }
-          else {
-            tr.removeClass('skipped');
-          }
-          link.text(data.toggle_text);
-          link.attr(data.toggle_href);
-        });
-        return false;
-      });
-    }
-  };
-})(jQuery);
diff --git a/web/modules/contrib/security_review/security_review.api.php b/web/modules/contrib/security_review/security_review.api.php
deleted file mode 100644 (file)
index 157689d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines the API for Security Review.
- */
-
-/*
-use Drupal\mymodule\MyCheck;
-use Drupal\mymodule\MyOtherCheck;
- */
-use Drupal\security_review\Check;
-
-/**
- * Returns the array of security checks the module defines.
- *
- * The checks must extend \Drupal\security_review\Check.
- *
- * @return array
- *   An array of security checks.
- */
-function hook_security_review_checks() {
-  // Return instances of the defined Checks.
-  return [
-    /*
-    new MyCheck(),
-    new MyOtherCheck(),
-    */
-  ];
-}
-
-/**
- * Provides logging capabilities.
- *
- * @param \Drupal\security_review\Check $check
- *   The Check the event is related to.
- * @param string $message
- *   The message.
- * @param array $context
- *   The context of the message.
- * @param int $level
- *   Severity (RfcLogLevel).
- */
-function hook_security_review_log(Check $check, $message, array $context, $level) {
-  if ($check->getNamespace() == "My Module") {
-    // Do something with the information.
-  }
-}
diff --git a/web/modules/contrib/security_review/security_review.drush.inc b/web/modules/contrib/security_review/security_review.drush.inc
deleted file mode 100644 (file)
index 6931887..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-
-/**
- * @file
- * Drush commands for Security Review module.
- */
-
-use Drupal\security_review\CheckResult;
-
-/**
- * Implements hook_drush_command().
- */
-function security_review_drush_command() {
-  $items = [];
-
-  $items['security-review'] = [
-    'aliases' => ['secrev'],
-    'callback' => 'security_review_drush',
-    'description' => "Run the Security Review checklist",
-    'options' => [
-      'store' => 'Write results to the database',
-      'log' => 'Log results of each check to watchdog, defaults to off',
-      'lastrun' => 'Do not run the checklist, just print last results',
-      'check' => 'Comma-separated list of specified checks to run. See README.txt for list of options',
-      'skip' => 'Comma-separated list of specified checks not to run. This takes precedence over --check.',
-      'short' => "Short result messages instead of full description (e.g. 'Text formats')",
-      'results' => 'Show the incorrect settings for failed checks',
-    ],
-    'examples' => [
-      'secrev' => 'Run the checklist and output the results',
-      'secrev --store' => 'Run the checklist, store, and output the results',
-      'secrev --lastrun' => 'Output the stored results from the last run of the checklist',
-    ],
-    'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
-    'outputformat' => [
-      'default' => 'table',
-      'pipe-format' => 'csv',
-      'fields-default' => ['message', 'status'],
-      'field-labels' => [
-        'message' => 'Message',
-        'status' => 'Status',
-        'findings' => 'Findings',
-      ],
-      'output-data-type' => 'format-table',
-    ],
-  ];
-
-  return $items;
-}
-
-/**
- * Implements hook_drush_help().
- */
-function security_review_drush_help($section) {
-  switch ($section) {
-    case 'drush:security-review':
-      return dt("Run configuration security checks on your Drupal site.");
-  }
-}
-
-/**
- * Runs a checklist and displays results.
- */
-function security_review_drush() {
-  /** @var \Drupal\security_review\SecurityReview $security_review */
-  $security_review = Drupal::service('security_review');
-
-  /** @var \Drupal\security_review\Checklist $checklist */
-  $checklist = Drupal::service('security_review.checklist');
-
-  $store = drush_get_option('store');
-  $log = drush_get_option('log');
-  $last_run = drush_get_option('lastrun');
-  $run_checks = drush_get_option_list('check');
-  $skip_checks = drush_get_option_list('skip');
-  $short_titles = drush_get_option('short');
-  $show_findings = drush_get_option('results');
-
-  // Set temporary logging.
-  $log = in_array($log, [TRUE, 1, 'TRUE']);
-  $security_review->setLogging($log, TRUE);
-
-  if (!empty($short_titles)) {
-    $short_titles = TRUE;
-  }
-  else {
-    $short_titles = FALSE;
-  }
-
-  $results = [];
-  if (!$last_run) {
-    // Do a normal security review run.
-    /** @var \Drupal\security_review\Check[] $checks */
-    $checks = [];
-    /** @var \Drupal\security_review\Check[] $to_skip */
-    $to_skip = [];
-
-    // Fill the $checks array.
-    if (!empty($run_checks)) {
-      // Get explicitly specified checks.
-      foreach ($run_checks as $check) {
-        $checks[] = _security_review_drush_get_check($check);
-      }
-    }
-    else {
-      // Get the whole checklist.
-      $checks = $checklist->getChecks();
-    }
-
-    // Mark checks listed after --skip for removal.
-    if (!empty($skip_checks)) {
-      foreach ($skip_checks as $skip_check) {
-        $to_skip[] = _security_review_drush_get_check($skip_check);
-      }
-    }
-
-    // If storing, mark skipped checks for removal.
-    if ($store) {
-      foreach ($checks as $check) {
-        if ($check->isSkipped()) {
-          $to_skip[] = $check;
-        }
-      }
-    }
-
-    // Remove the skipped checks from $checks.
-    foreach ($to_skip as $skip_check) {
-      foreach ($checks as $key => $check) {
-        if ($check->id() == $skip_check->id()) {
-          unset($checks[$key]);
-        }
-      }
-    }
-
-    // If $checks is empty at this point, return with an error.
-    if (empty($checks)) {
-      return drush_set_error('EMPTY_CHECKLIST', dt("No checks to run. Run 'drush help secrev' for option use or consult the drush section of API.txt for further help."));
-    }
-
-    // Run the checks.
-    $results = $checklist->runChecks($checks, TRUE);
-
-    // Store the results.
-    if ($store) {
-      $checklist->storeResults($results);
-    }
-  }
-  else {
-    // Show the latest stored results.
-    foreach ($checklist->getChecks() as $check) {
-      $last_result = $check->lastResult($show_findings);
-      if ($last_result instanceof CheckResult) {
-        $results[] = $last_result;
-      }
-    }
-  }
-
-  return _security_review_drush_format_results($results, $short_titles, $show_findings);
-}
-
-/**
- * Helper function for parsing input check name strings.
- *
- * @param string $check_name
- *   The check to get.
- *
- * @return \Drupal\security_review\Check|null
- *   The found Check.
- */
-function _security_review_drush_get_check($check_name) {
-  /** @var \Drupal\security_review\Checklist $checklist */
-  $checklist = Drupal::service('security_review.checklist');
-
-  // Default namespace is Security Review.
-  $namespace = 'security_review';
-  $title = $check_name;
-
-  // Set namespace and title if explicitly defined.
-  if (strpos($check_name, ':') !== FALSE) {
-    list($namespace, $title) = explode(':', $check_name);
-  }
-
-  // Return the found check if any.
-  return $checklist->getCheck($namespace, $title);
-}
-
-/**
- * Helper function to compile Security Review results.
- *
- * @param \Drupal\security_review\CheckResult[] $results
- *   An array of CheckResults.
- * @param bool $short_titles
- *   Whether to use short message (check title) or full check success or failure
- *   message.
- * @param bool $show_findings
- *   Whether to print failed check results.
- *
- * @return array
- *   The results of the security review checks.
- */
-function _security_review_drush_format_results(array $results, $short_titles = FALSE, $show_findings = FALSE) {
-  $output = [];
-
-  foreach ($results as $result) {
-    if ($result instanceof CheckResult) {
-      if (!$result->isVisible()) {
-        // Continue with the next check.
-        continue;
-      }
-
-      $check = $result->check();
-      $message = $short_titles ? $check->getTitle() : $result->resultMessage();
-      $status = 'notice';
-
-      // Set log level according to check result.
-      switch ($result->result()) {
-        case CheckResult::SUCCESS:
-          $status = 'success';
-          break;
-
-        case CheckResult::FAIL:
-          $status = 'failed';
-          break;
-
-        case CheckResult::WARN:
-          $status = 'warning';
-          break;
-
-        case CheckResult::INFO:
-          $status = 'info';
-          break;
-      }
-
-      // Attach findings.
-      if ($show_findings) {
-        $findings = trim($result->check()->evaluatePlain($result));
-        if ($findings != '') {
-          $message .= "\n" . $findings;
-        }
-      }
-
-      $output[$check->id()] = [
-        'message' => (string) $message,
-        'status' => $status,
-        'findings' => $result->findings(),
-      ];
-    }
-  }
-
-  return $output;
-}
diff --git a/web/modules/contrib/security_review/security_review.info.yml b/web/modules/contrib/security_review/security_review.info.yml
deleted file mode 100644 (file)
index 5c810f8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-name: Security Review
-type: module
-description: 'Site security and configuration review module.'
-package: Security
-core: 8.x
-configure: security_review.settings
diff --git a/web/modules/contrib/security_review/security_review.install b/web/modules/contrib/security_review/security_review.install
deleted file mode 100644 (file)
index 9991149..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the security_review module.
- */
-
-use Drupal\Core\Url;
-use Drupal\security_review\CheckResult;
-
-/**
- * Implements hook_install().
- */
-function security_review_install() {
-  // Remind the user to set the permissions.
-  drupal_set_message(
-    t(
-      'Security Review module enabled. You should first set the module access permissions at <a href=":url">admin/people/permissions</a>. Be sure to grant permissions to trusted users only as this module can show sensitive site information.',
-      [':url' => Url::fromRoute('user.admin_permissions')->toString()]
-    )
-  );
-}
-
-/**
- * Implements hook_requirements().
- */
-function security_review_requirements($phase) {
-  $requirements = [];
-
-  // Provides a Status Report entry.
-  if ($phase == 'runtime') {
-    /** @var \Drupal\security_review\Checklist $checklist */
-    $checklist = Drupal::service('security_review.checklist');
-
-    $failed_checks = FALSE;
-    $no_results = TRUE;
-
-    // Looks for failed checks.
-    foreach ($checklist->getEnabledChecks() as $check) {
-      $result = $check->lastResult();
-      if ($result instanceof CheckResult) {
-        $no_results = FALSE;
-        if ($result->result() === CheckResult::FAIL) {
-          $failed_checks = TRUE;
-          break;
-        }
-      }
-    }
-
-    $module_url = Url::fromRoute('security_review')->toString();
-    if ($no_results) {
-      $severity = REQUIREMENT_WARNING;
-      $value = t(
-        'The Security Review checklist has not been run. <a href=":url">Run the checklist</a>',
-        [':url' => $module_url]
-      );
-    }
-    elseif ($failed_checks) {
-      $severity = REQUIREMENT_WARNING;
-      $value = t(
-        'There are failed Security Review checks. <a href=":url">Review the checklist</a>',
-        [':url' => $module_url]
-      );
-    }
-    else {
-      $severity = REQUIREMENT_OK;
-      $value = t(
-        'Passing all non-ignored Security Review checks. <a href=":url">Review the checklist</a>',
-        [':url' => $module_url]
-      );
-    }
-    $requirements['security_review'] = [
-      'title' => t('Security Review'),
-      'severity' => $severity,
-      'value' => $value,
-    ];
-  }
-
-  return $requirements;
-}
diff --git a/web/modules/contrib/security_review/security_review.libraries.yml b/web/modules/contrib/security_review/security_review.libraries.yml
deleted file mode 100644 (file)
index 0eccdf9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-run_and_review:
-  version: VERSION
-  css:
-    theme:
-      css/security_review.run_and_review.css: {}
-  js:
-    js/security_review.run_and_review.js: {}
-  dependencies:
-    - core/jquery
-    - core/drupal
diff --git a/web/modules/contrib/security_review/security_review.links.menu.yml b/web/modules/contrib/security_review/security_review.links.menu.yml
deleted file mode 100644 (file)
index 89ec97a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-security_review:
-  route_name: security_review
-  title: 'Security review'
-  description: 'Perform a review of the security of your site.'
-  parent: system.admin_reports
-
-security_review.settings:
-  route_name: security_review.settings
-  title: 'Security Review'
-  description: 'Choose which roles are untrusted, set logging, skip or enable security checks and modify check-specific settings.'
-  parent: system.admin_config_system
diff --git a/web/modules/contrib/security_review/security_review.links.task.yml b/web/modules/contrib/security_review/security_review.links.task.yml
deleted file mode 100644 (file)
index 64278e8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-security_review:
-  route_name: security_review
-  title: 'Run & review'
-  base_route: security_review
-
-security_review.help:
-  route_name: security_review.help
-  title: 'Help'
-  weight: 10
-  base_route: security_review
-
-security_review.settings:
-  route_name: security_review.settings
-  title: 'Settings'
-  weight: 15
-  base_route: security_review
diff --git a/web/modules/contrib/security_review/security_review.module b/web/modules/contrib/security_review/security_review.module
deleted file mode 100644 (file)
index 508f625..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-
-/**
- * @file
- * Site security review and reporting Drupal module.
- */
-
-use Drupal\Core\Logger\RfcLogLevel;
-use Drupal\Core\Url;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use Drupal\security_review\Checks\AdminPermissions;
-use Drupal\security_review\Checks\ErrorReporting;
-use Drupal\security_review\Checks\ExecutablePhp;
-use Drupal\security_review\Checks\FailedLogins;
-use Drupal\security_review\Checks\Field;
-use Drupal\security_review\Checks\FilePermissions;
-use Drupal\security_review\Checks\InputFormats;
-use Drupal\security_review\Checks\PrivateFiles;
-use Drupal\security_review\Checks\QueryErrors;
-use Drupal\security_review\Checks\TemporaryFiles;
-use Drupal\security_review\Checks\TrustedHosts;
-use Drupal\security_review\Checks\UploadExtensions;
-use Drupal\security_review\Checks\ViewsAccess;
-
-/**
- * Implements hook_security_review_checks().
- */
-function security_review_security_review_checks() {
-  return [
-    new AdminPermissions(),
-    new ErrorReporting(),
-    new ExecutablePhp(),
-    new FailedLogins(),
-    new Field(),
-    new FilePermissions(),
-    new InputFormats(),
-    new PrivateFiles(),
-    new QueryErrors(),
-    new TemporaryFiles(),
-    new TrustedHosts(),
-    new UploadExtensions(),
-    new ViewsAccess(),
-  ];
-}
-
-/**
- * Implements hook_security_review_log().
- */
-function security_review_security_review_log(Check $check, $message, array $context, $level) {
-  Drupal::logger('security_review')->log($level, $message, $context);
-}
-
-/**
- * Implements hook_modules_uninstalled().
- */
-function security_review_modules_uninstalled($modules) {
-  /** @var \Drupal\security_review\SecurityReview $security_review */
-  $security_review = Drupal::service('security_review');
-
-  // Clean orphaned checks.
-  $security_review->cleanStorage();
-}
-
-/**
- * Implements hook_modules_installed().
- */
-function security_review_modules_installed($modules) {
-  // Post-install hook.
-  if (in_array('security_review', $modules)) {
-
-    /** @var \Drupal\security_review\SecurityReview $security_review */
-    $security_review = Drupal::service('security_review');
-
-    // Clean orphaned checks.
-    $security_review->cleanStorage();
-
-    // Store the web server's user.
-    $security_review->setServerData();
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function security_review_theme($existing, $type, $theme, $path) {
-  return [
-    'check_evaluation' => [
-      'template' => 'check_evaluation',
-      'variables' => [
-        'paragraphs' => [],
-        'items' => [],
-      ],
-    ],
-    'check_help' => [
-      'template' => 'check_help',
-      'variables' => [
-        'title' => [],
-        'paragraphs' => [],
-      ],
-    ],
-    'general_help' => [
-      'template' => 'general_help',
-      'variables' => [
-        'paragraphs' => [],
-        'checks' => [],
-      ],
-    ],
-    'run_and_review' => [
-      'template' => 'run_and_review',
-      'variables' => [
-        'date' => [],
-        'checks' => [],
-      ],
-    ],
-  ];
-}
-
-/**
- * Preprocesses variables for template 'run_and_review'.
- */
-function template_preprocess_run_and_review(&$variables) {
-  // Get icon list.
-  $icons_root = '/core/misc/icons/';
-  $variables['icons'] = [
-    'success' => $icons_root . '73b355/check.svg',
-    'warning' => $icons_root . 'e29700/warning.svg',
-    'fail' => $icons_root . 'e32700/error.svg',
-  ];
-
-  // Generate full URLs.
-  foreach ($variables['icons'] as $icon => $path) {
-    $variables['icons'][$icon] = Url::fromUserInput($path)->setAbsolute()
-      ->toString();
-  }
-
-  // Format date.
-  $variables['date'] = \Drupal::service('date.formatter')->format($variables['date']);
-
-  // Convert check result integers to strings.
-  foreach ($variables['checks'] as &$check) {
-    if (isset($check['result'])) {
-      switch ($check['result']) {
-        case CheckResult::SUCCESS:
-          $check['result'] = 'success';
-          break;
-
-        case CheckResult::FAIL:
-          $check['result'] = 'fail';
-          break;
-
-        case CheckResult::WARN:
-          $check['result'] = 'warning';
-          break;
-
-        case CheckResult::INFO:
-          $check['result'] = 'info';
-          break;
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_cron().
- */
-function security_review_cron() {
-  // Store the web server's user.
-  Drupal::service('security_review')->setServerData();
-}
-
-/**
- * Batch operation: runs a single check.
- *
- * @param \Drupal\security_review\Check $check
- *   The check to run.
- * @param array $context
- *   The Batch context.
- */
-function _security_review_batch_run_op(Check $check, array &$context) {
-  // Inform the user about the progress.
-  $context['message'] = $check->getTitle();
-
-  // Run the check.
-  $results = Drupal::service('security_review.checklist')
-    ->runChecks([$check]);
-
-  // Store the results.
-  $context['results'] = array_merge($context['results'], $results);
-}
-
-/**
- * Callback for finishing the batch job of running the checklist.
- *
- * @param bool $success
- *   Whether the batch job was successful.
- * @param \Drupal\security_review\CheckResult[] $results
- *   The results of the batch job.
- * @param array $operations
- *   The array of batch operations.
- */
-function _security_review_batch_run_finished($success, array $results, array $operations) {
-  /** @var \Drupal\security_review\SecurityReview $security_review */
-  $security_review = Drupal::service('security_review');
-
-  /** @var \Drupal\security_review\Checklist $checklist */
-  $checklist = Drupal::service('security_review.checklist');
-
-  $security_review->setLastRun(time());
-  if ($success) {
-    if (!empty($results)) {
-      $checklist->storeResults($results);
-    }
-    drupal_set_message(t('Review complete'));
-  }
-  else {
-    // Show error information.
-    $error_operation = reset($operations);
-    $message = t(
-      'An error occurred while processing %error_operation with arguments: @arguments',
-      [
-        '%error_operation' => $error_operation[0],
-        '@arguments' => print_r($error_operation[1], TRUE),
-      ]
-    );
-    $security_review->log(NULL, $message, [], RfcLogLevel::ERROR);
-    drupal_set_message(t('The review did not store all results, please run again or check the logs for details.'));
-  }
-}
diff --git a/web/modules/contrib/security_review/security_review.permissions.yml b/web/modules/contrib/security_review/security_review.permissions.yml
deleted file mode 100644 (file)
index 9b1ea80..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-access security review list:
-  title: 'Access security review pages'
-  description: 'View security review checks and output. Give only to trusted users.'
-
-run security checks:
-  title: 'Run security review checks'
-  description: 'Run the security review checks.'
diff --git a/web/modules/contrib/security_review/security_review.routing.yml b/web/modules/contrib/security_review/security_review.routing.yml
deleted file mode 100644 (file)
index e7433e0..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-security_review:
-  path: 'admin/reports/security-review'
-  defaults:
-    _controller: '\Drupal\security_review\Controller\ChecklistController::index'
-  requirements:
-    _permission: 'access security review list'
-
-security_review.help:
-  path: 'admin/reports/security-review/help/{namespace}/{title}'
-  defaults:
-    _controller: '\Drupal\security_review\Controller\HelpController::index'
-    namespace: ~
-    title: ~
-  requirements:
-    _permission: 'access security review list'
-
-security_review.settings:
-  path: 'admin/config/security-review'
-  defaults:
-    _form: '\Drupal\security_review\Form\SettingsForm'
-  requirements:
-    _permission: 'access security review list'
-
-security_review.toggle:
-  path: 'admin/reports/security-review/toggle/{check_id}'
-  defaults:
-    _controller: '\Drupal\security_review\Controller\ToggleController::index'
-  requirements:
-    _permission: 'access security review list'
diff --git a/web/modules/contrib/security_review/security_review.services.yml b/web/modules/contrib/security_review/security_review.services.yml
deleted file mode 100644 (file)
index 43827d7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-services:
-  security_review:
-    class: Drupal\security_review\SecurityReview
-    arguments: ['@config.factory', '@state', '@module_handler', '@current_user']
-
-  security_review.checklist:
-    class: Drupal\security_review\Checklist
-    arguments: ['@security_review', '@module_handler', '@current_user']
-
-  security_review.security:
-    class: Drupal\security_review\Security
-    arguments: ['@security_review', '@module_handler', '@config.factory', '@kernel']
diff --git a/web/modules/contrib/security_review/src/Check.php b/web/modules/contrib/security_review/src/Check.php
deleted file mode 100644 (file)
index df18deb..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-use Drupal\Core\DependencyInjection\DependencySerializationTrait;
-use Drupal\Core\Logger\RfcLogLevel;
-use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\user\Entity\User;
-
-/**
- * Defines a security check.
- */
-abstract class Check {
-
-  use DependencySerializationTrait;
-  use StringTranslationTrait;
-
-  /**
-   * The configuration storage for this check.
-   *
-   * @var \Drupal\Core\Config\Config $config
-   */
-  protected $config;
-
-  /**
-   * The service container.
-   *
-   * @var \Symfony\Component\DependencyInjection\ContainerInterface
-   */
-  protected $container;
-
-  /**
-   * Settings handler for this check.
-   *
-   * @var \Drupal\security_review\CheckSettingsInterface $settings
-   */
-  protected $settings;
-
-  /**
-   * The State system.
-   *
-   * @var \Drupal\Core\State\State
-   */
-  protected $state;
-
-  /**
-   * The check's prefix in the State system.
-   *
-   * @var string
-   */
-  protected $statePrefix;
-
-  /**
-   * Initializes the configuration storage and the settings handler.
-   */
-  public function __construct() {
-    $this->container = \Drupal::getContainer();
-
-    $this->config = $this->configFactory()
-      ->getEditable('security_review.check.' . $this->id());
-    $this->settings = new CheckSettings($this, $this->config);
-    $this->state = $this->container->get('state');
-    $this->statePrefix = 'security_review.check.' . $this->id() . '.';
-
-    // Set check ID in config.
-    if ($this->config->get('id') != $this->id()) {
-      $this->config->set('id', $this->id());
-      $this->config->save();
-    }
-  }
-
-  /**
-   * Returns the namespace of the check.
-   *
-   * Usually it's the same as the module's name.
-   *
-   * Naming rules (if overridden):
-   *   - All characters should be lowerspace.
-   *   - Use characters only from the english alphabet.
-   *   - Don't use spaces (use "_" instead).
-   *
-   * @return string
-   *   Machine namespace of the check.
-   */
-  public function getMachineNamespace() {
-    $namespace = strtolower($this->getNamespace());
-    $namespace = preg_replace("/[^a-z0-9 ]/", '', $namespace);
-    $namespace = str_replace(' ', '_', $namespace);
-
-    return $namespace;
-  }
-
-  /**
-   * Returns the namespace of the check.
-   *
-   * Usually it's the same as the module's name.
-   *
-   * @return string
-   *   Human-readable namespace of the check.
-   */
-  public abstract function getNamespace();
-
-  /**
-   * Returns the machine name of the check.
-   *
-   * Naming rules (if overridden):
-   *   - All characters should be lowerspace.
-   *   - Use characters only from the english alphabet.
-   *   - Don't use spaces (use "_" instead).
-   *
-   * @return string
-   *   ID of check.
-   */
-  public function getMachineTitle() {
-    $title = strtolower($this->getTitle());
-    $title = preg_replace("/[^a-z0-9 ]/", '', $title);
-    $title = str_replace(' ', '_', $title);
-
-    return $title;
-  }
-
-  /**
-   * Returns the human-readable title of the check.
-   *
-   * @return string
-   *   Title of check.
-   */
-  public abstract function getTitle();
-
-  /**
-   * Returns the identifier constructed using the namespace and title values.
-   *
-   * @return string
-   *   Unique identifier of the check.
-   */
-  public final function id() {
-    return $this->getMachineNamespace() . '-' . $this->getMachineTitle();
-  }
-
-  /**
-   * Returns whether the findings should be stored or reproduced when needed.
-   *
-   * The only case when this function should return false is if the check can
-   * generate a lot of findings (like the File permissions check for example).
-   * Turning this off for checks that don't generate findings at all or just a
-   * few of them actually means more overhead as the check has to be re-run
-   * in order to get its last result.
-   *
-   * @return bool
-   *   Boolean indicating whether findings will be stored.
-   */
-  public function storesFindings() {
-    return TRUE;
-  }
-
-  /**
-   * Returns the check-specific settings' handler.
-   *
-   * @return \Drupal\security_review\CheckSettingsInterface
-   *   The settings interface of the check.
-   */
-  public function settings() {
-    return $this->settings;
-  }
-
-  /**
-   * The actual procedure of carrying out the check.
-   *
-   * @return \Drupal\security_review\CheckResult
-   *   The result of running the check.
-   */
-  public abstract function run();
-
-  /**
-   * Same as run(), but used in CLI context such as Drush.
-   *
-   * @return \Drupal\security_review\CheckResult
-   *   The result of running the check.
-   */
-  public function runCli() {
-    return $this->run();
-  }
-
-  /**
-   * Returns the check-specific help page.
-   *
-   * @return array
-   *   The render array of the check's help page.
-   */
-  public abstract function help();
-
-  /**
-   * Returns the evaluation page of a result.
-   *
-   * Usually this is a list of the findings and an explanation.
-   *
-   * @param \Drupal\security_review\CheckResult $result
-   *   The check result to evaluate.
-   *
-   * @return array
-   *   The render array of the evaluation page.
-   */
-  public function evaluate(CheckResult $result) {
-    return [];
-  }
-
-  /**
-   * Evaluates a CheckResult and returns a plaintext output.
-   *
-   * @param \Drupal\security_review\CheckResult $result
-   *   The check result to evaluate.
-   *
-   * @return string
-   *   The evaluation string.
-   */
-  public function evaluatePlain(CheckResult $result) {
-    return '';
-  }
-
-  /**
-   * Converts a result integer to a human-readable result message.
-   *
-   * @param int $result_const
-   *   The result integer.
-   *
-   * @return string
-   *   The human-readable result message.
-   */
-  public abstract function getMessage($result_const);
-
-  /**
-   * Returns the last stored result of the check.
-   *
-   * Returns null if no results have been stored yet.
-   *
-   * @param bool $get_findings
-   *   Whether to get the findings too.
-   *
-   * @return \Drupal\security_review\CheckResult|null
-   *   The last stored result (or null).
-   */
-  public function lastResult($get_findings = FALSE) {
-    // Get stored data from State system.
-    $state_prefix = $this->statePrefix . 'last_result.';
-    $result = $this->state->get($state_prefix . 'result');
-    if ($get_findings) {
-      $findings = $this->state->get($state_prefix . 'findings');
-    }
-    else {
-      $findings = [];
-    }
-    $time = $this->state->get($state_prefix . 'time');
-    // Force boolean value.
-    $visible = $this->state->get($state_prefix . 'visible') == TRUE;
-
-    // Check validity of stored data.
-    $valid_result = is_int($result)
-      && $result >= CheckResult::SUCCESS
-      && $result <= CheckResult::INFO;
-    $valid_findings = is_array($findings);
-    $valid_time = is_int($time) && $time > 0;
-
-    // If invalid, return NULL.
-    if (!$valid_result || !$valid_findings || !$valid_time) {
-      return NULL;
-    }
-
-    // Construct the CheckResult.
-    $last_result = new CheckResult($this, $result, $findings, $visible, $time);
-
-    // Do a check run for acquiring findings if required.
-    if ($get_findings && !$this->storesFindings()) {
-      // Run the check to get the findings.
-      $fresh_result = $this->run();
-
-      // If it malfunctioned return the last known good result.
-      if (!($fresh_result instanceof CheckResult)) {
-        return $last_result;
-      }
-
-      if ($fresh_result->result() != $last_result->result()) {
-        // If the result is not the same store the new result and return it.
-        $this->storeResult($fresh_result);
-        $this->securityReview()->logCheckResult($fresh_result);
-        return $fresh_result;
-      }
-      else {
-        // Else return the old result with the fresh one's findings.
-        return CheckResult::combine($last_result, $fresh_result);
-      }
-    }
-
-    return $last_result;
-  }
-
-  /**
-   * Returns the timestamp the check was last run.
-   *
-   * Returns 0 if it has not been run yet.
-   *
-   * @return int
-   *   The timestamp of the last stored result.
-   */
-  public function lastRun() {
-    $last_result_time = $this->state
-      ->get($this->statePrefix . 'last_result.time');
-
-    if (!is_int($last_result_time)) {
-      return 0;
-    }
-    return $last_result_time;
-  }
-
-  /**
-   * Returns whether the check is skipped. Checks are not skipped by default.
-   *
-   * @return bool
-   *   Boolean indicating whether the check is skipped.
-   */
-  public function isSkipped() {
-    $is_skipped = $this->config->get('skipped');
-
-    if (!is_bool($is_skipped)) {
-      return FALSE;
-    }
-    return $is_skipped;
-  }
-
-  /**
-   * Returns the user the check was skipped by.
-   *
-   * Returns null if it hasn't been skipped yet or the user that skipped the
-   * check is not valid anymore.
-   *
-   * @return \Drupal\user\Entity\User|null
-   *   The user the check was last skipped by (or null).
-   */
-  public function skippedBy() {
-    $skipped_by = $this->config->get('skipped_by');
-
-    if (!is_int($skipped_by)) {
-      return NULL;
-    }
-    return User::load($skipped_by);
-  }
-
-  /**
-   * Returns the timestamp the check was last skipped on.
-   *
-   * Returns 0 if it hasn't been skipped yet.
-   *
-   * @return int
-   *   The UNIX timestamp the check was last skipped on (or 0).
-   */
-  public function skippedOn() {
-    $skipped_on = $this->config->get('skipped_on');
-
-    if (!is_int($skipped_on)) {
-      return 0;
-    }
-    return $skipped_on;
-  }
-
-  /**
-   * Enables the check. Has no effect if the check was not skipped.
-   */
-  public function enable() {
-    if ($this->isSkipped()) {
-      $this->config->set('skipped', FALSE);
-      $this->config->save();
-
-      // Log.
-      $context = ['@name' => $this->getTitle()];
-      $this->securityReview()->log($this, '@name check no longer skipped', $context, RfcLogLevel::NOTICE);
-    }
-  }
-
-  /**
-   * Marks the check as skipped.
-   *
-   * It still can be ran manually, but will remain skipped on the Run & Review
-   * page.
-   */
-  public function skip() {
-    if (!$this->isSkipped()) {
-      // Store skip data.
-      $this->config->set('skipped', TRUE);
-      $this->config->set('skipped_by', $this->currentUser()->id());
-      $this->config->set('skipped_on', time());
-      $this->config->save();
-
-      // Log.
-      $context = ['@name' => $this->getTitle()];
-      $this->securityReview()->log($this, '@name check skipped', $context, RfcLogLevel::NOTICE);
-    }
-  }
-
-  /**
-   * Stores a result in the state system.
-   *
-   * @param \Drupal\security_review\CheckResult $result
-   *   The result to store.
-   */
-  public function storeResult(CheckResult $result) {
-    if ($result == NULL) {
-      $context = [
-        '@reviewcheck' => $this->getTitle(),
-        '@namespace' => $this->getNamespace(),
-      ];
-      $this->securityReview()->log($this, 'Unable to store check @reviewcheck for @namespace', $context, RfcLogLevel::CRITICAL);
-      return;
-    }
-
-    $findings = $this->storesFindings() ? $result->findings() : [];
-    $this->state->setMultiple([
-      $this->statePrefix . 'last_result.result' => $result->result(),
-      $this->statePrefix . 'last_result.time' => $result->time(),
-      $this->statePrefix . 'last_result.visible' => $result->isVisible(),
-      $this->statePrefix . 'last_result.findings' => $findings,
-    ]);
-  }
-
-  /**
-   * Creates a new CheckResult for this Check.
-   *
-   * @param int $result
-   *   The result integer (see the constants defined in CheckResult).
-   * @param array $findings
-   *   The findings.
-   * @param bool $visible
-   *   The visibility of the result.
-   * @param int $time
-   *   The time the test was run.
-   *
-   * @return \Drupal\security_review\CheckResult
-   *   The created CheckResult.
-   */
-  public function createResult($result, array $findings = [], $visible = TRUE, $time = NULL) {
-    return new CheckResult($this, $result, $findings, $visible, $time);
-  }
-
-  /**
-   * Returns the Security Review Checklist service.
-   *
-   * @return \Drupal\security_review\Checklist
-   *   Security Review's Checklist service.
-   */
-  protected function checklist() {
-    return $this->container->get('security_review.checklist');
-  }
-
-  /**
-   * Returns the Config factory.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   Config factory.
-   */
-  protected function configFactory() {
-    return $this->container->get('config.factory');
-  }
-
-  /**
-   * Returns the service container.
-   *
-   * @return \Symfony\Component\DependencyInjection\ContainerInterface
-   *   Service container.
-   */
-  protected function container() {
-    return $this->container;
-  }
-
-  /**
-   * Returns the current Drupal user.
-   *
-   * @return \Drupal\Core\Session\AccountProxy
-   *   Current Drupal user.
-   */
-  protected function currentUser() {
-    return $this->container->get('current_user');
-  }
-
-  /**
-   * Returns the database connection.
-   *
-   * @return \Drupal\Core\Database\Connection
-   *   Database connection.
-   */
-  protected function database() {
-    return $this->container->get('database');
-  }
-
-  /**
-   * Returns the entity manager.
-   *
-   * @return \Drupal\Core\Entity\EntityManagerInterface
-   *   Entity manager.
-   */
-  protected function entityManager() {
-    return $this->container->get('entity.manager');
-  }
-
-  /**
-   * Returns the Drupal Kernel.
-   *
-   * @return \Drupal\Core\DrupalKernel
-   *   Drupal Kernel.
-   */
-  protected function kernel() {
-    return $this->container->get('kernel');
-  }
-
-  /**
-   * Returns the module handler.
-   *
-   * @return \Drupal\Core\Extension\ModuleHandler
-   *   Module handler.
-   */
-  protected function moduleHandler() {
-    return $this->container->get('module_handler');
-  }
-
-  /**
-   * Returns the Security Review Security service.
-   *
-   * @return \Drupal\security_review\Security
-   *   Security Review's Security service.
-   */
-  protected function security() {
-    return $this->container->get('security_review.security');
-  }
-
-  /**
-   * Returns the Security Review service.
-   *
-   * @return \Drupal\security_review\SecurityReview
-   *   Security Review service.
-   */
-  protected function securityReview() {
-    return $this->container->get('security_review');
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/CheckResult.php b/web/modules/contrib/security_review/src/CheckResult.php
deleted file mode 100644 (file)
index 8307a8b..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-/**
- * Used to define the result of a Check.
- */
-class CheckResult {
-
-  const SUCCESS = 0;
-  const FAIL = 1;
-  const WARN = 2;
-  const INFO = 3;
-
-  /**
-   * Stores the parent Check.
-   *
-   * @var \Drupal\security_review\Check $check
-   */
-  private $check;
-
-  /**
-   * Stores the outcome of the check.
-   *
-   * @var int $result
-   */
-  private $result;
-
-  /**
-   * Stores findings.
-   *
-   * @var array $findings
-   */
-  private $findings;
-
-  /**
-   * Stores the timestamp of the check run.
-   *
-   * @var int $time
-   */
-  private $time;
-
-  /**
-   * Whether the result should be shown on the UI.
-   *
-   * @var bool $visible
-   */
-  private $visible;
-
-  /**
-   * Constructs an immutable CheckResult.
-   *
-   * @param \Drupal\security_review\Check $check
-   *   The Check that created this result.
-   * @param int $result
-   *   The result integer (see the constants defined above).
-   * @param array $findings
-   *   The findings.
-   * @param int $time
-   *   The timestamp of the check run.
-   * @param bool $visible
-   *   The visibility of the result.
-   */
-  public function __construct(Check $check, $result, array $findings, $visible = TRUE, $time = NULL) {
-    // Set the parent check.
-    $this->check = $check;
-
-    // Set the result value.
-    $result = intval($result);
-    if ($result < self::SUCCESS || $result > self::INFO) {
-      $result = self::INFO;
-    }
-    $this->result = $result;
-
-    // Set the findings.
-    $this->findings = $findings;
-
-    // Set the visibility.
-    $this->visible = $visible;
-
-    // Set the timestamp.
-    if (!is_int($time)) {
-      $this->time = time();
-    }
-    else {
-      $this->time = intval($time);
-    }
-  }
-
-  /**
-   * Combines two CheckResults.
-   *
-   * Combines two CheckResults and returns a new one with the old one's fields
-   * except for the findings which are copied from the fresh result.
-   *
-   * @param \Drupal\security_review\CheckResult $old
-   *   The old result to clone.
-   * @param \Drupal\security_review\CheckResult $fresh
-   *   The new result to copy the findings from.
-   *
-   * @return \Drupal\security_review\CheckResult
-   *   The combined result.
-   */
-  public static function combine(CheckResult $old, CheckResult $fresh) {
-    return new CheckResult($old->check, $old->result, $fresh->findings, $old->visible, $old->time);
-  }
-
-  /**
-   * Returns the parent Check.
-   *
-   * @return \Drupal\security_review\Check
-   *   The Check that created this result.
-   */
-  public function check() {
-    return $this->check;
-  }
-
-  /**
-   * Returns the outcome of the check.
-   *
-   * @return int
-   *   The result integer.
-   */
-  public function result() {
-    return $this->result;
-  }
-
-  /**
-   * Returns the findings.
-   *
-   * @return array
-   *   The findings. Contents of this depends on the actual check.
-   */
-  public function findings() {
-    return $this->findings;
-  }
-
-  /**
-   * Returns the timestamp.
-   *
-   * @return int
-   *   The timestamp the result was created on.
-   */
-  public function time() {
-    return $this->time;
-  }
-
-  /**
-   * Returns the visibility of the result.
-   *
-   * @return bool
-   *   Whether the result should be shown on the UI.
-   */
-  public function isVisible() {
-    return $this->visible;
-  }
-
-  /**
-   * Returns the result message.
-   *
-   * @return string
-   *   The result message for this result.
-   */
-  public function resultMessage() {
-    return $this->check->getMessage($this->result);
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/CheckSettings.php b/web/modules/contrib/security_review/src/CheckSettings.php
deleted file mode 100644 (file)
index 5e9fce9..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-use Drupal\Core\Config\Config;
-
-/**
- * Defines the default implementation of CheckSettingsInterface.
- */
-class CheckSettings implements CheckSettingsInterface {
-
-  /**
-   * The parent check.
-   *
-   * @var \Drupal\security_review\Check
-   */
-  protected $check;
-
-  /**
-   * The configuration storage of the parent Check.
-   *
-   * @var \Drupal\Core\Config\Config $config
-   */
-  protected $config;
-
-  /**
-   * Creates a CheckSettings instance.
-   *
-   * @param \Drupal\security_review\Check $check
-   *   The parent Check.
-   * @param \Drupal\Core\Config\Config $config
-   *   The parent Check's configuration.
-   */
-  public function __construct(Check $check, Config &$config) {
-    $this->check = $check;
-    $this->config = $config;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function get($key, $default_value = NULL) {
-    $value = $this->config->get('settings.' . $key);
-
-    if ($value == NULL) {
-      return $default_value;
-    }
-    return $value;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function set($key, $value) {
-    $this->config->set('settings.' . $key, $value);
-    $this->config->save();
-    return $this;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validateForm(array &$form, array $values) {
-    // Validation is optional.
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, array $values) {
-    // Handle submission.
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/CheckSettings/TrustedHostSettings.php b/web/modules/contrib/security_review/src/CheckSettings/TrustedHostSettings.php
deleted file mode 100644 (file)
index feb95bb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-namespace Drupal\security_review\CheckSettings;
-
-use Drupal\security_review\CheckSettings;
-
-/**
- * Provides the settings form for the TrustedHosts check.
- */
-class TrustedHostSettings extends CheckSettings {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm() {
-    $form = [];
-    $form['method'] = [
-      '#type' => 'radios',
-      '#title' => t('Check method'),
-      '#description' => t('Detecting the $base_url in settings.php can be done via PHP tokenization (recommended) or including the file. Note that if you have custom functionality in your settings.php it will be executed if the file is included. Including the file can result in a more accurate $base_url check if you wrap the setting in conditional statements.'),
-      '#options' => [
-        'token' => t('Tokenize settings.php (recommended)'),
-        'include' => t('Include settings.php'),
-      ],
-      '#default_value' => $this->get('method', 'token'),
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, array $values) {
-    $this->set('method', $values['method']);
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/CheckSettingsInterface.php b/web/modules/contrib/security_review/src/CheckSettingsInterface.php
deleted file mode 100644 (file)
index 146e12c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-/**
- * Interface for check-specific settings and forms for altering them.
- */
-interface CheckSettingsInterface {
-
-  /**
-   * Gets a check-specific setting value identified by $key.
-   *
-   * @param string $key
-   *   The key.
-   * @param mixed $default_value
-   *   Default value to return in case $key does not exist.
-   *
-   * @return mixed
-   *   The value of the stored setting.
-   */
-  public function get($key, $default_value);
-
-  /**
-   * Sets a check-specific setting value identified by $key.
-   *
-   * @param string $key
-   *   The key.
-   * @param mixed $value
-   *   The new value.
-   *
-   * @return CheckSettingsInterface
-   *   Returns itself.
-   */
-  public function set($key, $value);
-
-  /**
-   * Form constructor.
-   *
-   * @return array
-   *   The form structure.
-   */
-  public function buildForm();
-
-  /**
-   * Form validation handler.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param array $values
-   *   The current values of the form.
-   */
-  public function validateForm(array &$form, array $values);
-
-  /**
-   * Form submission handler.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param array $values
-   *   The current values of the form.
-   */
-  public function submitForm(array &$form, array $values);
-
-}
diff --git a/web/modules/contrib/security_review/src/Checklist.php b/web/modules/contrib/security_review/src/Checklist.php
deleted file mode 100644 (file)
index 0c9aca0..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-use Drupal\Core\Access\AccessException;
-use Drupal\Core\DependencyInjection\DependencySerializationTrait;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Session\AccountProxyInterface;
-
-/**
- * Contains static functions for handling checks throughout every module.
- */
-class Checklist {
-
-  use DependencySerializationTrait;
-
-  /**
-   * The current user.
-   *
-   * @var \Drupal\Core\Session\AccountProxyInterface
-   */
-  protected $currentUser;
-
-  /**
-   * The security_review service.
-   *
-   * @var \Drupal\security_review\SecurityReview
-   */
-  protected $securityReview;
-
-  /**
-   * The module handler.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
-   * Constructs a Checklist instance.
-   *
-   * @param \Drupal\security_review\SecurityReview $security_review
-   *   The SecurityReview service.
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler.
-   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
-   *   The current user.
-   */
-  public function __construct(SecurityReview $security_review, ModuleHandlerInterface $module_handler, AccountProxyInterface $current_user) {
-    $this->securityReview = $security_review;
-    $this->moduleHandler = $module_handler;
-    $this->currentUser = $current_user;
-  }
-
-  /**
-   * Array of cached Checks.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  private static $cachedChecks = [];
-
-  /**
-   * Clears the cached checks.
-   */
-  public static function clearCache() {
-    static::$cachedChecks = [];
-  }
-
-  /**
-   * Returns every Check.
-   *
-   * @return \Drupal\security_review\Check[]
-   *   Array of Checks.
-   */
-  public function getChecks() {
-    $checks = &static::$cachedChecks;
-    if (!empty($checks)) {
-      return $checks;
-    }
-
-    // Get checks.
-    $raw_checks = $this->moduleHandler->invokeAll('security_review_checks');
-
-    // Filter invalid checks.
-    $checks = [];
-    foreach ($raw_checks as $raw_check) {
-      if ($raw_check instanceof Check) {
-        $checks[] = $raw_check;
-      }
-    }
-
-    // Sort the checks.
-    usort($checks, [$this, 'compareChecks']);
-
-    return $checks;
-  }
-
-  /**
-   * Returns the enabled Checks.
-   *
-   * @return \Drupal\security_review\Check[]
-   *   Array of enabled Checks.
-   */
-  public function getEnabledChecks() {
-    $enabled = [];
-
-    foreach (static::getChecks() as $check) {
-      if (!$check->isSkipped()) {
-        $enabled[] = $check;
-      }
-    }
-
-    return $enabled;
-  }
-
-  /**
-   * Groups an array of checks by their namespaces.
-   *
-   * @param \Drupal\security_review\Check[] $checks
-   *   The array of Checks to group.
-   *
-   * @return array
-   *   Array containing Checks grouped by their namespaces.
-   */
-  public function groupChecksByNamespace(array $checks) {
-    $output = [];
-
-    foreach ($checks as $check) {
-      $output[$check->getMachineNamespace()][] = $check;
-    }
-
-    return $output;
-  }
-
-  /**
-   * Runs enabled checks and stores their results.
-   */
-  public function runChecklist() {
-    if ($this->currentUser->hasPermission('run security checks')) {
-      $checks = $this->getEnabledChecks();
-      $results = $this->runChecks($checks);
-      $this->storeResults($results);
-      $this->securityReview->setLastRun(time());
-    }
-    else {
-      throw new AccessException();
-    }
-  }
-
-  /**
-   * Runs an array of checks.
-   *
-   * @param \Drupal\security_review\Check[] $checks
-   *   The array of Checks to run.
-   * @param bool $cli
-   *   Whether to call runCli() instead of run().
-   *
-   * @return \Drupal\security_review\CheckResult[]
-   *   The array of CheckResults generated.
-   */
-  public function runChecks(array $checks, $cli = FALSE) {
-    $results = [];
-
-    foreach ($checks as $check) {
-      if ($cli) {
-        $result = $check->runCli();
-      }
-      else {
-        $result = $check->run();
-      }
-      $this->securityReview->logCheckResult($result);
-      $results[] = $result;
-    }
-
-    return $results;
-  }
-
-  /**
-   * Stores an array of CheckResults.
-   *
-   * @param \Drupal\security_review\CheckResult[] $results
-   *   The CheckResults to store.
-   */
-  public function storeResults(array $results) {
-    foreach ($results as $result) {
-      $result->check()->storeResult($result);
-    }
-  }
-
-  /**
-   * Finds a check by its namespace and title.
-   *
-   * @param string $namespace
-   *   The machine namespace of the requested check.
-   * @param string $title
-   *   The machine title of the requested check.
-   *
-   * @return null|\Drupal\security_review\Check
-   *   The Check or null if it doesn't exist.
-   */
-  public function getCheck($namespace, $title) {
-    foreach (static::getChecks() as $check) {
-      $same_namespace = $check->getMachineNamespace() == $namespace;
-      $same_title = $check->getMachineTitle() == $title;
-      if ($same_namespace && $same_title) {
-        return $check;
-      }
-    }
-
-    return NULL;
-  }
-
-  /**
-   * Finds a Check by its id.
-   *
-   * @param string $id
-   *   The machine namespace of the requested check.
-   *
-   * @return null|\Drupal\security_review\Check
-   *   The Check or null if it doesn't exist.
-   */
-  public function getCheckById($id) {
-    foreach (static::getChecks() as $check) {
-      if ($check->id() == $id) {
-        return $check;
-      }
-    }
-
-    return NULL;
-  }
-
-  /**
-   * Helper function for sorting checks.
-   *
-   * @param \Drupal\security_review\Check $a
-   *   Check A.
-   * @param \Drupal\security_review\Check $b
-   *   Check B.
-   *
-   * @return int
-   *   The comparison's result.
-   */
-  public function compareChecks(Check $a, Check $b) {
-    // If one comes from security_review and the other doesn't, prefer the one
-    // with the security_review namespace.
-    $a_is_local = $a->getMachineNamespace() == 'security_review';
-    $b_is_local = $b->getMachineNamespace() == 'security_review';
-    if ($a_is_local && !$b_is_local) {
-      return -1;
-    }
-    elseif (!$a_is_local && $b_is_local) {
-      return 1;
-    }
-    else {
-      if ($a->getNamespace() == $b->getNamespace()) {
-        // If the namespaces match, sort by title.
-        return strcmp($a->getTitle(), $b->getTitle());
-      }
-      else {
-        // If the namespaces don't mach, sort by namespace.
-        return strcmp($a->getNamespace(), $b->getNamespace());
-      }
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/AdminPermissions.php b/web/modules/contrib/security_review/src/Checks/AdminPermissions.php
deleted file mode 100644 (file)
index 5551f32..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use Drupal\user\Entity\Role;
-
-/**
- * Checks whether untrusted roles have restricted permissions.
- */
-class AdminPermissions extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Drupal permissions';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMachineTitle() {
-    return 'admin_permissions';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    // Get every permission.
-    $all_permissions = $this->security()->permissions(TRUE);
-    $all_permission_strings = array_keys($all_permissions);
-
-    // Get permissions for untrusted roles.
-    $untrusted_permissions = $this->security()->untrustedPermissions(TRUE);
-    foreach ($untrusted_permissions as $rid => $permissions) {
-      $intersect = array_intersect($all_permission_strings, $permissions);
-      foreach ($intersect as $permission) {
-        if (isset($all_permissions[$permission]['restrict access'])) {
-          $findings[$rid][] = $permission;
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t("Drupal's permission system is extensive and allows for varying degrees of control. Certain permissions would allow a user total control, or the ability to escalate their control, over your site and should only be granted to trusted users.");
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Admin and trusted Drupal permissions'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $output = [];
-
-    foreach ($result->findings() as $rid => $permissions) {
-      $role = Role::load($rid);
-      /** @var Role $role */
-      $paragraphs = [];
-      $paragraphs[] = $this->t(
-        "@role has the following restricted permissions:",
-        [
-          '@role' => Link::createFromRoute(
-            $role->label(),
-            'entity.user_role.edit_permissions_form',
-            ['user_role' => $role->id()]
-          )->toString(),
-        ]
-      );
-
-      $output[] = [
-        '#theme' => 'check_evaluation',
-        '#paragraphs' => $paragraphs,
-        '#items' => $permissions,
-      ];
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $output = '';
-
-    foreach ($result->findings() as $rid => $permissions) {
-      $role = Role::load($rid);
-      /** @var Role $role */
-
-      $output .= $this->t(
-        '@role has @permissions',
-        [
-          '@role' => $role->label(),
-          '@permissions' => implode(', ', $permissions),
-        ]
-      );
-      $output .= "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Untrusted roles do not have administrative or trusted Drupal permissions.');
-
-      case CheckResult::FAIL:
-        return $this->t('Untrusted roles have been granted administrative or trusted Drupal permissions.');
-
-      default:
-        return $this->t("Unexpected result.");
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/ErrorReporting.php b/web/modules/contrib/security_review/src/Checks/ErrorReporting.php
deleted file mode 100644 (file)
index 34dd765..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Defines a security check that checks the error reporting setting.
- */
-class ErrorReporting extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Error reporting';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    // Get the error level.
-    $error_level = $this->configFactory()->get('system.logging')
-      ->get('error_level');
-
-    // Determine the result.
-    if (is_null($error_level) || $error_level != 'hide') {
-      $result = CheckResult::FAIL;
-    }
-    else {
-      $result = CheckResult::SUCCESS;
-    }
-
-    return $this->createResult($result, ['level' => $error_level]);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('As a form of hardening your site you should avoid information disclosure. Drupal by default prints errors to the screen and writes them to the log. Error messages disclose the full path to the file where the error occurred.');
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Error reporting'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    if ($result->result() == CheckResult::SUCCESS) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('You have error reporting set to both the screen and the log.');
-    $paragraphs[] = Link::createFromRoute(
-      $this->t('Alter error reporting settings.'),
-      'system.logging_settings'
-    );
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => [],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    if ($result->result() == CheckResult::SUCCESS) {
-      return '';
-    }
-
-    if (isset($result->findings()['level'])) {
-      return $this->t('Error level: @level', [
-        '@level' => $result->findings()['level'],
-      ]);
-    }
-    return '';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Error reporting set to log only.');
-
-      case CheckResult::FAIL:
-        return $this->t('Errors are written to the screen.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/ExecutablePhp.php b/web/modules/contrib/security_review/src/Checks/ExecutablePhp.php
deleted file mode 100644 (file)
index dd93617..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Component\PhpStorage\FileStorage;
-use Drupal\Core\StreamWrapper\PublicStream;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Checks if PHP files written to the files directory can be executed.
- */
-class ExecutablePhp extends Check {
-
-  /**
-   * Drupal's HTTP Client.
-   *
-   * @var \Drupal\Core\Http\Client
-   */
-  protected $httpClient;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct() {
-    parent::__construct();
-    $this->httpClient = $this->container->get('http_client');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Executable PHP';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run($cli = FALSE) {
-    global $base_url;
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    // Set up test file data.
-    $message = 'Security review test ' . date('Ymdhis');
-    $content = "<?php\necho '" . $message . "';";
-    $file_path = PublicStream::basePath() . '/security_review_test.php';
-
-    // Create the test file.
-    if ($test_file = @fopen('./' . $file_path, 'w')) {
-      fwrite($test_file, $content);
-      fclose($test_file);
-    }
-
-    // Try to access the test file.
-    try {
-      $response = $this->httpClient->get($base_url . '/' . $file_path);
-      if ($response->getStatusCode() == 200 && $response->getBody() === $message) {
-        $result = CheckResult::FAIL;
-        $findings[] = 'executable_php';
-      }
-    }
-    catch (RequestException $e) {
-      // Access was denied to the file.
-    }
-
-    // Remove the test file.
-    if (file_exists('./' . $file_path)) {
-      @unlink('./' . $file_path);
-    }
-
-    // Check for presence of the .htaccess file and if the contents are correct.
-    $htaccess_path = PublicStream::basePath() . '/.htaccess';
-    if (!file_exists($htaccess_path)) {
-      $result = CheckResult::FAIL;
-      $findings[] = 'missing_htaccess';
-    }
-    else {
-      // Check whether the contents of .htaccess are correct.
-      $contents = file_get_contents($htaccess_path);
-      $expected = FileStorage::htaccessLines(FALSE);
-
-      // Trim each line separately then put them back together.
-      $contents = implode("\n", array_map('trim', explode("\n", trim($contents))));
-      $expected = implode("\n", array_map('trim', explode("\n", trim($expected))));
-
-      if ($contents !== $expected) {
-        $result = CheckResult::FAIL;
-        $findings[] = 'incorrect_htaccess';
-      }
-
-      // Check whether .htaccess is writable.
-      if (!$cli) {
-        $writable_htaccess = is_writable($htaccess_path);
-      }
-      else {
-        $writable = $this->security()->findWritableFiles([$htaccess_path], TRUE);
-        $writable_htaccess = !empty($writable);
-      }
-
-      if ($writable_htaccess) {
-        $findings[] = 'writable_htaccess';
-        if ($result !== CheckResult::FAIL) {
-          $result = CheckResult::WARN;
-        }
-      }
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function runCli() {
-    return $this->run(TRUE);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The Drupal files directory is for user-uploaded files and by default provides some protection against a malicious user executing arbitrary PHP code against your site.');
-    $paragraphs[] = $this->t('Read more about the <a href="https://drupal.org/node/615888">risk of PHP code execution on Drupal.org</a>.');
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Executable PHP in files directory'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $paragraphs = [];
-    foreach ($result->findings() as $label) {
-      switch ($label) {
-        case 'executable_php':
-          $paragraphs[] = $this->t('Security Review was able to execute a PHP file written to your files directory.');
-          break;
-
-        case 'missing_htaccess':
-          $directory = PublicStream::basePath();
-          $paragraphs[] = $this->t("The .htaccess file is missing from the files directory at @path", ['@path' => $directory]);
-          $paragraphs[] = $this->t("Note, if you are using a webserver other than Apache you should consult your server's documentation on how to limit the execution of PHP scripts in this directory.");
-          break;
-
-        case 'incorrect_htaccess':
-          $paragraphs[] = $this->t("The .htaccess file exists but does not contain the correct content. It is possible it's been maliciously altered.");
-          break;
-
-        case 'writable_htaccess':
-          $paragraphs[] = $this->t("The .htaccess file is writable which poses a risk should a malicious user find a way to execute PHP code they could alter the .htaccess file to allow further PHP code execution.");
-          break;
-      }
-    }
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => [],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $paragraphs = [];
-    $directory = PublicStream::basePath();
-    foreach ($result->findings() as $label) {
-      switch ($label) {
-        case 'executable_php':
-          $paragraphs[] = $this->t('PHP file executed in @path', ['@path' => $directory]);
-          break;
-
-        case 'missing_htaccess':
-          $paragraphs[] = $this->t('.htaccess is missing from @path', ['@path' => $directory]);
-          break;
-
-        case 'incorrect_htaccess':
-          $paragraphs[] = $this->t('.htaccess wrong content');
-          break;
-
-        case 'writable_htaccess':
-          $paragraphs[] = $this->t('.htaccess writable');
-          break;
-      }
-    }
-
-    return implode("\n", $paragraphs);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('PHP files in the Drupal files directory cannot be executed.');
-
-      case CheckResult::FAIL:
-        return $this->t('PHP files in the Drupal files directory can be executed.');
-
-      case CheckResult::WARN:
-        return $this->t('The .htaccess file in the files directory is writable.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/FailedLogins.php b/web/modules/contrib/security_review/src/Checks/FailedLogins.php
deleted file mode 100644 (file)
index 1286dfa..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Logger\RfcLogLevel;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Checks for abundant failed logins.
- */
-class FailedLogins extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Failed logins';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    // If dblog is not enabled return with hidden INFO.
-    if (!$this->moduleHandler()->moduleExists('dblog')) {
-      return $this->createResult(CheckResult::INFO, [], FALSE);
-    }
-
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-    $last_result = $this->lastResult();
-    $visible = FALSE;
-
-    // Prepare the query.
-    $query = $this->database()->select('watchdog', 'w');
-    $query->fields('w', [
-      'severity',
-      'type',
-      'timestamp',
-      'message',
-      'variables',
-      'hostname',
-    ]);
-    $query->condition('type', 'user')
-      ->condition('severity', RfcLogLevel::NOTICE)
-      ->condition('message', 'Login attempt failed from %ip.');
-    if ($last_result instanceof CheckResult) {
-      // Only check entries that got recorded since the last run of the check.
-      $query->condition('timestamp', $last_result->time(), '>=');
-    }
-
-    // Execute the query.
-    $db_result = $query->execute();
-
-    // Count the number of failed logins per IP.
-    $entries = [];
-    foreach ($db_result as $row) {
-      $ip = unserialize($row->variables)['%ip'];
-      $entry_for_ip = &$entries[$ip];
-
-      if (!isset($entry_for_ip)) {
-        $entry_for_ip = 0;
-      }
-      $entry_for_ip++;
-    }
-
-    // Filter the IPs with more than 10 failed logins.
-    if (!empty($entries)) {
-      foreach ($entries as $ip => $count) {
-        if ($count > 10) {
-          $findings[] = $ip;
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-      $visible = TRUE;
-    }
-
-    return $this->createResult($result, $findings, $visible);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('Failed login attempts from the same IP may be an artifact of a malicious user attempting to brute-force their way onto your site as an authenticated user to carry out nefarious deeds.');
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Abundant failed logins from the same IP'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The following IPs were observed with an abundance of failed login attempts.');
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $result->findings(),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return '';
-    }
-
-    $output = $this->t('Suspicious IP addresses:') . ":\n";
-    foreach ($findings as $ip) {
-      $output .= "\t" . $ip . "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::FAIL:
-        return $this->t('Failed login attempts from the same IP. These may be a brute-force attack to gain access to your site.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/Field.php b/web/modules/contrib/security_review/src/Checks/Field.php
deleted file mode 100644 (file)
index fa0e6e7..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Entity\FieldableEntityInterface;
-use Drupal\Core\TypedData\TypedDataInterface;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use Drupal\text\Plugin\Field\FieldType\TextItemBase;
-
-/**
- * Checks for Javascript and PHP in submitted content.
- */
-class Field extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Content';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMachineTitle() {
-    return 'field';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    $tags = [
-      'Javascript' => 'script',
-      'PHP' => '?php',
-    ];
-
-    // Load all of the entities.
-    $entities = [];
-    $bundle_info = $this->entityManager()->getAllBundleInfo();
-    foreach ($bundle_info as $entity_type_id => $bundles) {
-      $current = $this->entityManager()
-        ->getStorage($entity_type_id)
-        ->loadMultiple();
-      $entities = array_merge($entities, $current);
-    }
-
-    // Search for text fields.
-    $text_items = [];
-    foreach ($entities as $entity) {
-      if ($entity instanceof FieldableEntityInterface) {
-        /** @var FieldableEntityInterface $entity */
-        foreach ($entity->getFields() as $field_list) {
-          foreach ($field_list as $field_item) {
-            if ($field_item instanceof TextItemBase) {
-              /** @var TextItemBase $item */
-              // Text field found.
-              $text_items[] = $field_item;
-            }
-          }
-        }
-      }
-    }
-
-    // Scan the text items for vulnerabilities.
-    foreach ($text_items as $item) {
-      $entity = $item->getEntity();
-      foreach ($item->getProperties() as $property) {
-        /** @var TypedDataInterface $property */
-        $value = $property->getValue();
-        if (is_string($value)) {
-          $field_name = $item->getFieldDefinition()->getLabel();
-          foreach ($tags as $vulnerability => $tag) {
-            if (strpos($value, '<' . $tag) !== FALSE) {
-              // Vulnerability found.
-              $findings[$entity->getEntityTypeId()][$entity->id()][$field_name][] = $vulnerability;
-            }
-          }
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('Script and PHP code in content does not align with Drupal best practices and may be a vulnerability if an untrusted user is allowed to edit such content. It is recommended you remove such contents.');
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Dangerous tags in content'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The following items potentially have dangerous tags.');
-
-    $items = [];
-    foreach ($findings as $entity_type_id => $entities) {
-      foreach ($entities as $entity_id => $fields) {
-        $entity = $this->entityManager()
-          ->getStorage($entity_type_id)
-          ->load($entity_id);
-
-        foreach ($fields as $field => $finding) {
-          $url = $entity->toUrl('edit-form');
-          if ($url === NULL) {
-            $url = $entity->toUrl();
-          }
-          $items[] = $this->t(
-            '@vulnerabilities found in <em>@field</em> field of <a href=":url">@label</a>',
-            [
-              '@vulnerabilities' => implode(' and ', $finding),
-              '@field' => $field,
-              '@label' => $entity->label(),
-              ':url' => $url->toString(),
-            ]
-          );
-        }
-      }
-    }
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $items,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return '';
-    }
-
-    $output = '';
-    foreach ($findings as $entity_type_id => $entities) {
-      foreach ($entities as $entity_id => $fields) {
-        $entity = $this->entityManager()
-          ->getStorage($entity_type_id)
-          ->load($entity_id);
-
-        foreach ($fields as $field => $finding) {
-          $url = $entity->toUrl('edit-form');
-          if ($url === NULL) {
-            $url = $entity->toUrl();
-          }
-          $output .= "\t" . $this->t(
-              '@vulnerabilities in @field of :link',
-              [
-                '@vulnerabilities' => implode(' and ', $finding),
-                '@field' => $field,
-                ':link' => $url->toString(),
-              ]
-            ) . "\n";
-        }
-      }
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Dangerous tags were not found in any submitted content (fields).');
-
-      case CheckResult::FAIL:
-        return $this->t('Dangerous tags were found in submitted content (fields).');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/Field.php.rej b/web/modules/contrib/security_review/src/Checks/Field.php.rej
deleted file mode 100644 (file)
index 9467050..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- src/Checks/Field.php
-+++ src/Checks/Field.php
-@@ -138,9 +138,9 @@ class Field extends Check {
-           ->load($entity_id);
-         foreach ($fields as $field => $finding) {
--          $url = $entity->urlInfo('edit-form');
-+          $url = $entity->toUrl('edit-form')->toString();
-           if ($url === NULL) {
--            $url = $entity->urlInfo();
-+            $url = $entity->toUrl()->toString();
-           }
-           $items[] = $this->t(
-             '@vulnerabilities found in <em>@field</em> field of <a href=":url">@label</a>',
diff --git a/web/modules/contrib/security_review/src/Checks/FilePermissions.php b/web/modules/contrib/security_review/src/Checks/FilePermissions.php
deleted file mode 100644 (file)
index 17972b2..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\Core\StreamWrapper\PrivateStream;
-use Drupal\Core\StreamWrapper\PublicStream;
-use Drupal\Core\Url;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Check that files aren't writeable by the server.
- */
-class FilePermissions extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'File permissions';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMachineTitle() {
-    return 'file_perms';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function storesFindings() {
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run($cli = FALSE) {
-    $result = CheckResult::SUCCESS;
-
-    $file_list = $this->getFileList('.');
-    $writable = $this->security()->findWritableFiles($file_list, $cli);
-
-    // Try creating or appending files.
-    // Assume it doesn't work.
-    $create_status = FALSE;
-    $append_status = FALSE;
-
-    if (!$cli) {
-      $append_message = $this->t("Your web server should not be able to write to your modules directory. This is a security vulnerable. Consult the Security Review file permissions check help for mitigation steps.");
-      $directory = $this->moduleHandler()
-        ->getModule('security_review')
-        ->getPath();
-
-      // Write a file with the timestamp.
-      $file = './' . $directory . '/file_write_test.' . date('Ymdhis');
-      if ($file_create = @fopen($file, 'w')) {
-        $create_status = fwrite($file_create, date('Ymdhis') . ' - ' . $append_message . "\n");
-        fclose($file_create);
-      }
-
-      // Try to append to our IGNOREME file.
-      $file = './' . $directory . '/IGNOREME.txt';
-      if ($file_append = @fopen($file, 'a')) {
-        $append_status = fwrite($file_append, date('Ymdhis') . ' - ' . $append_message . "\n");
-        fclose($file_append);
-      }
-    }
-
-    if (!empty($writable) || $create_status || $append_status) {
-      $result = CheckResult::FAIL;
-    }
-
-    return $this->createResult($result, $writable);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function runCli() {
-    if (!$this->securityReview()->isServerPosix()) {
-      return $this->createResult(CheckResult::INFO);
-    }
-
-    return $this->run(TRUE);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('It is dangerous to allow the web server to write to files inside the document root of your server. Doing so could allow Drupal to write files that could then be executed. An attacker might use such a vulnerability to take control of your site. An exception is the Drupal files, private files, and temporary directories which Drupal needs permission to write to in order to provide features like file attachments.');
-    $paragraphs[] = $this->t('In addition to inspecting existing directories, this test attempts to create and write to your file system. Look in your security_review module directory on the server for files named file_write_test.YYYYMMDDHHMMSS and for a file called IGNOREME.txt which gets a timestamp appended to it if it is writeable.');
-    $paragraphs[] = new Link(
-      $this->t('Read more about file system permissions in the handbooks.'),
-      Url::fromUri('http://drupal.org/node/244924')
-    );
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Web server file system permissions'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    if ($result->result() == CheckResult::SUCCESS) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The following files and directories appear to be writeable by your web server. In most cases you can fix this by simply altering the file permissions or ownership. If you have command-line access to your host try running "chmod 644 [file path]" where [file path] is one of the following paths (relative to your webroot). For more information consult the <a href="http://drupal.org/node/244924">Drupal.org handbooks on file permissions</a>.');
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $result->findings(),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    if ($result->result() == CheckResult::SUCCESS) {
-      return '';
-    }
-
-    $output = $this->t('Writable files:') . "\n";
-    foreach ($result->findings() as $file) {
-      $output .= "\t" . $file . "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Drupal installation files and directories (except required) are not writable by the server.');
-
-      case CheckResult::FAIL:
-        return $this->t('Some files and directories in your install are writable by the server.');
-
-      case CheckResult::INFO:
-        return $this->t('The test cannot be run on this system.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-  /**
-   * Scans a directory recursively and returns the files and directories inside.
-   *
-   * @param string $directory
-   *   The directory to scan.
-   * @param string[] $parsed
-   *   Array of already parsed real paths.
-   * @param string[] $ignore
-   *   Array of file names to ignore.
-   *
-   * @return string[]
-   *   The items found.
-   */
-  protected function getFileList($directory, array &$parsed = NULL, array &$ignore = NULL) {
-    // Initialize $parsed and $ignore arrays.
-    if ($parsed === NULL) {
-      $parsed = [realpath($directory)];
-    }
-    if ($ignore === NULL) {
-      $ignore = $this->getIgnoreList();
-    }
-
-    // Start scanning.
-    $items = [];
-    if ($handle = opendir($directory)) {
-      while (($file = readdir($handle)) !== FALSE) {
-        // Don't check hidden files or ones we said to ignore.
-        $path = $directory . "/" . $file;
-        if ($file[0] != "." && !in_array($file, $ignore) && !in_array(realpath($path), $ignore)) {
-          if (is_dir($path) && !in_array(realpath($path), $parsed)) {
-            $parsed[] = realpath($path);
-            $items = array_merge($items, $this->getFileList($path, $parsed, $ignore));
-          }
-          $items[] = preg_replace("/\/\//si", "/", $path);
-        }
-      }
-      closedir($handle);
-    }
-
-    return $items;
-  }
-
-  /**
-   * Returns an array of relative and canonical paths to ignore.
-   *
-   * @return string[]
-   *   List of relative and canonical file paths to ignore.
-   */
-  protected function getIgnoreList() {
-    $file_path = PublicStream::basePath();
-    $ignore = ['..', 'CVS', '.git', '.svn', '.bzr', realpath($file_path)];
-
-    // Add temporary files directory if it's set.
-    $temp_path = file_directory_temp();
-    if (!empty($temp_path)) {
-      $ignore[] = realpath('./' . rtrim($temp_path, '/'));
-    }
-
-    // Add private files directory if it's set.
-    $private_files = PrivateStream::basePath();
-    if (!empty($private_files)) {
-      // Remove leading slash if set.
-      if (strrpos($private_files, '/') !== FALSE) {
-        $private_files = substr($private_files, strrpos($private_files, '/') + 1);
-      }
-      $ignore[] = $private_files;
-    }
-
-    $this->moduleHandler()->alter('security_review_file_ignore', $ignore);
-    return $ignore;
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/InputFormats.php b/web/modules/contrib/security_review/src/Checks/InputFormats.php
deleted file mode 100644 (file)
index 4145540..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\Core\Url;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Checks for vulnerabilities related to input formats.
- *
- * Checks for formats that either do not have HTML filter that can be used by
- * untrusted users, or if they do check if unsafe tags are allowed.
- */
-class InputFormats extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Text formats';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMachineTitle() {
-    return 'input_formats';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    // If filter is not enabled return with INFO.
-    if (!$this->moduleHandler()->moduleExists('filter')) {
-      return $this->createResult(CheckResult::INFO);
-    }
-
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    $formats = filter_formats();
-    $untrusted_roles = $this->security()->untrustedRoles();
-    $unsafe_tags = $this->security()->unsafeTags();
-
-    foreach ($formats as $format) {
-      $format_roles = array_keys(filter_get_roles_by_format($format));
-      $intersect = array_intersect($format_roles, $untrusted_roles);
-
-      if (!empty($intersect)) {
-        // Untrusted users can use this format.
-        // Check format for enabled HTML filter.
-        $filter_html_enabled = FALSE;
-        if ($format->filters()->has('filter_html')) {
-          $filter_html_enabled = $format->filters('filter_html')
-            ->getConfiguration()['status'];
-        }
-        $filter_html_escape_enabled = FALSE;
-        if ($format->filters()->has('filter_html_escape')) {
-          $filter_html_escape_enabled = $format->filters('filter_html_escape')
-            ->getConfiguration()['status'];
-        }
-
-        if ($filter_html_enabled) {
-          $filter = $format->filters('filter_html');
-
-          // Check for unsafe tags in allowed tags.
-          $allowed_tags = array_keys($filter->getHTMLRestrictions()['allowed']);
-          foreach (array_intersect($allowed_tags, $unsafe_tags) as $tag) {
-            // Found an unsafe tag.
-            $findings['tags'][$format->id()] = $tag;
-          }
-        }
-        elseif (!$filter_html_escape_enabled) {
-          // Format is usable by untrusted users but does not contain the HTML
-          // Filter or the HTML escape.
-          $findings['formats'][$format->id()] = $format->label();
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-    }
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t("Certain HTML tags can allow an attacker to take control of your site. Drupal's input format system makes use of a set filters to run on incoming text. The 'HTML Filter' strips out harmful tags and Javascript events and should be used on all formats accessible by untrusted users.");
-    $paragraphs[] = new Link(
-      $this->t("Read more about Drupal's input formats in the handbooks."),
-      Url::fromUri('http://drupal.org/node/224921')
-    );
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Allowed HTML tags in text formats'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $output = [];
-
-    if (!empty($result->findings()['tags'])) {
-      $paragraphs = [];
-      $paragraphs[] = Link::createFromRoute(
-        $this->t('Review your text formats.'),
-        'filter.admin_overview'
-      );
-      $paragraphs[] = $this->t('It is recommended you remove the following tags from roles accessible by untrusted users.');
-      $output[] = [
-        '#theme' => 'check_evaluation',
-        '#paragraphs' => $paragraphs,
-        '#items' => $result->findings()['tags'],
-      ];
-    }
-
-    if (!empty($result->findings()['formats'])) {
-      $paragraphs = [];
-      $paragraphs[] = $this->t('The following formats are usable by untrusted roles and do not filter or escape allowed HTML tags.');
-      $output[] = [
-        '#theme' => 'check_evaluation',
-        '#paragraphs' => $paragraphs,
-        '#items' => $result->findings()['formats'],
-      ];
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $output = '';
-
-    if (!empty($result->findings()['tags'])) {
-      $output .= $this->t('Tags') . "\n";
-      foreach ($result->findings()['tags'] as $tag) {
-        $output .= "\t$tag\n";
-      }
-    }
-
-    if (!empty($result->findings()['formats'])) {
-      $output .= $this->t('Formats') . "\n";
-      foreach ($result->findings()['formats'] as $format) {
-        $output .= "\t$format\n";
-      }
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Untrusted users are not allowed to input dangerous HTML tags.');
-
-      case CheckResult::FAIL:
-        return $this->t('Untrusted users are allowed to input dangerous HTML tags.');
-
-      case CheckResult::INFO:
-        return $this->t('Module filter is not enabled.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/PrivateFiles.php b/web/modules/contrib/security_review/src/Checks/PrivateFiles.php
deleted file mode 100644 (file)
index e40649e..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\Core\StreamWrapper\PrivateStream;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Checks whether the private files' directory is under the web root.
- */
-class PrivateFiles extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Private files';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    $file_directory_path = PrivateStream::basePath();
-    $visible = TRUE;
-    if (empty($file_directory_path)) {
-      // Private files feature is not enabled.
-      $result = CheckResult::SUCCESS;
-      $visible = FALSE;
-    }
-    elseif (strpos(realpath($file_directory_path), DRUPAL_ROOT) === 0) {
-      // Path begins at root.
-      $result = CheckResult::FAIL;
-    }
-    else {
-      // The private files directory is placed correctly.
-      $result = CheckResult::SUCCESS;
-    }
-    return $this->createResult($result, ['path' => $file_directory_path], $visible);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t("If you have Drupal's private files feature enabled you should move the files directory outside of the web server's document root. Drupal will secure access to files that it renders the link to, but if a user knows the actual system path they can circumvent Drupal's private files feature. You can protect against this by specifying a files directory outside of the webserver root.");
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Private files'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    if ($result->result() != CheckResult::FAIL) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('Your files directory is not outside of the server root.');
-    $paragraphs[] = Link::createFromRoute(
-      $this->t('Edit the files directory path.'),
-      'system.file_system_settings'
-    );
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => [],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    if ($result->result() != CheckResult::FAIL) {
-      return '';
-    }
-
-    return $this->t('Private files directory: @path', ['@path' => $result->findings()['path']]);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Private files directory is outside the web server root.');
-
-      case CheckResult::FAIL:
-        return $this->t('Private files is enabled but the specified directory is not secure outside the web server root.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/QueryErrors.php b/web/modules/contrib/security_review/src/Checks/QueryErrors.php
deleted file mode 100644 (file)
index ed61010..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Logger\RfcLogLevel;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Checks for abundant query errors.
- */
-class QueryErrors extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Query errors';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    // If dblog is not enabled return with hidden INFO.
-    if (!$this->moduleHandler()->moduleExists('dblog')) {
-      return $this->createResult(CheckResult::INFO, [], FALSE);
-    }
-
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-    $last_result = $this->lastResult();
-    $visible = FALSE;
-
-    // Prepare the query.
-    $query = $this->database()->select('watchdog', 'w');
-    $query->fields('w', [
-      'severity',
-      'type',
-      'timestamp',
-      'message',
-      'variables',
-      'hostname',
-    ]);
-    $query->condition('type', 'php')->condition('severity', RfcLogLevel::ERROR);
-    if ($last_result instanceof CheckResult) {
-      // Only check entries that got recorded since the last run of the check.
-      $query->condition('timestamp', $last_result->time(), '>=');
-    }
-
-    // Execute the query.
-    $db_result = $query->execute();
-
-    // Count the number of query errors per IP.
-    $entries = [];
-    foreach ($db_result as $row) {
-      // Get the message.
-      if ($row->variables === 'N;') {
-        $message = $row->message;
-      }
-      else {
-        $message = $this->t($row->message, unserialize($row->variables));
-      }
-
-      // Get the IP.
-      $ip = $row->hostname;
-
-      // Search for query errors.
-      $message_contains_sql = strpos($message, 'SQL') !== FALSE;
-      $message_contains_select = strpos($message, 'SELECT') !== FALSE;
-      if ($message_contains_sql && $message_contains_select) {
-        $entry_for_ip = &$entries[$ip];
-
-        if (!isset($entry_for_ip)) {
-          $entry_for_ip = 0;
-        }
-        $entry_for_ip++;
-      }
-    }
-
-    // Filter the IPs with more than 10 query errors.
-    if (!empty($entries)) {
-      foreach ($entries as $ip => $count) {
-        if ($count > 10) {
-          $findings[] = $ip;
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-      $visible = TRUE;
-    }
-
-    return $this->createResult($result, $findings, $visible);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('Database errors triggered from the same IP may be an artifact of a malicious user attempting to probe the system for weaknesses like SQL injection or information disclosure.');
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Abundant query errors from the same IP'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The following IPs were observed with an abundance of query errors.');
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $result->findings(),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return '';
-    }
-
-    $output = $this->t('Suspicious IP addresses:') . ":\n";
-    foreach ($findings as $ip) {
-      $output .= "\t" . $ip . "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::FAIL:
-        return $this->t('Query errors from the same IP. These may be a SQL injection attack or an attempt at information disclosure.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/TemporaryFiles.php b/web/modules/contrib/security_review/src/Checks/TemporaryFiles.php
deleted file mode 100644 (file)
index cbdb065..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * Check for sensitive temporary files like settings.php~.
- */
-class TemporaryFiles extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Temporary files';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    // Get list of files from the site directory.
-    $files = [];
-    $site_path = $this->security()->sitePath() . '/';
-    $dir = scandir($site_path);
-    foreach ($dir as $file) {
-      // Set full path to only files.
-      if (!is_dir($file)) {
-        $files[] = $site_path . $file;
-      }
-    }
-    $this->moduleHandler()->alter('security_review_temporary_files', $files);
-
-    // Analyze the files' names.
-    foreach ($files as $path) {
-      $matches = [];
-      if (file_exists($path) && preg_match('/.*(~|\.sw[op]|\.bak|\.orig|\.save)$/', $path, $matches) !== FALSE && !empty($matches)) {
-        // Found a temporary file.
-        $findings[] = $path;
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t("Some file editors create temporary copies of a file that can be left on the file system. A copy of a sensitive file like Drupal's settings.php may be readable by a malicious user who could use that information to further attack a site.");
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Sensitive temporary files'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t("The following are extraneous files in your Drupal installation that can probably be removed. You should confirm you have saved any of your work in the original files prior to removing these.");
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $findings,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return '';
-    }
-
-    $output = $this->t('Temporary files:') . "\n";
-    foreach ($findings as $file) {
-      $output .= "\t" . $file . "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('No sensitive temporary files were found.');
-
-      case CheckResult::FAIL:
-        return $this->t('Sensitive temporary files were found on your files system.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/TrustedHosts.php b/web/modules/contrib/security_review/src/Checks/TrustedHosts.php
deleted file mode 100644 (file)
index 947f32d..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\Core\Url;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use Drupal\security_review\CheckSettings\TrustedHostSettings;
-
-/**
- * Checks for base_url and trusted_host_patterns settings in settings.php.
- */
-class TrustedHosts extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct() {
-    parent::__construct();
-    $this->settings = new TrustedHostSettings($this, $this->config);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Trusted hosts';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    $result = CheckResult::FAIL;
-    $base_url_set = FALSE;
-    $trusted_host_patterns_set = FALSE;
-    $findings = [];
-    $settings_php = $this->security()->sitePath() . '/settings.php';
-
-    if (!file_exists($settings_php)) {
-      return $this->createResult(CheckResult::INFO, [], FALSE);
-    }
-
-    if ($this->settings()->get('method', 'token') === 'token') {
-      // Use tokenization.
-      $content = file_get_contents($settings_php);
-      $tokens = token_get_all($content);
-
-      $prev_settings_line = -1;
-      foreach ($tokens as $token) {
-        if (is_array($token)) {
-          // Get information about the current token.
-          $line = $token[2];
-          $is_variable = $token[0] === T_VARIABLE;
-          $is_string = $token[0] === T_CONSTANT_ENCAPSED_STRING;
-          $is_settings = $is_variable ? $token[1] == '$settings' : FALSE;
-          $is_base_url = $token[1] == '$base_url';
-          $is_thp = trim($token[1], "\"'") == 'trusted_host_patterns';
-          $is_after_settings = $line == $prev_settings_line;
-
-          // Check for $base_url.
-          if ($is_variable && $is_base_url) {
-            $base_url_set = TRUE;
-            $result = CheckResult::SUCCESS;
-          }
-
-          // Check for $settings['trusted_host_patterns'].
-          if ($is_after_settings && $is_string && $is_thp) {
-            $trusted_host_patterns_set = TRUE;
-            $result = CheckResult::SUCCESS;
-          }
-
-          // If found both settings stop the review.
-          if ($base_url_set && $trusted_host_patterns_set) {
-            // Got everything we need.
-            break;
-          }
-
-          // Store last $settings line.
-          if ($is_settings) {
-            $prev_settings_line = $line;
-          }
-        }
-      }
-    }
-    else {
-      // Use inclusion.
-      include $settings_php;
-      $base_url_set = isset($base_url);
-      $trusted_host_patterns_set = isset($settings['trusted_host_patterns']);
-    }
-
-    if ($result === CheckResult::FAIL) {
-      // Provide information if the check failed.
-      global $base_url;
-      $findings['base_url'] = $base_url;
-      $findings['settings'] = $settings_php;
-      $findings['base_url_set'] = $base_url_set;
-      $findings['trusted_host_patterns_set'] = $trusted_host_patterns_set;
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t('Often Drupal needs to know the URL(s) it is responding from in order to build full links back to itself (e.g. password reset links sent via email). Until you explicitly tell Drupal what full or partial URL(s) it should respond for it must dynamically detect it based on the incoming request, something that can be malicously spoofed in order to trick someone into unknowningly visiting an attacker\'s site (known as a HTTP host header attack).');
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Drupal trusted hosts'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    global $base_url;
-    if ($result->result() !== CheckResult::FAIL) {
-      return [];
-    }
-
-    $settings_php = $this->security()->sitePath() . '/settings.php';
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('This site is responding from the URL: :url.', [':url' => $base_url]);
-    $paragraphs[] = $this->t('If the site should be available only at that URL it is recommended that you set it as the $base_url variable in the settings.php file at @file.', ['@file' => $settings_php]);
-    $paragraphs[] = $this->t('If the site has multiple URLs it can respond from you should whitelist host patterns with trusted_host_patterns in settings.php.');
-    $paragraphs[] = new Link($this->t('Read more about HTTP Host Header attacks and setting trusted_host_patterns.'), Url::fromUri('https://www.drupal.org/node/1992030'));
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => [],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Either $base_url or trusted_host_patterns is set.');
-
-      case CheckResult::FAIL:
-        return $this->t('Neither $base_url nor trusted_host_patterns is set.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/UploadExtensions.php b/web/modules/contrib/security_review/src/Checks/UploadExtensions.php
deleted file mode 100644 (file)
index 8cfe5ad..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\Core\Url;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use Symfony\Component\Routing\Exception\RouteNotFoundException;
-
-/**
- * Checks for unsafe extensions in the allowed extensions settings of fields.
- */
-class UploadExtensions extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Allowed upload extensions';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMachineTitle() {
-    return 'upload_extensions';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    // If field is not enabled return with INFO.
-    if (!$this->moduleHandler()->moduleExists('field')) {
-      return $this->createResult(CheckResult::INFO);
-    }
-
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    // Check field configuration entities.
-    foreach (FieldConfig::loadMultiple() as $entity) {
-      /** @var FieldConfig $entity */
-      $extensions = $entity->getSetting('file_extensions');
-      if ($extensions != NULL) {
-        $extensions = explode(' ', $extensions);
-        $intersect = array_intersect($extensions, $this->security()->unsafeExtensions());
-        // $intersect holds the unsafe extensions this entity allows.
-        foreach ($intersect as $unsafe_extension) {
-          $findings[$entity->id()][] = $unsafe_extension;
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t(
-      'File and image fields allow for uploaded files. Some extensions are considered dangerous because the files can be evaluated and then executed in the browser. A malicious user could use this opening to gain control of your site. Review <a href=":url">all fields on your site</a>.',
-      [':url' => Url::fromRoute('entity.field_storage_config.collection')->toString()]
-    );
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => 'Allowed upload extensions',
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The following extensions are considered unsafe and should be removed or limited from use. Or, be sure you are not granting untrusted users the ability to upload files.');
-
-    $items = [];
-    foreach ($findings as $entity_id => $unsafe_extensions) {
-      $entity = FieldConfig::load($entity_id);
-      /** @var FieldConfig $entity */
-
-      foreach ($unsafe_extensions as $extension) {
-        $item = $this->t(
-          'Review @type in <em>@field</em> field on @bundle',
-          [
-            '@type' => $extension,
-            '@field' => $entity->label(),
-            '@bundle' => $entity->getTargetBundle(),
-          ]
-        );
-
-        // Try to get an edit url.
-        try {
-          $url_params = ['field_config' => $entity->id()];
-          if ($entity->getTargetEntityTypeId() == 'node') {
-            $url_params['node_type'] = $entity->getTargetBundle();
-          }
-          $items[] = Link::createFromRoute(
-            $item,
-            sprintf('entity.field_config.%s_field_edit_form', $entity->getTargetEntityTypeId()),
-            $url_params
-          );
-        }
-        catch (RouteNotFoundException $e) {
-          $items[] = $item;
-        }
-      }
-    }
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $items,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return '';
-    }
-
-    $output = '';
-    foreach ($findings as $entity_id => $unsafe_extensions) {
-      $entity = FieldConfig::load($entity_id);
-      /** @var FieldConfig $entity */
-
-      $output .= $this->t(
-        '@bundle: field @field',
-        [
-          '@bundle' => $entity->getTargetBundle(),
-          '@field' => $entity->label(),
-        ]
-      );
-      $output .= "\n\t" . implode(', ', $unsafe_extensions) . "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Only safe extensions are allowed for uploaded files and images.');
-
-      case CheckResult::FAIL:
-        return $this->t('Unsafe file extensions are allowed in uploads.');
-
-      case CheckResult::INFO:
-        return $this->t('Module field is not enabled.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Checks/ViewsAccess.php b/web/modules/contrib/security_review/src/Checks/ViewsAccess.php
deleted file mode 100644 (file)
index 5a28b19..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Checks;
-
-use Drupal\Core\Link;
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-use Drupal\views\Entity\View;
-
-/**
- * Checks for Views that do not check access.
- */
-class ViewsAccess extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Views access';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    // If views is not enabled return with INFO.
-    if (!$this->moduleHandler()->moduleExists('views')) {
-      return $this->createResult(CheckResult::INFO);
-    }
-
-    $result = CheckResult::SUCCESS;
-    $findings = [];
-
-    $views = View::loadMultiple();
-    /** @var View[] $views */
-
-    // Iterate through views and their displays.
-    foreach ($views as $view) {
-      if ($view->status()) {
-        foreach ($view->get('display') as $display_name => $display) {
-          $access = &$display['display_options']['access'];
-          if (isset($access) && $access['type'] == 'none') {
-            // Access is not controlled for this display.
-            $findings[$view->id()][] = $display_name;
-          }
-        }
-      }
-    }
-
-    if (!empty($findings)) {
-      $result = CheckResult::FAIL;
-    }
-
-    return $this->createResult($result, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    $paragraphs = [];
-    $paragraphs[] = $this->t("Views can check if the user is allowed access to the content. It is recommended that all Views implement some amount of access control, at a minimum checking for the permission 'access content'.");
-
-    return [
-      '#theme' => 'check_help',
-      '#title' => $this->t('Views access'),
-      '#paragraphs' => $paragraphs,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluate(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return [];
-    }
-
-    $paragraphs = [];
-    $paragraphs[] = $this->t('The following View displays do not check access.');
-
-    $items = [];
-    foreach ($findings as $view_id => $displays) {
-      $view = View::load($view_id);
-      /** @var View $view */
-
-      foreach ($displays as $display) {
-        $items[] = Link::createFromRoute(
-          $view->label() . ': ' . $display,
-          'entity.view.edit_display_form',
-          [
-            'view' => $view_id,
-            'display_id' => $display,
-          ]
-        );
-      }
-    }
-
-    return [
-      '#theme' => 'check_evaluation',
-      '#paragraphs' => $paragraphs,
-      '#items' => $items,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function evaluatePlain(CheckResult $result) {
-    $findings = $result->findings();
-    if (empty($findings)) {
-      return '';
-    }
-
-    $output = $this->t('Views without access check:') . ":\n";
-    foreach ($findings as $view_id => $displays) {
-      $output .= "\t" . $view_id . ": " . implode(', ', $displays) . "\n";
-    }
-
-    return $output;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    switch ($result_const) {
-      case CheckResult::SUCCESS:
-        return $this->t('Views are access controlled.');
-
-      case CheckResult::FAIL:
-        return $this->t('There are Views that do not provide any access checks.');
-
-      case CheckResult::INFO:
-        return $this->t('Module views is not enabled.');
-
-      default:
-        return $this->t('Unexpected result.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Controller/ChecklistController.php b/web/modules/contrib/security_review/src/Controller/ChecklistController.php
deleted file mode 100644 (file)
index 1ce78b6..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Controller;
-
-use Drupal\Core\Access\CsrfTokenGenerator;
-use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Link;
-use Drupal\Core\Url;
-use Drupal\security_review\Checklist;
-use Drupal\security_review\SecurityReview;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * The class of the 'Run & Review' page's controller.
- */
-class ChecklistController extends ControllerBase {
-
-  /**
-   * The CSRF Token generator.
-   *
-   * @var \Drupal\Core\Access\CsrfTokenGenerator $csrfToken
-   */
-  protected $csrfToken;
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * The security_review service.
-   *
-   * @var \Drupal\security_review\SecurityReview
-   */
-  protected $securityReview;
-
-
-  /**
-   * Constructs a ChecklistController.
-   *
-   * @param \Drupal\Core\Access\CsrfTokenGenerator $csrf_token_generator
-   *   The CSRF Token generator.
-   * @param \Drupal\security_review\SecurityReview $security_review
-   *   The security_review service.
-   * @param \Drupal\security_review\Checklist $checklist
-   *   The security_review.checklist service.
-   */
-  public function __construct(CsrfTokenGenerator $csrf_token_generator, SecurityReview $security_review, Checklist $checklist) {
-    $this->csrfToken = $csrf_token_generator;
-    $this->checklist = $checklist;
-    $this->securityReview = $security_review;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('csrf_token'),
-      $container->get('security_review'),
-      $container->get('security_review.checklist')
-    );
-  }
-
-  /**
-   * Creates the Run & Review page.
-   *
-   * @return array
-   *   The 'Run & Review' page's render array.
-   */
-  public function index() {
-    $run_form = [];
-
-    // If the user has the required permissions, show the RunForm.
-    if ($this->currentUser()->hasPermission('run security checks')) {
-      // Get the Run form.
-      $run_form = $this->formBuilder()
-        ->getForm('Drupal\security_review\Form\RunForm');
-
-      // Close the Run form if there are results.
-      if ($this->securityReview->getLastRun() > 0) {
-        $run_form['run_form']['#open'] = FALSE;
-      }
-    }
-
-    // Print the results if any.
-    if ($this->securityReview->getLastRun() <= 0) {
-      // If they haven't configured the site, prompt them to do so.
-      if (!$this->securityReview->isConfigured()) {
-        drupal_set_message($this->t('It appears this is your first time using the Security Review checklist. Before running the checklist please review the settings page at <a href=":url">admin/reports/security-review/settings</a> to set which roles are untrusted.',
-          [':url' => Url::fromRoute('security_review.settings')->toString()]
-        ), 'warning');
-      }
-    }
-
-    return [$run_form, $this->results()];
-  }
-
-  /**
-   * Creates the results' table.
-   *
-   * @return array
-   *   The render array for the result table.
-   */
-  public function results() {
-    // If there are no results return.
-    if ($this->securityReview->getLastRun() <= 0) {
-      return [];
-    }
-
-    $checks = [];
-    foreach ($this->checklist->getChecks() as $check) {
-      // Initialize with defaults.
-      $check_info = [
-        'message' => $this->t(
-          'The check "@name" hasn\'t been run yet.',
-          ['@name' => $check->getTitle()]
-        ),
-        'skipped' => $check->isSkipped(),
-      ];
-
-      // Get last result.
-      $last_result = $check->lastResult();
-      if ($last_result != NULL) {
-        if (!$last_result->isVisible()) {
-          continue;
-        }
-        $check_info['result'] = $last_result->result();
-        $check_info['message'] = $last_result->resultMessage();
-      }
-
-      // Determine help link.
-      $check_info['help_link'] = Link::createFromRoute(
-        'Details',
-        'security_review.help',
-        [
-          'namespace' => $check->getMachineNamespace(),
-          'title' => $check->getMachineTitle(),
-        ]
-      );
-
-      // Add toggle button.
-      $toggle_text = $check->isSkipped() ? 'Enable' : 'Skip';
-      $check_info['toggle_link'] = Link::createFromRoute($toggle_text,
-        'security_review.toggle',
-        ['check_id' => $check->id()],
-        ['query' => ['token' => $this->csrfToken->get($check->id())]]
-      );
-
-      // Add to array of completed checks.
-      $checks[] = $check_info;
-    }
-
-    return [
-      '#theme' => 'run_and_review',
-      '#date' => $this->securityReview->getLastRun(),
-      '#checks' => $checks,
-      '#attached' => [
-        'library' => ['security_review/run_and_review'],
-      ],
-    ];
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Controller/HelpController.php b/web/modules/contrib/security_review/src/Controller/HelpController.php
deleted file mode 100644 (file)
index 048be73..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Controller;
-
-use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Datetime\DateFormatterInterface;
-use Drupal\Core\Link;
-use Drupal\security_review\Checklist;
-use Drupal\security_review\CheckResult;
-use Drupal\security_review\SecurityReview;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-
-/**
- * The class of the Help pages' controller.
- */
-class HelpController extends ControllerBase {
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * The security_review service.
-   *
-   * @var \Drupal\security_review\SecurityReview
-   */
-  protected $securityReview;
-
-  /**
-   * The date.formatter service.
-   *
-   * @var \Drupal\Core\Datetime\DateFormatterInterface
-   */
-  private $dateFormatter;
-
-  /**
-   * Constructs a HelpController.
-   *
-   * @param \Drupal\security_review\SecurityReview $security_review
-   *   The security_review service.
-   * @param \Drupal\security_review\Checklist $checklist
-   *   The security_review.checklist service.
-   * @param \Drupal\Core\Datetime\DateFormatterInterface $dateFormatter
-   *   The date.formatter service.
-   */
-  public function __construct(SecurityReview $security_review, Checklist $checklist, DateFormatterInterface $dateFormatter) {
-    // Store the dependencies.
-    $this->checklist = $checklist;
-    $this->securityReview = $security_review;
-    $this->dateFormatter = $dateFormatter;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('security_review'),
-      $container->get('security_review.checklist'),
-      $container->get('date.formatter')
-    );
-  }
-
-  /**
-   * Serves as an entry point for the help pages.
-   *
-   * @param string|NULL $namespace
-   *   The namespace of the check (null if general page).
-   * @param string $title
-   *   The name of the check.
-   *
-   * @return array
-   *   The requested help page.
-   */
-  public function index($namespace, $title) {
-    // If no namespace is set, print the general help page.
-    if ($namespace === NULL) {
-      return $this->generalHelp();
-    }
-
-    // Print check-specific help.
-    return $this->checkHelp($namespace, $title);
-  }
-
-  /**
-   * Returns the general help page.
-   *
-   * @return array
-   *   The general help page.
-   */
-  private function generalHelp() {
-    $paragraphs = [];
-
-    // Print the general help.
-    $paragraphs[] = $this->t('You should take the security of your site very seriously. Fortunately, Drupal is fairly secure by default. The Security Review module automates many of the easy-to-make mistakes that render your site insecure, however it does not automatically make your site impenetrable. You should give care to what modules you install and how you configure your site and server. Be mindful of who visits your site and what features you expose for their use.');
-    $paragraphs[] = $this->t('You can read more about securing your site in the <a href="http://drupal.org/security/secure-configuration">drupal.org handbooks</a> and on <a href="http://crackingdrupal.com">CrackingDrupal.com</a>. There are also additional modules you can install to secure or protect your site. Be aware though that the more modules you have running on your site the greater (usually) attack area you expose.');
-    $paragraphs[] = $this->t('<a href="http://drupal.org/node/382752">Drupal.org Handbook: Introduction to security-related contrib modules</a>');
-
-    // Print the list of security checks with links to their help pages.
-    $checks = [];
-    foreach ($this->checklist->getChecks() as $check) {
-      // Get the namespace array's reference.
-      $check_namespace = &$checks[$check->getMachineNamespace()];
-
-      // Set up the namespace array if not set.
-      if (!isset($check_namespace)) {
-        $check_namespace['namespace'] = $check->getNamespace();
-        $check_namespace['check_links'] = [];
-      }
-
-      // Add the link pointing to the check-specific help.
-      $check_namespace['check_links'][] = Link::createFromRoute(
-        $this->t('@title', ['@title' => $check->getTitle()]),
-        'security_review.help',
-        [
-          'namespace' => $check->getMachineNamespace(),
-          'title' => $check->getMachineTitle(),
-        ]
-      );
-    }
-
-    return [
-      '#theme' => 'general_help',
-      '#paragraphs' => $paragraphs,
-      '#checks' => $checks,
-    ];
-  }
-
-  /**
-   * Returns a check-specific help page.
-   *
-   * @param string $namespace
-   *   The namespace of the check.
-   * @param string $title
-   *   The name of the check.
-   *
-   * @return array
-   *   The check's help page.
-   *
-   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
-   *   If the check is not found.
-   */
-  private function checkHelp($namespace, $title) {
-    // Get the requested check.
-    $check = $this->checklist->getCheck($namespace, $title);
-
-    // If the check doesn't exist, throw 404.
-    if ($check == NULL) {
-      throw new NotFoundHttpException();
-    }
-
-    // Print the help page.
-    $output = [];
-    $output[] = $check->help();
-
-    // If the check is skipped print the skip message, else print the
-    // evaluation.
-    if ($check->isSkipped()) {
-
-      if ($check->skippedBy() != NULL) {
-        $user = $check->skippedBy()->link();
-      }
-      else {
-        $user = 'Anonymous';
-      }
-
-      $skip_message = $this->t(
-        'Check marked for skipping on @date by @user',
-        [
-          '@date' => $this->dateFormatter->format($check->skippedOn()),
-          '@user' => $user,
-        ]
-      );
-
-      $output[] = [
-        '#type' => 'markup',
-        '#markup' => "<p>$skip_message</p>",
-      ];
-    }
-    else {
-      // Evaluate last result, if any.
-      $last_result = $check->lastResult(TRUE);
-      if ($last_result instanceof CheckResult) {
-        // Separator.
-        $output[] = [
-          '#type' => 'markup',
-          '#markup' => '<div />',
-        ];
-
-        // Evaluation page.
-        $output[] = $check->evaluate($last_result);
-      }
-    }
-
-    // Return the completed page.
-    return $output;
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Controller/ToggleController.php b/web/modules/contrib/security_review/src/Controller/ToggleController.php
deleted file mode 100644 (file)
index 4fd9cfe..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Controller;
-
-use Drupal\Core\Access\CsrfTokenGenerator;
-use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Url;
-use Drupal\security_review\Checklist;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpFoundation\JsonResponse;
-use Symfony\Component\HttpFoundation\RequestStack;
-
-/**
- * Responsible for handling the toggle links on the Run & Review page.
- */
-class ToggleController extends ControllerBase {
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * The CSRF Token generator.
-   *
-   * @var \Drupal\Core\Access\CsrfTokenGenerator $csrfToken
-   */
-  protected $csrfToken;
-
-  /**
-   * The request stack.
-   *
-   * @var \Symfony\Component\HttpFoundation\Request $request
-   */
-  protected $request;
-
-  /**
-   * Constructs a ToggleController.
-   *
-   * @param \Drupal\Core\Access\CsrfTokenGenerator $csrf_token_generator
-   *   The CSRF Token generator.
-   * @param \Symfony\Component\HttpFoundation\RequestStack $request
-   *   The request stack.
-   * @param \Drupal\security_review\Checklist $checklist
-   *   The security_review.checklist service.
-   */
-  public function __construct(CsrfTokenGenerator $csrf_token_generator, RequestStack $request, Checklist $checklist) {
-    $this->checklist = $checklist;
-    $this->csrfToken = $csrf_token_generator;
-    $this->request = $request->getCurrentRequest();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('csrf_token'),
-      $container->get('request_stack'),
-      $container->get('security_review.checklist')
-    );
-  }
-
-  /**
-   * Handles check toggling.
-   *
-   * @param string $check_id
-   *   The ID of the check.
-   *
-   * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
-   *   The response.
-   */
-  public function index($check_id) {
-    // Determine access type.
-    $ajax = $this->request->query->get('js') == 1;
-
-    // Validate token.
-    $token = $this->request->query->get('token');
-    if ($this->csrfToken->validate($token, $check_id)) {
-      // Toggle.
-      $check = $this->checklist->getCheckById($check_id);
-      if ($check != NULL) {
-        if ($check->isSkipped()) {
-          $check->enable();
-        }
-        else {
-          $check->skip();
-        }
-      }
-
-      // Output.
-      if ($ajax) {
-        return new JsonResponse([
-          'skipped' => $check->isSkipped(),
-          'toggle_text' => $check->isSkipped() ? $this->t('Enable') : $this->t('Skip'),
-          'toggle_href' => Url::fromRoute(
-            'security_review.toggle',
-            ['check_id' => $check->id()],
-            [
-              'query' => [
-                'token' => $this->csrfToken->get($check->id()),
-                'js' => 1,
-              ],
-            ]
-          )->toString(),
-        ]);
-      }
-      else {
-        // Set message.
-        if ($check->isSkipped()) {
-          drupal_set_message($this->t(
-            '@name check skipped.',
-            ['@name' => $check->getTitle()]
-          ));
-        }
-        else {
-          drupal_set_message($this->t(
-            '@name check no longer skipped.',
-            ['@name' => $check->getTitle()]
-          ));
-        }
-
-        // Redirect back to Run & Review.
-        return $this->redirect('security_review');
-      }
-    }
-
-    // Go back to Run & Review if the access was wrong.
-    return $this->redirect('security_review');
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Form/RunForm.php b/web/modules/contrib/security_review/src/Form/RunForm.php
deleted file mode 100644 (file)
index 16b50ba..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Form;
-
-use Drupal\Core\Form\FormBase;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\security_review\Checklist;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Provides implementation for the Run form.
- */
-class RunForm extends FormBase {
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * Constructs a RunForm.
-   *
-   * @param \Drupal\security_review\Checklist $checklist
-   *   The security_review.checklist service.
-   */
-  public function __construct(Checklist $checklist) {
-    $this->checklist = $checklist;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('security_review.checklist')
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'security-review-run';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    if (!$this->currentUser()->hasPermission('run security checks')) {
-      return [];
-    }
-
-    $form['run_form'] = [
-      '#type' => 'details',
-      '#title' => $this->t('Run'),
-      '#description' => $this->t('Click the button below to run the security checklist and review the results.') . '<br />',
-      '#open' => TRUE,
-    ];
-
-    $form['run_form']['submit'] = [
-      '#type' => 'submit',
-      '#value' => $this->t('Run checklist'),
-    ];
-
-    // Return the finished form.
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $batch = [
-      'operations' => [],
-      'finished' => '_security_review_batch_run_finished',
-      'title' => $this->t('Performing Security Review'),
-      'init_message' => $this->t('Security Review is starting.'),
-      'progress_message' => $this->t('Progress @current out of @total.'),
-      'error_message' => $this->t('An error occurred. Rerun the process or consult the logs.'),
-    ];
-
-    foreach ($this->checklist->getEnabledChecks() as $check) {
-      $batch['operations'][] = [
-        '_security_review_batch_run_op',
-        [$check],
-      ];
-    }
-
-    batch_set($batch);
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Form/SettingsForm.php b/web/modules/contrib/security_review/src/Form/SettingsForm.php
deleted file mode 100644 (file)
index 5ba0757..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Form;
-
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\Datetime\DateFormatterInterface;
-use Drupal\Core\Form\ConfigFormBase;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Session\AccountInterface;
-use Drupal\security_review\Checklist;
-use Drupal\security_review\Security;
-use Drupal\security_review\SecurityReview;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Settings page for Security Review.
- */
-class SettingsForm extends ConfigFormBase {
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * The security_review.security service.
-   *
-   * @var \Drupal\security_review\Security
-   */
-  protected $security;
-
-  /**
-   * The security_review service.
-   *
-   * @var \Drupal\security_review\SecurityReview
-   */
-  protected $securityReview;
-
-  /**
-   * The date.formatter service.
-   *
-   * @var \Drupal\Core\Datetime\DateFormatterInterface
-   */
-  private $dateFormatter;
-
-  /**
-   * Constructs a SettingsForm.
-   *
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The config factory.
-   * @param \Drupal\security_review\Checklist $checklist
-   *   The security_review.checklist service.
-   * @param \Drupal\security_review\Security $security
-   *   The security_review.security service.
-   * @param \Drupal\security_review\SecurityReview $security_review
-   *   The security_review service.
-   * @param \Drupal\Core\Datetime\DateFormatterInterface $dateFormatter
-   *   The date.formatter service.
-   */
-  public function __construct(ConfigFactoryInterface $config_factory, Checklist $checklist, Security $security, SecurityReview $security_review, DateFormatterInterface $dateFormatter) {
-    parent::__construct($config_factory);
-    $this->checklist = $checklist;
-    $this->security = $security;
-    $this->securityReview = $security_review;
-    $this->dateFormatter = $dateFormatter;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('config.factory'),
-      $container->get('security_review.checklist'),
-      $container->get('security_review.security'),
-      $container->get('security_review'),
-      $container->get('date.formatter')
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'security-review-settings';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    // Get the list of checks.
-    $checks = $this->checklist->getChecks();
-
-    // Get the user roles.
-    $roles = user_roles();
-    $options = [];
-    foreach ($roles as $rid => $role) {
-      $options[$rid] = $role->label();
-    }
-
-    // Notify the user if anonymous users can create accounts.
-    $message = '';
-    if (in_array(AccountInterface::AUTHENTICATED_ROLE, $this->security->defaultUntrustedRoles())) {
-      $message = $this->t('You have allowed anonymous users to create accounts without approval so the authenticated role defaults to untrusted.');
-    }
-
-    // Show the untrusted roles form element.
-    $form['untrusted_roles'] = [
-      '#type' => 'checkboxes',
-      '#title' => $this->t('Untrusted roles'),
-      '#description' => $this->t(
-        'Define which roles are for less trusted users. The anonymous role defaults to untrusted. @message Most Security Review checks look for resources usable by untrusted roles.',
-        ['@message' => $message]
-      ),
-      '#options' => $options,
-      '#default_value' => $this->security->untrustedRoles(),
-    ];
-
-    $form['advanced'] = [
-      '#type' => 'details',
-      '#title' => $this->t('Advanced'),
-      '#open' => TRUE,
-    ];
-
-    // Show the logging setting.
-    $form['advanced']['logging'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Log checklist results and skips'),
-      '#description' => $this->t('The result of each check and skip can be logged to watchdog for tracking.'),
-      '#default_value' => $this->securityReview->isLogging(),
-    ];
-
-    // Skipped checks.
-    $values = [];
-    $options = [];
-    foreach ($checks as $check) {
-      // Determine if check is being skipped.
-      if ($check->isSkipped()) {
-        $values[] = $check->id();
-        $label = $this->t(
-          '@name <em>skipped by UID @uid on @date</em>',
-          [
-            '@name' => $check->getTitle(),
-            '@uid' => $check->skippedBy()->id(),
-            '@date' => $this->dateFormatter->format($check->skippedOn()),
-          ]
-        );
-      }
-      else {
-        $label = $check->getTitle();
-      }
-      $options[$check->id()] = $label;
-    }
-    $form['advanced']['skip'] = [
-      '#type' => 'checkboxes',
-      '#title' => $this->t('Checks to skip'),
-      '#description' => $this->t('Skip running certain checks. This can also be set on the <em>Run & review</em> page. It is recommended that you do not skip any checks unless you know the result is wrong or the process times out while running.'),
-      '#options' => $options,
-      '#default_value' => $values,
-    ];
-
-    // Iterate through checklist and get check-specific setting pages.
-    foreach ($checks as $check) {
-      // Get the check's setting form.
-      $check_form = $check->settings()->buildForm();
-
-      // If not empty, add it to the form.
-      if (!empty($check_form)) {
-        // If this is the first non-empty setting page initialize the 'details'
-        if (!isset($form['advanced']['check_specific'])) {
-          $form['advanced']['check_specific'] = [
-            '#type' => 'details',
-            '#title' => $this->t('Check-specific settings'),
-            '#open' => FALSE,
-            '#tree' => TRUE,
-          ];
-        }
-
-        // Add the form.
-        $sub_form = &$form['advanced']['check_specific'][$check->id()];
-
-        $title = $check->getTitle();
-        // If it's an external check, show its namespace.
-        if ($check->getMachineNamespace() != 'security_review') {
-          $title .= $this->t('%namespace', [
-            '%namespace' => $check->getNamespace(),
-          ]);
-        }
-        $sub_form = [
-          '#type' => 'details',
-          '#title' => $title,
-          '#open' => TRUE,
-          '#tree' => TRUE,
-          'form' => $check_form,
-        ];
-      }
-    }
-
-    // Return the finished form.
-    return parent::buildForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validateForm(array &$form, FormStateInterface $form_state) {
-    // Run validation for check-specific settings.
-    if (isset($form['advanced']['check_specific'])) {
-      $check_specific_values = $form_state->getValue('check_specific');
-      foreach ($this->checklist->getChecks() as $check) {
-        $check_form = &$form['advanced']['check_specific'][$check->id()];
-        if (isset($check_form)) {
-          $check->settings()
-            ->validateForm($check_form, $check_specific_values[$check->id()]);
-        }
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    // Frequently used configuration items.
-    $check_settings = $this->config('security_review.checks');
-
-    // Save that the module has been configured.
-    $this->securityReview->setConfigured(TRUE);
-
-    // Save the new untrusted roles.
-    $untrusted_roles = array_keys(array_filter($form_state->getValue('untrusted_roles')));
-    $this->securityReview->setUntrustedRoles($untrusted_roles);
-
-    // Save the new logging setting.
-    $logging = $form_state->getValue('logging') == 1;
-    $this->securityReview->setLogging($logging);
-
-    // Skip selected checks.
-    $skipped = array_keys(array_filter($form_state->getValue('skip')));
-    foreach ($this->checklist->getChecks() as $check) {
-      if (in_array($check->id(), $skipped)) {
-        $check->skip();
-      }
-      else {
-        $check->enable();
-      }
-    }
-
-    // Save the check-specific settings.
-    if (isset($form['advanced']['check_specific'])) {
-      $check_specific_values = $form_state->getValue('check_specific');
-      foreach ($check_specific_values as $id => $values) {
-        // Get corresponding Check.
-        $check = $this->checklist->getCheckById($id);
-
-        // Submit parameters.
-        $check_form = &$form['advanced']['check_specific'][$id]['form'];
-        $check_form_values = $check_specific_values[$id]['form'];
-
-        // Submit.
-        $check->settings()->submitForm($check_form, $check_form_values);
-      }
-    }
-
-    // Commit the settings.
-    $check_settings->save();
-
-    // Finish submitting the form.
-    parent::submitForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEditableConfigNames() {
-    return ['security_review.checks'];
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Security.php b/web/modules/contrib/security_review/src/Security.php
deleted file mode 100644 (file)
index 3104c86..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\DependencyInjection\DependencySerializationTrait;
-use Drupal\Core\DrupalKernelInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Session\AccountInterface;
-use Drupal\user\Entity\Role;
-
-/**
- * Provides frequently used security-related data.
- */
-class Security {
-
-  use DependencySerializationTrait;
-
-  /**
-   * The config factory.
-   *
-   * @var \Drupal\Core\Config\ConfigFactoryInterface
-   */
-  protected $configFactory;
-
-  /**
-   * The Drupal kernel.
-   *
-   * @var \Drupal\Core\DrupalKernelInterface
-   */
-  protected $kernel;
-
-  /**
-   * The module handler.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
-   * The security_review service.
-   *
-   * @var \Drupal\security_review\SecurityReview
-   */
-  protected $securityReview;
-
-  /**
-   * Constructs a Security instance.
-   *
-   * @param \Drupal\security_review\SecurityReview $security_review
-   *   The SecurityReview service.
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The config factory.
-   * @param \Drupal\Core\DrupalKernelInterface $kernel
-   *   The Drupal kernel.
-   */
-  public function __construct(SecurityReview $security_review, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, DrupalKernelInterface $kernel) {
-    // Store the dependencies.
-    $this->securityReview = $security_review;
-    $this->moduleHandler = $module_handler;
-    $this->configFactory = $config_factory;
-    $this->kernel = $kernel;
-  }
-
-  /**
-   * Returns the IDs of untrusted roles.
-   *
-   * If the module hasn't been configured yet, it returns the default untrusted
-   * roles.
-   *
-   * @return string[]
-   *   Untrusted roles' IDs.
-   */
-  public function untrustedRoles() {
-    // If the module hasn't been manually configured yet, return the untrusted
-    // roles depending on Drupal's actual configuration.
-    if (!$this->securityReview->isConfigured()) {
-      return static::defaultUntrustedRoles();
-    }
-
-    // Else return the stored untrusted roles.
-    return $this->securityReview->getUntrustedRoles();
-  }
-
-  /**
-   * Returns the default untrusted roles.
-   *
-   * The default untrusted roles are:
-   *   Anonymous      : always
-   *   Authenticated  : if visitors are allowed to create accounts.
-   *
-   * @return string[]
-   *   Default untrusted roles' IDs.
-   */
-  public function defaultUntrustedRoles() {
-    // Add the Anonymous role to the output array.
-    $roles = [AccountInterface::ANONYMOUS_ROLE];
-
-    // Check whether visitors can create accounts.
-    $user_register = $this->configFactory->get('user.settings')
-      ->get('register');
-    if ($user_register !== USER_REGISTER_ADMINISTRATORS_ONLY) {
-      // If visitors are allowed to create accounts they are considered
-      // untrusted.
-      $roles[] = AccountInterface::AUTHENTICATED_ROLE;
-    }
-
-    // Return the untrusted roles.
-    return $roles;
-  }
-
-  /**
-   * Returns the permission strings that a group of roles have.
-   *
-   * @param string[] $role_ids
-   *   The array of roleIDs to check.
-   * @param bool $group_by_role_id
-   *   Choose whether to group permissions by role ID.
-   *
-   * @return array
-   *   An array of the permissions untrusted roles have. If $groupByRoleId is
-   *   true, the array key is the role ID, the value is the array of permissions
-   *   the role has.
-   */
-  public function rolePermissions(array $role_ids, $group_by_role_id = FALSE) {
-    // Get the permissions the given roles have, grouped by roles.
-    $permissions_grouped = user_role_permissions($role_ids);
-
-    // Fill up the administrative roles' permissions too.
-    foreach ($role_ids as $role_id) {
-      $role = Role::load($role_id);
-      /** @var Role $role */
-      if ($role->isAdmin()) {
-        $permissions_grouped[$role_id] = $this->permissions();
-      }
-    }
-
-    if ($group_by_role_id) {
-      // If the result should be grouped, we have nothing else to do.
-      return $permissions_grouped;
-    }
-    else {
-      // Merge the grouped permissions into $untrusted_permissions.
-      $untrusted_permissions = [];
-      foreach ($permissions_grouped as $permissions) {
-        $untrusted_permissions = array_merge($untrusted_permissions, $permissions);
-      }
-
-      // Remove duplicate elements and fix indexes.
-      $untrusted_permissions = array_values(array_unique($untrusted_permissions));
-      return $untrusted_permissions;
-    }
-  }
-
-  /**
-   * Returns the permission strings that untrusted roles have.
-   *
-   * @param bool $group_by_role_id
-   *   Choose whether to group permissions by role ID.
-   *
-   * @return array
-   *   An array of the permissions untrusted roles have. If $groupByRoleId is
-   *   true, the array key is the role ID, the value is the array of permissions
-   *   the role has.
-   */
-  public function untrustedPermissions($group_by_role_id = FALSE) {
-    return $this->rolePermissions($this->untrustedRoles(), $group_by_role_id);
-  }
-
-  /**
-   * Returns the trusted roles.
-   *
-   * @return array
-   *   Trusted roles' IDs.
-   */
-  public function trustedRoles() {
-    // Get the stored/default untrusted roles.
-    $untrusted_roles = $this->untrustedRoles();
-
-    // Iterate through all the roles, and store which are not untrusted.
-    $trusted = [];
-    foreach (user_roles() as $role) {
-      if (!in_array($role->id(), $untrusted_roles)) {
-        $trusted[] = $role->id();
-      }
-    }
-
-    // Return the trusted roles.
-    return $trusted;
-  }
-
-  /**
-   * Returns the permission strings that trusted roles have.
-   *
-   * @param bool $group_by_role_id
-   *   Choose whether to group permissions by role ID.
-   *
-   * @return array
-   *   An array of the permissions trusted roles have. If $groupByRoleId is
-   *   true, the array key is the role ID, the value is the array of permissions
-   *   the role has.
-   */
-  public function trustedPermissions($group_by_role_id = FALSE) {
-    return $this->rolePermissions($this->trustedRoles(), $group_by_role_id);
-  }
-
-
-  /**
-   * Gets all the permissions.
-   *
-   * @param bool $meta
-   *   Whether to return only permission strings or metadata too.
-   *
-   * @see \Drupal\user\PermissionHandlerInterface::getPermissions()
-   *
-   * @return array
-   *   Array of every permission.
-   */
-  public function permissions($meta = FALSE) {
-    // Not injected because of hard testability.
-    $permissions = \Drupal::service('user.permissions')->getPermissions();
-
-    if (!$meta) {
-      return array_keys($permissions);
-    }
-    return $permissions;
-  }
-
-  /**
-   * Gets the list of unsafe HTML tags.
-   *
-   * @return string[]
-   *   List of unsafe tags.
-   */
-  public function unsafeTags() {
-    $unsafe_tags = [
-      'applet',
-      'area',
-      'audio',
-      'base',
-      'basefont',
-      'body',
-      'button',
-      'comment',
-      'embed',
-      'eval',
-      'form',
-      'frame',
-      'frameset',
-      'head',
-      'html',
-      'iframe',
-      'image',
-      'img',
-      'input',
-      'isindex',
-      'label',
-      'link',
-      'map',
-      'math',
-      'meta',
-      'noframes',
-      'noscript',
-      'object',
-      'optgroup',
-      'option',
-      'param',
-      'script',
-      'select',
-      'style',
-      'svg',
-      'table',
-      'td',
-      'textarea',
-      'title',
-      'video',
-      'vmlframe',
-    ];
-
-    // Alter data.
-    $this->moduleHandler->alter('security_review_unsafe_tags', $unsafe_tags);
-
-    return $unsafe_tags;
-  }
-
-  /**
-   * Gets the list of unsafe file extensions.
-   *
-   * @return string[]
-   *   List of unsafe extensions.
-   */
-  public function unsafeExtensions() {
-    $unsafe_ext = [
-      'swf',
-      'exe',
-      'html',
-      'htm',
-      'php',
-      'phtml',
-      'py',
-      'js',
-      'vb',
-      'vbe',
-      'vbs',
-    ];
-
-    // Alter data.
-    $this->moduleHandler
-      ->alter('security_review_unsafe_extensions', $unsafe_ext);
-
-    return $unsafe_ext;
-  }
-
-  /**
-   * Returns the site path.
-   *
-   * @return string
-   *   Absolute site path.
-   */
-  public function sitePath() {
-    return DRUPAL_ROOT . '/' . $this->kernel->getSitePath();
-  }
-
-  /**
-   * Finds files and directories that are writable by the web server.
-   *
-   * @param string[] $files
-   *   The files to iterate through.
-   * @param bool $cli
-   *   Whether it is being invoked in CLI context.
-   *
-   * @return string[]
-   *   The files that are writable.
-   */
-  public function findWritableFiles(array $files, $cli = FALSE) {
-    $writable = [];
-    if (!$cli) {
-      // Running from UI.
-      foreach ($files as $file) {
-        if (is_writable($file)) {
-          $writable[] = $file;
-        }
-      }
-    }
-    else {
-      // Get the web server's user data.
-      $uid = $this->securityReview->getServerUid();
-      $gids = $this->securityReview->getServerGids();
-
-      foreach ($files as $file) {
-        $perms = 0777 & fileperms($file);
-        // Check write permissions for others.
-        $ow = ($perms >> 1) & 1;
-        if ($ow === 1) {
-          $writable[] = $file;
-          continue;
-        }
-
-        // Check write permissions for owner.
-        $uw = ($perms >> 7) & 1;
-        if ($uw === 1 && fileowner($file) == $uid) {
-          $writable[] = $file;
-          continue;
-        }
-
-        // Check write permissions for group.
-        $gw = ($perms >> 4) & 1;
-        if ($gw === 1 && in_array(filegroup($file), $gids)) {
-          $writable[] = $file;
-        }
-      }
-    }
-    return $writable;
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/SecurityReview.php b/web/modules/contrib/security_review/src/SecurityReview.php
deleted file mode 100644 (file)
index fafaa9c..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-<?php
-
-namespace Drupal\security_review;
-
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\DependencyInjection\DependencySerializationTrait;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Logger\RfcLogLevel;
-use Drupal\Core\Session\AccountProxyInterface;
-use Drupal\Core\State\StateInterface;
-
-/**
- * A class containing static methods regarding the module's configuration.
- */
-class SecurityReview {
-
-  use DependencySerializationTrait;
-
-  /**
-   * Temporary logging setting.
-   *
-   * @var null|bool
-   */
-  protected static $temporaryLogging = NULL;
-
-  /**
-   * The config factory.
-   *
-   * @var \Drupal\Core\Config\ConfigFactoryInterface
-   */
-  protected $configFactory;
-
-  /**
-   * The config storage.
-   *
-   * @var \Drupal\Core\Config\Config
-   */
-  protected $config;
-
-  /**
-   * The state storage.
-   *
-   * @var \Drupal\Core\State\StateInterface
-   */
-  protected $state;
-
-  /**
-   * The module handler.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
-   * The current user.
-   *
-   * @var \Drupal\Core\Session\AccountProxyInterface
-   */
-  protected $currentUser;
-
-  /**
-   * Constructs a SecurityReview instance.
-   *
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The config factory.
-   * @param \Drupal\Core\State\StateInterface $state
-   *   The state storage.
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler.
-   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
-   *   The current user.
-   */
-  public function __construct(ConfigFactoryInterface $config_factory, StateInterface $state, ModuleHandlerInterface $module_handler, AccountProxyInterface $current_user) {
-    // Store the dependencies.
-    $this->configFactory = $config_factory;
-    $this->config = $config_factory->getEditable('security_review.settings');
-    $this->state = $state;
-    $this->moduleHandler = $module_handler;
-    $this->currentUser = $current_user;
-  }
-
-  /**
-   * Returns whether the module has been configured.
-   *
-   * If the module has been configured on the settings page this function
-   * returns true. Otherwise it returns false.
-   *
-   * @return bool
-   *   A boolean indicating whether the module has been configured.
-   */
-  public function isConfigured() {
-    return $this->config->get('configured') === TRUE;
-  }
-
-  /**
-   * Returns true if logging is enabled, otherwise returns false.
-   *
-   * @return bool
-   *   A boolean indicating whether logging is enabled.
-   */
-  public function isLogging() {
-    // Check for temporary logging.
-    if (static::$temporaryLogging !== NULL) {
-      return static::$temporaryLogging;
-    }
-
-    return $this->config->get('log') === TRUE;
-  }
-
-  /**
-   * Returns the last time Security Review has been run.
-   *
-   * @return int
-   *   The last time Security Review has been run.
-   */
-  public function getLastRun() {
-    return $this->state->get('last_run', 0);
-  }
-
-  /**
-   * Returns the IDs of the stored untrusted roles.
-   *
-   * @return string[]
-   *   Stored untrusted roles' IDs.
-   */
-  public function getUntrustedRoles() {
-    return $this->config->get('untrusted_roles');
-  }
-
-  /**
-   * Sets the 'configured' flag.
-   *
-   * @param bool $configured
-   *   The new value of the 'configured' setting.
-   */
-  public function setConfigured($configured) {
-    $this->config->set('configured', $configured);
-    $this->config->save();
-  }
-
-  /**
-   * Sets the 'logging' flag.
-   *
-   * @param bool $logging
-   *   The new value of the 'logging' setting.
-   * @param bool $temporary
-   *   Whether to set only temporarily.
-   */
-  public function setLogging($logging, $temporary = FALSE) {
-    if (!$temporary) {
-      $this->config->set('log', $logging);
-      $this->config->save();
-    }
-    else {
-      static::$temporaryLogging = ($logging == TRUE);
-    }
-  }
-
-  /**
-   * Sets the 'last_run' value.
-   *
-   * @param int $last_run
-   *   The new value for 'last_run'.
-   */
-  public function setLastRun($last_run) {
-    $this->state->set('last_run', $last_run);
-  }
-
-  /**
-   * Stores the given 'untrusted_roles' setting.
-   *
-   * @param string[] $untrusted_roles
-   *   The new untrusted roles' IDs.
-   */
-  public function setUntrustedRoles(array $untrusted_roles) {
-    $this->config->set('untrusted_roles', $untrusted_roles);
-    $this->config->save();
-  }
-
-  /**
-   * Logs an event.
-   *
-   * @param \Drupal\security_review\Check $check
-   *   The Check the message is about.
-   * @param string $message
-   *   The message.
-   * @param array $context
-   *   The context of the message.
-   * @param int $level
-   *   Severity (RfcLogLevel).
-   */
-  public function log(Check $check, $message, array $context, $level) {
-    if (static::isLogging()) {
-      $this->moduleHandler->invokeAll(
-        'security_review_log',
-        [
-          'check' => $check,
-          'message' => $message,
-          'context' => $context,
-          'level' => $level,
-        ]
-      );
-    }
-  }
-
-  /**
-   * Logs a check result.
-   *
-   * @param \Drupal\security_review\CheckResult $result
-   *   The result to log.
-   */
-  public function logCheckResult(CheckResult $result = NULL) {
-    if ($this->isLogging()) {
-      if ($result == NULL) {
-        $check = $result->check();
-        $context = [
-          '@check' => $check->getTitle(),
-          '@namespace' => $check->getNamespace(),
-        ];
-        $this->log($check, '@check of @namespace produced a null result', $context, RfcLogLevel::CRITICAL);
-        return;
-      }
-
-      $check = $result->check();
-
-      // Fallback log message.
-      $level = RfcLogLevel::NOTICE;
-      $message = '@name check invalid result';
-
-      // Set log message and level according to result.
-      switch ($result->result()) {
-        case CheckResult::SUCCESS:
-          $level = RfcLogLevel::INFO;
-          $message = '@name check succeeded';
-          break;
-
-        case CheckResult::FAIL:
-          $level = RfcLogLevel::ERROR;
-          $message = '@name check failed';
-          break;
-
-        case CheckResult::WARN:
-          $level = RfcLogLevel::WARNING;
-          $message = '@name check raised a warning';
-          break;
-
-        case CheckResult::INFO:
-          $level = RfcLogLevel::INFO;
-          $message = '@name check returned info';
-          break;
-      }
-
-      $context = ['@name' => $check->getTitle()];
-      $this->log($check, $message, $context, $level);
-    }
-  }
-
-  /**
-   * Deletes orphaned check data.
-   */
-  public function cleanStorage() {
-    /** @var \Drupal\security_review\Checklist $checklist */
-    $checklist = \Drupal::service('security_review.checklist');
-
-    // Get list of check configuration names.
-    $orphaned = $this->configFactory->listAll('security_review.check.');
-
-    // Remove items that are used by the checks.
-    foreach ($checklist->getChecks() as $check) {
-      $key = array_search('security_review.check.' . $check->id(), $orphaned);
-      if ($key !== FALSE) {
-        unset($orphaned[$key]);
-      }
-    }
-
-    // Delete orphaned configuration data.
-    foreach ($orphaned as $config_name) {
-      $config = $this->configFactory->getEditable($config_name);
-      $config->delete();
-    }
-  }
-
-  /**
-   * Stores information about the server into the State system.
-   */
-  public function setServerData() {
-    if (!static::isServerPosix() || PHP_SAPI === 'cli') {
-      return;
-    }
-    // Determine web server's uid and groups.
-    $uid = posix_getuid();
-    $groups = posix_getgroups();
-
-    // Store the data in the State system.
-    $this->state->set('security_review.server.uid', $uid);
-    $this->state->set('security_review.server.groups', $groups);
-  }
-
-  /**
-   * Returns whether the server is POSIX.
-   *
-   * @return bool
-   *   Whether the web server is POSIX based.
-   */
-  public function isServerPosix() {
-    return function_exists('posix_getuid');
-  }
-
-  /**
-   * Returns the UID of the web server.
-   *
-   * @return int
-   *   UID of the web server's user.
-   */
-  public function getServerUid() {
-    return $this->state->get('security_review.server.uid');
-  }
-
-  /**
-   * Returns the GIDs of the web server.
-   *
-   * @return int[]
-   *   GIDs of the web server's user.
-   */
-  public function getServerGids() {
-    return $this->state->get('security_review.server.groups');
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Tests/CheckWebTest.php b/web/modules/contrib/security_review/src/Tests/CheckWebTest.php
deleted file mode 100644 (file)
index 1f8a452..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Contains tests for Check that don't suffice with KernelTestBase.
- *
- * @group security_review
- */
-class CheckWebTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['security_review'];
-
-  /**
-   * The security checks defined by Security Review.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $checks;
-
-  /**
-   * The test user.
-   *
-   * @var \Drupal\user\Entity\User
-   */
-  protected $user;
-
-  /**
-   * Sets up the testing environment, logs the user in, populates $check.
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    // Login.
-    $this->user = $this->drupalCreateUser(
-      [
-        'run security checks',
-        'access security review list',
-        'access administration pages',
-        'administer site configuration',
-      ]
-    );
-    $this->drupalLogin($this->user);
-
-    // Get checks.
-    $this->checks = security_review_security_review_checks();
-  }
-
-  /**
-   * Tests Check::skip().
-   *
-   * Checks whether skip() marks the check as skipped, and checks the
-   * skippedBy() value.
-   */
-  public function testSkipCheck() {
-    foreach ($this->checks as $check) {
-      $check->skip();
-
-      $is_skipped = $check->isSkipped();
-      $skipped_by = $check->skippedBy();
-
-      $this->assertTrue($is_skipped, $check->getTitle() . ' skipped.');
-      $this->assertEqual($this->user->id(), $skipped_by->id(), 'Skipped by ' . $skipped_by->label());
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/src/Tests/ChecklistWebTest.php b/web/modules/contrib/security_review/src/Tests/ChecklistWebTest.php
deleted file mode 100644 (file)
index dead358..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-namespace Drupal\security_review\Tests;
-
-use Drupal\security_review\Checklist;
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Contains tests related to the SecurityReview class.
- *
- * @group security_review
- */
-class ChecklistWebTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['security_review'];
-
-  /**
-   * The test user.
-   *
-   * @var \Drupal\user\Entity\User
-   */
-  protected $user;
-
-  /**
-   * The security checks defined by Security Review.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $checks;
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * Sets up the testing environment.
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->checklist = \Drupal::getContainer()
-      ->get('security_review.checklist');
-
-    // Login.
-    $this->user = $this->drupalCreateUser(
-      [
-        'run security checks',
-        'access security review list',
-        'access administration pages',
-        'administer site configuration',
-      ]
-    );
-    $this->drupalLogin($this->user);
-
-    // Populate $checks.
-    $this->checks = security_review_security_review_checks();
-
-    // Clear cache.
-    Checklist::clearCache();
-  }
-
-  /**
-   * Tests a full checklist run.
-   *
-   * Tests whether the checks hasn't been run yet, then runs them and checks
-   * that their lastRun value is not 0.
-   */
-  public function testRun() {
-    foreach ($this->checks as $check) {
-      $this->assertEqual(0, $check->lastRun(), $check->getTitle() . ' has not been run yet.');
-    }
-    $this->checklist->runChecklist();
-    foreach ($this->checks as $check) {
-      $this->assertNotEqual(0, $check->lastRun(), $check->getTitle() . ' has been run.');
-    }
-  }
-
-  /**
-   * Skips all checks then runs the checklist. No checks should be ran.
-   */
-  public function testSkippedRun() {
-    foreach ($this->checks as $check) {
-      $check->skip();
-    }
-    $this->checklist->runChecklist();
-    foreach ($this->checks as $check) {
-      $this->assertEqual(0, $check->lastRun(), $check->getTitle() . ' has not been run.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/templates/check_evaluation.html.twig b/web/modules/contrib/security_review/templates/check_evaluation.html.twig
deleted file mode 100644 (file)
index 77f4509..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-{#
-/**
- * @file
- * Default evaluation page template for checks.
- *
- * Available variables:
- * - paragraphs: Array of paragraphs (strings) to show before the list.
- * - items: Array of items (strings) to show in an unordered list after the paragraphs.
- */
-#}
-
-{% for paragraph in paragraphs %}
-    <p>
-        {{ paragraph }}
-    </p>
-{% endfor %}
-{% if items is not empty %}
-    <ul>
-        {% for item in items %}
-            <li>{{ item }}</li>
-        {% endfor %}
-    </ul>
-{% endif %}
diff --git a/web/modules/contrib/security_review/templates/check_help.html.twig b/web/modules/contrib/security_review/templates/check_help.html.twig
deleted file mode 100644 (file)
index 8b491cf..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-{#
-/**
- * @file
- * Default check-specific help page template for checks.
- *
- * Available variables:
- * - title: The title to show on the top of the page.
- * - paragraphs: Array of paragraphs (strings) to show after the title.
- */
-#}
-
-<h3>
-    {{ title }}
-</h3>
-{% for paragraph in paragraphs %}
-    <p>
-        {{ paragraph }}
-    </p>
-{% endfor %}
diff --git a/web/modules/contrib/security_review/templates/general_help.html.twig b/web/modules/contrib/security_review/templates/general_help.html.twig
deleted file mode 100644 (file)
index 0b0168e..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-{#
-/**
- * @file
- * Default general help page of Security Review.
- *
- * Available variables:
- * - paragraphs: Array of paragraphs (strings) to show as an introduction.
- * - items: Array of items (strings) to show in an unordered list after the
- *   paragraphs.
- * - checks: Array of check links grouped by their namespaces.
- */
-#}
-
-{% for paragraph in paragraphs %}
-    <p>
-        {{ paragraph }}
-    </p>
-{% endfor %}
-<h3>
-    {% trans %}
-    Check-specific help
-    {% endtrans %}
-</h3>
-<p>
-    {% trans %}
-    Details and help on the security review checks. Checks are not always
-    perfectly correct in their procedure and result. Refer to drupal.org
-    handbook documentation if you are unsure how to make the recommended
-    alterations to your configuration or consult the module's README.txt for
-    support.
-    {% endtrans %}
-</p>
-{% if checks is not empty %}
-    {% for check_namespace in checks %}
-        <h4>{{ check_namespace.namespace }}</h4>
-        <ul>
-            {% for check_link in check_namespace.check_links %}
-                <li>{{ check_link }}</li>
-            {% endfor %}
-        </ul>
-    {% endfor %}
-{% endif %}
diff --git a/web/modules/contrib/security_review/templates/run_and_review.html.twig b/web/modules/contrib/security_review/templates/run_and_review.html.twig
deleted file mode 100644 (file)
index e6eac92..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-{#
-/**
- * @file
- * Default template for the Run & Review page.
- *
- * Available variables:
- * - checks: Array of check informations.
- *   A check information consists of:
- *   - result: The check's result (string).
- *   - message: The result message.
- *   - help_link: The link to the check's help page.
- *   - toggle_link: The toggle link for the check.
- *   - skipped: Whether the check is skipped.
- */
-#}
-
-<h3>
-    {% trans %}
-    Review results from last run {{ date }}
-    {% endtrans %}
-</h3>
-<p>
-    {% trans %}
-    Here you can review the results from the last run of the checklist. Checks
-    are not always perfectly correct in their procedure and result. You can keep
-    a check from running by clicking the 'Skip' link beside it. You can run the
-    checklist again by expanding the fieldset above.
-    {% endtrans %}
-</p>
-<table class="security-review-run-and-review__table">
-    <tbody>
-    {% for check in checks %}
-        {% set style = '' %}
-        {% if check.result is defined %}
-            {% set style = style ~ ' ' ~ check.result %}
-        {% endif %}
-        {% if check.skipped %}
-            {% set style = style ~ ' skipped' %}
-        {% endif %}
-        <tr class="security-review-run-and-review__entry{{ style }}">
-            <td class="security-review-run-and-review__entry-icon">
-                {% if icons[check.result] is defined %}
-                    <img src="{{ icons[check.result] }}"/>
-                {% endif %}
-            </td>
-            <td>{{ check.message }}</td>
-            <td>{{ check.help_link }}</td>
-            <td class="security-review-toggle-link">{{ check.toggle_link }}</td>
-        </tr>
-    {% endfor %}
-    </tbody>
-</table>
diff --git a/web/modules/contrib/security_review/tests/modules/security_review_test/security_review_test.info.yml b/web/modules/contrib/security_review/tests/modules/security_review_test/security_review_test.info.yml
deleted file mode 100644 (file)
index 5aeb68c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-name: security_review_test
-type: module
-core: 8.x
-package: Testing
-dependencies:
-  - security_review
diff --git a/web/modules/contrib/security_review/tests/modules/security_review_test/security_review_test.module b/web/modules/contrib/security_review/tests/modules/security_review_test/security_review_test.module
deleted file mode 100644 (file)
index ae4400f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * @file
- * Module that defines testable security checks for Security Review.
- */
-
-use Drupal\security_review_test\Test;
-use Drupal\security_review_test\TestNoStore;
-
-/**
- * Implements hook_security_review_checks().
- */
-function security_review_test_security_review_checks() {
-  return [
-    new Test(),
-    new TestNoStore(),
-  ];
-}
diff --git a/web/modules/contrib/security_review/tests/modules/security_review_test/src/Test.php b/web/modules/contrib/security_review/tests/modules/security_review_test/src/Test.php
deleted file mode 100644 (file)
index 4b0bf65..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-namespace Drupal\security_review_test;
-
-use Drupal\security_review\Check;
-use Drupal\security_review\CheckResult;
-
-/**
- * A test security check for testing extensibility.
- */
-class Test extends Check {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getNamespace() {
-    return 'Security Review Test';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Test';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function run() {
-    $findings = [];
-    for ($i = 0; $i < 20; ++$i) {
-      $findings[] = rand(0, 1) ? rand(0, 10) : 'string';
-    }
-
-    return $this->createResult(CheckResult::INFO, $findings);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function help() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMessage($result_const) {
-    return 'The test ran.';
-  }
-
-}
diff --git a/web/modules/contrib/security_review/tests/modules/security_review_test/src/TestNoStore.php b/web/modules/contrib/security_review/tests/modules/security_review_test/src/TestNoStore.php
deleted file mode 100644 (file)
index 15a04cf..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Drupal\security_review_test;
-
-/**
- * A test security check for testing extensibility.
- *
- * Same as Test, but doesn't store findings.
- */
-class TestNoStore extends Test {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getTitle() {
-    return 'Test without storing findings';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function storesFindings() {
-    return FALSE;
-  }
-
-}
diff --git a/web/modules/contrib/security_review/tests/src/Kernel/CheckTest.php b/web/modules/contrib/security_review/tests/src/Kernel/CheckTest.php
deleted file mode 100644 (file)
index 72676e4..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-
-namespace Drupal\Tests\security_review\Kernel;
-
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\security_review\CheckResult;
-
-/**
- * Contains tests for Checks.
- *
- * @group security_review
- */
-class CheckTest extends KernelTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['security_review', 'security_review_test'];
-
-  /**
-   * The security checks defined by Security Review and Security Review Test.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $checks;
-
-  /**
-   * The security checks defined by Security Review.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $realChecks;
-
-  /**
-   * The security checks defined by Security Review Test.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $testChecks;
-
-  /**
-   * Sets up the environment, populates the $checks variable.
-   */
-  protected function setUp() {
-    parent::setUp();
-    $this->realChecks = security_review_security_review_checks();
-    $this->testChecks = security_review_test_security_review_checks();
-    $this->checks = array_merge($this->realChecks, $this->testChecks);
-  }
-
-  /**
-   * Tests whether $checks is empty.
-   */
-  public function testChecksExist() {
-    $this->assertFalse(empty($this->checks), 'Checks found.');
-  }
-
-  /**
-   * Every check should be enabled by default.
-   */
-  public function testEnabledByDefault() {
-    foreach ($this->checks as $check) {
-      $this->assertFalse($check->isSkipped(), $check->getTitle() . ' is enabled by default.');
-    }
-  }
-
-  /**
-   * Tests some check's results on a clean install of Drupal.
-   */
-  public function testDefaultResults() {
-    $defaults = [
-      'security_review-field' => CheckResult::SUCCESS,
-    ];
-
-    foreach ($this->checks as $check) {
-      if (array_key_exists($check->id(), $defaults)) {
-        $result = $check->run();
-        $this->assertEquals($defaults[$check->id()], $result->result(), $check->getTitle() . ' produced the right result.');
-      }
-    }
-  }
-
-  /**
-   * Tests the storing of a check result on every test check.
-   */
-  public function testStoreResult() {
-    foreach ($this->testChecks as $check) {
-      // Run the check and store its result.
-      $result = $check->run();
-      $check->storeResult($result);
-
-      // Compare lastResult() with $result.
-      $last_result = $check->lastResult(TRUE);
-      $this->assertEquals($result->result(), $last_result->result(), 'Result stored.');
-      $this->assertEquals($result->time(), $last_result->time(), 'Time stored.');
-      if ($check->storesFindings()) {
-        // If storesFindings() is set to FALSE, then these could differ.
-        $this->assertEquals($result->findings(), $last_result->findings(), 'Findings stored.');
-      }
-    }
-  }
-
-  /**
-   * Tests stored result correction on lastResult() call.
-   *
-   * Tests the case when the check doesn't store its findings, and the new
-   * result that lastResult() returns overwrites the old one if the result
-   * integer is not the same.
-   */
-  public function testLastResultUpdate() {
-    foreach ($this->testChecks as $check) {
-      if (!$check->storesFindings()) {
-        // Get the real result.
-        $result = $check->run();
-
-        // Build the fake result.
-        $new_result_result = $result->result() == CheckResult::SUCCESS ? CheckResult::FAIL : CheckResult::SUCCESS;
-        $new_result = new CheckResult(
-          $check,
-          $new_result_result,
-          [],
-          TRUE
-        );
-
-        // Store it.
-        $check->storeResult($new_result);
-
-        // Check if lastResult()'s result integer is the same as $result's.
-        $last_result = $check->lastResult(TRUE);
-        $this->assertEquals($result->result(), $last_result->result(), 'Invalid result got updated.');
-      }
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/tests/src/Kernel/ChecklistTest.php b/web/modules/contrib/security_review/tests/src/Kernel/ChecklistTest.php
deleted file mode 100644 (file)
index 6172adc..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-
-namespace Drupal\Tests\security_review\Kernel;
-
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\security_review\Checklist;
-
-/**
- * Contains test for Checklist.
- *
- * @group security_review
- */
-class ChecklistTest extends KernelTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['security_review', 'security_review_test'];
-
-  /**
-   * The security_review.checklist service.
-   *
-   * @var \Drupal\security_review\Checklist
-   */
-  protected $checklist;
-
-  /**
-   * The security checks defined by Security Review and Security Review Test.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $checks;
-
-  /**
-   * The security checks defined by Security Review.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $realChecks;
-
-  /**
-   * The security checks defined by Security Review Test.
-   *
-   * @var \Drupal\security_review\Check[]
-   */
-  protected $testChecks;
-
-  /**
-   * Array of the IDs of $checks.
-   *
-   * @var array
-   */
-  protected $checkIDs;
-
-  /**
-   * Sets up the environment, populates the $checks variable.
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->checklist = \Drupal::getContainer()
-      ->get('security_review.checklist');
-    $this->realChecks = security_review_security_review_checks();
-    $this->testChecks = security_review_test_security_review_checks();
-    $this->checks = array_merge($this->realChecks, $this->testChecks);
-
-    Checklist::clearCache();
-    $this->checkIDs = [];
-    foreach ($this->checks as $check) {
-      $this->checkIDs[] = $check->id();
-    }
-  }
-
-  /**
-   * Tests Checklist::getChecks().
-   *
-   * Tests whether getChecks() contains all the checks that
-   * security_review_security_review_checks() and
-   * security_review_test_security_review_checks() returns.
-   */
-  public function testChecksProvided() {
-    foreach ($this->checklist->getChecks() as $check) {
-      $this->assertTrue(in_array($check->id(), $this->checkIDs), $check->getTitle() . ' found.');
-    }
-  }
-
-  /**
-   * Tests whether checks returned by getEnabledChecks() are all enabled.
-   */
-  public function testEnabledChecks() {
-    foreach ($this->checklist->getEnabledChecks() as $check) {
-      $this->assertFalse($check->isSkipped(), $check->getTitle() . ' is enabled.');
-
-      // Disable check.
-      $check->skip();
-    }
-    Checklist::clearCache();
-    $this->assertEquals(0, count($this->checklist->getEnabledChecks()), 'Disabled all checks.');
-  }
-
-  /**
-   * Tests Checklist's Check search functions.
-   *
-   * Tests the search functions of Checklist:
-   *   getCheck().
-   *   getCheckById().
-   */
-  public function testCheckSearch() {
-    foreach ($this->checklist->getChecks() as $check) {
-      // getCheck().
-      $found = $this->checklist->getCheck($check->getMachineNamespace(), $check->getMachineTitle());
-      $this->assertEquals($check->id(), $found->id(), 'Found ' . $check->getTitle() . '.');
-
-      // getCheckById().
-      $found = $this->checklist->getCheckById($check->id());
-      $this->assertEquals($check->id(), $found->id(), 'Found ' . $check->getTitle() . '.');
-    }
-  }
-
-}
diff --git a/web/modules/contrib/security_review/tests/src/Kernel/SecurityReviewTest.php b/web/modules/contrib/security_review/tests/src/Kernel/SecurityReviewTest.php
deleted file mode 100644 (file)
index 08066fa..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace Drupal\Tests\security_review\Kernel;
-
-use Drupal\KernelTests\KernelTestBase;
-
-/**
- * Contains tests related to the SecurityReview class.
- *
- * @group security_review
- */
-class SecurityReviewTest extends KernelTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['security_review'];
-
-  /**
-   * The security_review service.
-   *
-   * @var \Drupal\security_review\SecurityReview
-   */
-  protected $securityReview;
-
-  /**
-   * Sets up the testing environment.
-   */
-  protected function setUp() {
-    parent::setUp();
-    $this->installConfig(static::$modules);
-    $this->securityReview = \Drupal::getContainer()->get('security_review');
-  }
-
-  /**
-   * Tests the 'logging' setting.
-   */
-  public function testConfigLogging() {
-    $this->assertTrue($this->securityReview->isLogging(), 'Logging enabled by default.');
-    $this->securityReview->setLogging(FALSE);
-    $this->assertFalse($this->securityReview->isLogging(), 'Logging disabled.');
-  }
-
-  /**
-   * Tests the 'configured' setting.
-   */
-  public function testConfigConfigured() {
-    $this->assertFalse($this->securityReview->isConfigured(), 'Not configured by default.');
-    $this->securityReview->setConfigured(TRUE);
-    $this->assertTrue($this->securityReview->isConfigured(), 'Set to configured.');
-  }
-
-  /**
-   * Tests the 'untrusted_roles' setting.
-   */
-  public function testConfigUntrustedRoles() {
-    $this->assertEquals([], $this->securityReview->getUntrustedRoles(), 'untrusted_roles empty by default.');
-
-    $roles = [0, 1, 2, 3, 4];
-    $this->securityReview->setUntrustedRoles($roles);
-    $this->assertEquals($roles, $this->securityReview->getUntrustedRoles(), 'untrusted_roles set to test array.');
-  }
-
-  /**
-   * Tests the 'last_run' setting.
-   */
-  public function testConfigLastRun() {
-    $this->assertEquals(0, $this->securityReview->getLastRun(), 'last_run is 0 by default.');
-    $time = time();
-    $this->securityReview->setLastRun($time);
-    $this->assertEquals($time, $this->securityReview->getLastRun(), 'last_run set to now.');
-  }
-
-}
index 1c85214562a0134fc8214dc666e2a56188a0f645..d2cbed944e1d5e7bf82756478c62ff8441e7a36a 100644 (file)
@@ -33,7 +33,6 @@ class ViewsBootstrapTab extends StylePluginBase {
    * {@inheritdoc}
    */
   protected $usesOptions = TRUE;
-  protected $usesRowPlugin = TRUE;
 
   /**
    * Definition.
index 288bf3a4016ee7fafb63b5811ebd9438090210df..5895ec0842b7f204babfb7f8113e13c2bf7ebb1e 100644 (file)
@@ -19,8 +19,6 @@
  * @ingroup themeable
  */
 #}
-{{ attach_library('views_bootstrap/components') }}
-
 <div id="{{ id }}" class="carousel slide" data-ride="carousel" data-interval="{{ interval }}" data-pause="{{ pause }}" data-wrap="{{ wrap }}">
 
   {# Carousel indicators #}
index ce5ca5f0519fa4fafd971d1f8a2109fde1a804be..c611996341ac091acf82b478c17929047bdb219e 100644 (file)
@@ -5,5 +5,3 @@ package: Views
 core: 8.x
 dependencies:
   - drupal:views
-libraries:
-  - views_bootstrap/components
index a94d60d3b51faacabcc91aef78ae72625c25df1c..09f17500ddfc444046883142e0bb617dd6983bfa 100644 (file)
@@ -27,7 +27,7 @@ function template_preprocess_views_bootstrap_accordion(array &$vars) {
     foreach ($vars['rows'] as $id => $row) {
       $vars['rows'][$id] = [];
       $vars['rows'][$id]['content'] = $row;
-      $vars['rows'][$id]['title'] = $view->style_plugin->getField($id, $panel_title_field);
+      $vars['rows'][$id]['title'] = $view->style_plugin->getFieldValue($id, $panel_title_field);
     }
   }
   else {