diff --git a/composer.json b/composer.json index 8a8b6dd1765268adb6e09c804eecdb7d9d1a90a1..d4e3daedd21fbc158fb5efc33883cfc18bd514fb 100644 --- a/composer.json +++ b/composer.json @@ -187,7 +187,7 @@ "drupal/workbench": "^1.3", "drupal/workbench_access": "^1.0@beta", "drupal/workbench_moderation": "^1.6", - "wikimedia/composer-merge-plugin": "1.4.1" + "wikimedia/composer-merge-plugin": "^2.0.0" }, "conflict": { "drupal/drupal": "*" diff --git a/composer.lock b/composer.lock index ec49e4692e8794c28e512cd9c20b36f1ab4b189a..46f4bc9958d150cdedfe8006ab202f5ed3b48396 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c1cd9f8ce2950e1fffef7dba9f1852a3", + "content-hash": "0daa58e7c1a6d32a902b5f78041b05c4", "packages": [ { "name": "asm89/stack-cors", @@ -56,6 +56,10 @@ "cors", "stack" ], + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/1.3.0" + }, "time": "2019-12-24T22:41:47+00:00" }, { @@ -186,6 +190,10 @@ "zend", "zikula" ], + "support": { + "issues": "https://github.com/composer/installers/issues", + "source": "https://github.com/composer/installers/tree/v1.10.0" + }, "funding": [ { "url": "https://packagist.com", @@ -261,6 +269,11 @@ "validation", "versioning" ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/1.5.1" + }, "time": "2020-01-13T12:06:48+00:00" }, { @@ -654,6 +667,10 @@ "docblock", "parser" ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/v1.4.0" + }, "time": "2017-02-24T16:22:25+00:00" }, { @@ -724,6 +741,10 @@ "cache", "caching" ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.6.x" + }, "time": "2017-07-22T12:49:21+00:00" }, { @@ -791,6 +812,10 @@ "collections", "iterator" ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/master" + }, "time": "2017-01-03T10:49:41+00:00" }, { @@ -864,6 +889,10 @@ "persistence", "spl" ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/v2.7.3" + }, "time": "2017-07-22T08:35:12+00:00" }, { @@ -931,6 +960,9 @@ "singularize", "string" ], + "support": { + "source": "https://github.com/doctrine/inflector/tree/master" + }, "time": "2017-07-22T12:18:28+00:00" }, { @@ -991,6 +1023,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.0.2" + }, "time": "2019-06-08T11:03:04+00:00" }, { @@ -2010,17 +2046,17 @@ }, { "name": "drupal/colorbox", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/colorbox.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "73bfc74e9afd294e3d3aded3622ad9cb9de6b75c" + "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "64c7290be86fe1d3bf80dcf4003a37b3698bba50" }, "require": { "drupal/core": "^8.8 || ^9" @@ -2031,8 +2067,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1587025715", + "version": "8.x-1.7", + "datestamp": "1614960641", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2046,7 +2082,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0+" + "GPL-2.0-or-later" ], "authors": [ { @@ -2744,18 +2780,15 @@ "lib/Drupal/Core/Site/Settings.php" ] }, - "scripts": { - "pre-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::preAutoloadDump" - ], - "post-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::ensureHtaccess" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], - "description": "Drupal is an open source content management platform powering millions of websites and applications." + "description": "Drupal is an open source content management platform powering millions of websites and applications.", + "support": { + "source": "https://github.com/drupal/core/tree/8.9.13" + }, + "time": "2021-01-19T23:11:00+00:00" }, { "name": "drupal/core-composer-scaffold", @@ -2793,6 +2826,7 @@ "Drupal\\Composer\\Plugin\\Scaffold\\": "" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], @@ -2800,7 +2834,11 @@ "homepage": "https://www.drupal.org/project/drupal", "keywords": [ "drupal" - ] + ], + "support": { + "source": "https://github.com/drupal/core-composer-scaffold/tree/8.9.4" + }, + "time": "2020-08-07T22:30:30+00:00" }, { "name": "drupal/core-project-message", @@ -2829,6 +2867,7 @@ "Drupal\\Composer\\Plugin\\ProjectMessage\\": "." } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], @@ -2836,7 +2875,11 @@ "homepage": "https://www.drupal.org/project/drupal", "keywords": [ "drupal" - ] + ], + "support": { + "source": "https://github.com/drupal/core-project-message/tree/8.9.13" + }, + "time": "2020-08-02T22:04:49+00:00" }, { "name": "drupal/core-recommended", @@ -2913,10 +2956,15 @@ "webflo/drupal-core-strict": "*" }, "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-or-later" ], - "description": "Locked core dependencies; require this project INSTEAD OF drupal/core." + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.", + "support": { + "source": "https://github.com/drupal/core-recommended/tree/8.9.13" + }, + "time": "2021-01-19T23:11:00+00:00" }, { "name": "drupal/ctools", @@ -3222,17 +3270,17 @@ }, { "name": "drupal/ds", - "version": "3.9.0", + "version": "3.12.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/ds.git", - "reference": "8.x-3.9" + "reference": "8.x-3.12" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.9.zip", - "reference": "8.x-3.9", - "shasum": "7b419763cd87c2b3f06313489500746705a46334" + "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.12.zip", + "reference": "8.x-3.12", + "shasum": "0df49ccc28af94186a6c08aa4233f435c539b273" }, "require": { "drupal/core": "^8.8 || ^9" @@ -3244,8 +3292,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.9", - "datestamp": "1598898821", + "version": "8.x-3.12", + "datestamp": "1615995335", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3292,17 +3340,17 @@ }, { "name": "drupal/easy_breadcrumb", - "version": "1.13.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", - "reference": "8.x-1.13" + "reference": "8.x-1.15" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.13.zip", - "reference": "8.x-1.13", - "shasum": "8a8be82e1de1383eb849989b1c5790dd13270ffa" + "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.15.zip", + "reference": "8.x-1.15", + "shasum": "447c1ae946bdba97da97880aae5980f97baf720b" }, "require": { "drupal/core": "^8 || ^9" @@ -3310,8 +3358,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.13", - "datestamp": "1595445195", + "version": "8.x-1.15", + "datestamp": "1615310468", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3589,17 +3637,17 @@ }, { "name": "drupal/entity_reference_revisions", - "version": "1.8.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.8" + "reference": "8.x-1.9" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "c1279e6c683edc2dbccedba8de1505340c8a62b6" + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "e1c51bdea495eb3b458130d6f0a00c347f5637df" }, "require": { "drupal/core": "^8.7.7 || ^9" @@ -3610,8 +3658,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.8", - "datestamp": "1583961846", + "version": "8.x-1.9", + "datestamp": "1614805871", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3620,7 +3668,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0" + "GPL-2.0-or-later" ], "authors": [ { @@ -3700,17 +3748,17 @@ }, { "name": "drupal/extlink", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/extlink.git", - "reference": "8.x-1.5" + "reference": "8.x-1.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "5a2b74d12ff9e9257a0566cca8dac3872da64970" + "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "92c2794b1d5ece7978f5f6fa37f719c0b37d470e" }, "require": { "drupal/core": "^8 || ^9" @@ -3718,8 +3766,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1601382250", + "version": "8.x-1.6", + "datestamp": "1614961993", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3760,17 +3808,17 @@ }, { "name": "drupal/facets", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/facets.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "4942b62f1cae20eaface3c0627551716c8706255" + "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "5a8a1092617c4dde96f691e23300d0d436c5fcb3" }, "require": { "drupal/core": "^8.8 || ^9" @@ -3781,8 +3829,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1604397981", + "version": "8.x-1.7", + "datestamp": "1613751460", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3808,6 +3856,14 @@ { "name": "borisson_", "homepage": "https://www.drupal.org/user/2393360" + }, + { + "name": "drunken monkey", + "homepage": "https://www.drupal.org/user/205582" + }, + { + "name": "mkalkbrenner", + "homepage": "https://www.drupal.org/user/124705" } ], "description": "The Facet module allows site builders to easily create and manage faceted search interfaces.", @@ -5036,17 +5092,17 @@ }, { "name": "drupal/ludwig", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/ludwig.git", - "reference": "8.x-1.6" + "reference": "8.x-1.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "33b1fcfb794cb69a1425bf4259a7a3847301fd49" + "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "d951c3b4f76f8b0c2f8877793a392868f3537743" }, "require": { "drupal/core": "^8 || ^9" @@ -5054,8 +5110,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.6", - "datestamp": "1611958525", + "version": "8.x-1.7", + "datestamp": "1613389167", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5213,26 +5269,26 @@ }, { "name": "drupal/memcache", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/memcache.git", - "reference": "8.x-2.2" + "reference": "8.x-2.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.2.zip", - "reference": "8.x-2.2", - "shasum": "1d9876763c7ef04a9bba698ddcadbe708037fed2" + "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "b2f9715612be74f9ce55daaf838f6f17a9eb2f5a" }, "require": { - "drupal/core": "^8.8 || ^9" + "drupal/core": "^8.9 || ^9" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.2", - "datestamp": "1601053267", + "version": "8.x-2.3", + "datestamp": "1614802365", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5469,23 +5525,24 @@ }, { "name": "drupal/metatag", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "8.x-1.15" + "reference": "8.x-1.16" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.15.zip", - "reference": "8.x-1.15", - "shasum": "7658d7286fdc075ea72a6ec36aea737b1182b5d8" + "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.16.zip", + "reference": "8.x-1.16", + "shasum": "1c0028f4ff4583dc6601035657dd631c351b290c" }, "require": { "drupal/core": "^8 || ^9", "drupal/token": "^1.0" }, "require-dev": { + "drupal/devel": "^4.0", "drupal/metatag_dc": "*", "drupal/metatag_open_graph": "*", "drupal/page_manager": "4.x-dev", @@ -5495,8 +5552,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.15", - "datestamp": "1611210662", + "version": "8.x-1.16", + "datestamp": "1615820867", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5778,26 +5835,26 @@ }, { "name": "drupal/module_filter", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/module_filter.git", - "reference": "8.x-3.1" + "reference": "8.x-3.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.1.zip", - "reference": "8.x-3.1", - "shasum": "39d627ce60280ae54bcf9beae217b85cce1969e4" + "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "b5c1a5141da392340232a1ad0934b921b862e1f4" }, "require": { - "drupal/core": "~8.0" + "drupal/core": "^8 || ^9" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.1", - "datestamp": "1507650844", + "version": "8.x-3.2", + "datestamp": "1614918371", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5806,7 +5863,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0-or-later" + "GPL-2.0+" ], "authors": [ { @@ -5819,9 +5876,10 @@ } ], "description": "Filter the modules list.", - "homepage": "https://www.drupal.org/project/module_filter", + "homepage": "http://drupal.org/project/module_filter", "support": { - "source": "https://git.drupalcode.org/project/module_filter" + "source": "https://git.drupalcode.org/project/module_filter", + "issues": "https://www.drupal.org/project/issues/module_filter" } }, { @@ -6404,17 +6462,17 @@ }, { "name": "drupal/permissions_by_term", - "version": "2.29.0", + "version": "2.31.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/permissions_by_term.git", - "reference": "8.x-2.29" + "reference": "8.x-2.31" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.29.zip", - "reference": "8.x-2.29", - "shasum": "40d06fb24d271d2022481fcedc0d4e9c042b6e3b" + "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.31.zip", + "reference": "8.x-2.31", + "shasum": "b92e303e579937a6985d21751e72ad67a1d4404b" }, "require": { "drupal/core": "^8.0", @@ -6423,8 +6481,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.29", - "datestamp": "1612278248", + "version": "8.x-2.31", + "datestamp": "1614602591", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6646,26 +6704,26 @@ }, { "name": "drupal/require_login", - "version": "2.1.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/require_login.git", - "reference": "8.x-2.1" + "reference": "8.x-2.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.1.zip", - "reference": "8.x-2.1", - "shasum": "5e1e1e95597005fc132744c42547bf6d16c3a60d" + "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "b47b0bde6925d83fe48b835bfd95ed35296b5897" }, "require": { - "drupal/core": "~8.0" + "drupal/core": "^8 || ^9" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.1", - "datestamp": "1551549486", + "version": "8.x-2.4", + "datestamp": "1615474748", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6682,7 +6740,7 @@ "homepage": "https://www.drupal.org/user/459772" } ], - "description": "Require login authentication regardless of user permissions.", + "description": "Provides catch-all solution to require user authentication on pages.", "homepage": "https://www.drupal.org/project/require_login", "support": { "source": "https://git.drupalcode.org/project/require_login" @@ -7618,17 +7676,17 @@ }, { "name": "drupal/webform", - "version": "5.24.0", + "version": "5.25.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/webform.git", - "reference": "8.x-5.24" + "reference": "8.x-5.25" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip", - "reference": "8.x-5.24", - "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b" + "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.25.zip", + "reference": "8.x-5.25", + "shasum": "115f8bc21549abc080543eb772166eb4fd2a162e" }, "require": { "drupal/core": "^8.8" @@ -7669,8 +7727,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", + "version": "8.x-5.25", + "datestamp": "1614873338", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -7845,7 +7903,7 @@ }, { "name": "drupal/webform_ui", - "version": "5.24.0", + "version": "5.25.0", "require": { "drupal/core": "^8.8", "drupal/webform": "*" @@ -7853,8 +7911,8 @@ "type": "metapackage", "extra": { "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", + "version": "8.x-5.25", + "datestamp": "1614873338", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -8151,16 +8209,16 @@ }, { "name": "drush/drush", - "version": "8.4.6", + "version": "8.4.8", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900" + "reference": "b377b1896e344085d06bdbf671a465950a164d1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/4e48e11d7fe858eebe6c2fad71650c977d3f8900", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/b377b1896e344085d06bdbf671a465950a164d1e", + "reference": "b377b1896e344085d06bdbf671a465950a164d1e", "shasum": "" }, "require": { @@ -8265,7 +8323,7 @@ "forum": "http://drupal.stackexchange.com/questions/tagged/drush", "irc": "irc://irc.freenode.org/drush", "issues": "https://github.com/drush-ops/drush/issues", - "source": "https://github.com/drush-ops/drush/tree/8.4.6" + "source": "https://github.com/drush-ops/drush/tree/8.4.8" }, "funding": [ { @@ -8273,7 +8331,7 @@ "type": "github" } ], - "time": "2021-02-01T15:34:47+00:00" + "time": "2021-03-22T15:27:55+00:00" }, { "name": "easyrdf/easyrdf", @@ -8335,6 +8393,12 @@ "rdfa", "sparql" ], + "support": { + "forum": "http://groups.google.com/group/easyrdf/", + "irc": "irc://chat.freenode.net/easyrdf", + "issues": "http://github.com/njh/easyrdf/issues", + "source": "https://github.com/easyrdf/easyrdf/tree/0.9.1" + }, "time": "2015-02-27T09:45:49+00:00" }, { @@ -8393,6 +8457,10 @@ "validation", "validator" ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.17" + }, "time": "2020-02-13T22:36:52+00:00" }, { @@ -8456,16 +8524,16 @@ }, { "name": "gettext/gettext", - "version": "v4.8.3", + "version": "v4.8.4", "source": { "type": "git", "url": "https://github.com/php-gettext/Gettext.git", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321" + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/57ff4fb16647e78e80a5909fe3c190f1c3110321", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321", + "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", "shasum": "" }, "require": { @@ -8517,9 +8585,23 @@ "support": { "email": "oom@oscarotero.com", "issues": "https://github.com/oscarotero/Gettext/issues", - "source": "https://github.com/php-gettext/Gettext/tree/v4.8.3" + "source": "https://github.com/php-gettext/Gettext/tree/v4.8.4" }, - "time": "2020-11-18T22:35:49+00:00" + "funding": [ + { + "url": "https://paypal.me/oscarotero", + "type": "custom" + }, + { + "url": "https://github.com/oscarotero", + "type": "github" + }, + { + "url": "https://www.patreon.com/misteroom", + "type": "patreon" + } + ], + "time": "2021-03-10T19:35:49+00:00" }, { "name": "gettext/languages", @@ -8651,6 +8733,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, "time": "2020-05-25T19:35:05+00:00" }, { @@ -8702,6 +8788,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/master" + }, "time": "2016-12-20T10:07:11+00:00" }, { @@ -8773,6 +8863,10 @@ "uri", "url" ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.6.1" + }, "time": "2019-07-01T23:21:34+00:00" }, { @@ -8848,6 +8942,14 @@ "psr", "psr-7" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, "time": "2020-03-23T15:28:28+00:00" }, { @@ -8897,6 +8999,14 @@ "escaper", "laminas" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, "time": "2019-12-31T16:43:30+00:00" }, { @@ -8964,6 +9074,14 @@ "feed", "laminas" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-feed/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-feed/issues", + "rss": "https://github.com/laminas/laminas-feed/releases.atom", + "source": "https://github.com/laminas/laminas-feed" + }, "time": "2020-03-29T12:36:29+00:00" }, { @@ -9014,6 +9132,14 @@ "laminas", "stdlib" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-stdlib/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-stdlib/issues", + "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", + "source": "https://github.com/laminas/laminas-stdlib" + }, "time": "2019-12-31T17:51:15+00:00" }, { @@ -9066,6 +9192,12 @@ "laminas", "zf" ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, "funding": [ { "url": "https://funding.communitybridge.org/projects/laminas-project", @@ -9196,6 +9328,10 @@ "serializer", "xml" ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.x" + }, "time": "2017-09-04T12:26:28+00:00" }, { @@ -9297,6 +9433,11 @@ "pseudorandom", "random" ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, "time": "2018-07-02T15:55:56+00:00" }, { @@ -9363,6 +9504,10 @@ "archive", "tar" ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Archive_Tar", + "source": "https://github.com/pear/Archive_Tar" + }, "funding": [ { "url": "https://github.com/mrook", @@ -9420,6 +9565,10 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt", + "source": "https://github.com/pear/Console_Getopt" + }, "time": "2019-11-20T18:27:48+00:00" }, { @@ -9523,6 +9672,10 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR", + "source": "https://github.com/pear/pear-core-minimal" + }, "time": "2019-11-19T19:00:24+00:00" }, { @@ -9578,6 +9731,10 @@ "keywords": [ "exception" ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception", + "source": "https://github.com/pear/PEAR_Exception" + }, "time": "2019-12-10T10:24:42+00:00" }, { @@ -9743,16 +9900,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.2.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f" + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", "shasum": "" }, "require": { @@ -9807,7 +9964,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.3.0" }, "funding": [ { @@ -9815,7 +9972,7 @@ "type": "github" } ], - "time": "2020-11-25T15:24:57+00:00" + "time": "2021-02-19T15:28:08+00:00" }, { "name": "psr/container", @@ -9864,6 +10021,10 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+00:00" }, { @@ -9914,6 +10075,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -9961,20 +10125,23 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, "time": "2020-03-23T09:12:05+00:00" }, { "name": "psy/psysh", - "version": "v0.10.6", + "version": "v0.10.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3" + "reference": "a395af46999a12006213c0c8346c9445eb31640c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6f990c19f91729de8b31e639d6e204ea59f19cf3", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c", + "reference": "a395af46999a12006213c0c8346c9445eb31640c", "shasum": "" }, "require": { @@ -10035,9 +10202,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.6" + "source": "https://github.com/bobthecow/psysh/tree/v0.10.7" }, - "time": "2021-01-18T15:53:43+00:00" + "time": "2021-03-14T02:14:56+00:00" }, { "name": "ralouphie/getallheaders", @@ -10077,6 +10244,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { @@ -10551,16 +10722,16 @@ }, { "name": "simplesamlphp/simplesamlphp-module-authorize", - "version": "v0.9.2", + "version": "v0.9.3", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4" + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/0593bfcb84fca9d9133f415246ab8ca51b412c92", + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92", "shasum": "" }, "require": { @@ -10579,7 +10750,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0-or-later" + "LGPL-2.1-or-later" ], "authors": [ { @@ -10596,7 +10767,7 @@ "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues", "source": "https://github.com/tvdijen/simplesamlphp-module-authorize" }, - "time": "2020-02-25T15:16:57+00:00" + "time": "2021-03-24T10:37:17+00:00" }, { "name": "simplesamlphp/simplesamlphp-module-authtwitter", @@ -11069,6 +11240,10 @@ "discovery", "simplesamlphp" ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-discopower/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-discopower" + }, "time": "2019-12-13T07:51:43+00:00" }, { @@ -11992,6 +12167,10 @@ "keywords": [ "stack" ], + "support": { + "issues": "https://github.com/stackphp/builder/issues", + "source": "https://github.com/stackphp/builder/tree/master" + }, "time": "2017-11-18T14:57:29+00:00" }, { @@ -12051,6 +12230,10 @@ "database", "routing" ], + "support": { + "issues": "https://github.com/symfony-cmf/routing/issues", + "source": "https://github.com/symfony-cmf/routing/tree/1.4" + }, "time": "2017-05-09T08:10:41+00:00" }, { @@ -12107,6 +12290,9 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/class-loader/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12125,16 +12311,16 @@ }, { "name": "symfony/config", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802" + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2c4c7827a7e143f5cf375666641b0f448eab8802", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802", + "url": "https://api.github.com/repos/symfony/config/zipball/98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", "shasum": "" }, "require": { @@ -12181,7 +12367,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v4.4.19" + "source": "https://github.com/symfony/config/tree/v4.4.20" }, "funding": [ { @@ -12197,7 +12383,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-22T15:36:50+00:00" }, { "name": "symfony/console", @@ -12269,6 +12455,9 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12339,6 +12528,9 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12424,6 +12616,9 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12501,6 +12696,9 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12519,16 +12717,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/710d364200997a5afde34d9fe57bd52f3cc1e108", + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108", "shasum": "" }, "require": { @@ -12561,7 +12759,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.3" + "source": "https://github.com/symfony/filesystem/tree/v5.2.4" }, "funding": [ { @@ -12577,20 +12775,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:01:46+00:00" + "time": "2021-02-12T10:38:38+00:00" }, { "name": "symfony/finder", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6" + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/25d79cfccfc12e84e7a63a248c3f0720fdd92db6", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6", + "url": "https://api.github.com/repos/symfony/finder/zipball/2543795ab1570df588b9bbd31e1a2bd7037b94f6", + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6", "shasum": "" }, "require": { @@ -12622,7 +12820,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.19" + "source": "https://github.com/symfony/finder/tree/v4.4.20" }, "funding": [ { @@ -12638,7 +12836,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-12T10:48:09+00:00" }, { "name": "symfony/http-foundation", @@ -12692,6 +12890,9 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12796,6 +12997,9 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v3.4.44" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12868,6 +13072,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -12941,6 +13148,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13017,6 +13227,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13090,6 +13303,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13160,6 +13376,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.17.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13233,6 +13452,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php70/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13302,6 +13524,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13320,7 +13545,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -13383,7 +13608,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" }, "funding": [ { @@ -13451,6 +13676,9 @@ "polyfill", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-util/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13514,6 +13742,9 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13591,6 +13822,10 @@ "psr-17", "psr-7" ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v1.1.2" + }, "time": "2019-04-03T17:09:40+00:00" }, { @@ -13667,6 +13902,9 @@ "uri", "url" ], + "support": { + "source": "https://github.com/symfony/routing/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13760,6 +13998,9 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13844,6 +14085,9 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13944,6 +14188,9 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/3.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -13962,7 +14209,7 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -14031,7 +14278,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.19" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.20" }, "funding": [ { @@ -14106,6 +14353,9 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v3.4.41" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -14244,6 +14494,10 @@ "keywords": [ "templating" ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/1.x" + }, "time": "2020-02-11T05:59:23+00:00" }, { @@ -14294,6 +14548,10 @@ "security", "stream-wrapper" ], + "support": { + "issues": "https://github.com/TYPO3/phar-stream-wrapper/issues", + "source": "https://github.com/TYPO3/phar-stream-wrapper/tree/master" + }, "time": "2019-12-10T11:53:27+00:00" }, { @@ -14388,6 +14646,10 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.5.0" + }, "time": "2019-08-24T08:43:50+00:00" }, { @@ -14490,38 +14752,38 @@ }, { "name": "wikimedia/composer-merge-plugin", - "version": "v1.4.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100" + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "php": ">=5.3.2" + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" }, "require-dev": { - "composer/composer": "~1.0.0", - "jakub-onderka/php-parallel-lint": "~0.8", - "phpunit/phpunit": "~4.8|~5.0", - "squizlabs/php_codesniffer": "~2.1.0" + "composer/composer": "^1.1||^2.0", + "php-parallel-lint/php-parallel-lint": "~1.1.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.5.4" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.x-dev" }, - "class": "Wikimedia\\Composer\\MergePlugin" + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" }, "autoload": { "psr-4": { - "Wikimedia\\Composer\\": "src/" + "Wikimedia\\Composer\\Merge\\V2\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -14535,7 +14797,11 @@ } ], "description": "Composer plugin to merge multiple composer.json files", - "time": "2017-04-25T02:31:25+00:00" + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.0.1" + }, + "time": "2021-02-24T05:28:06+00:00" } ], "packages-dev": [], @@ -14558,5 +14824,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 03b9bb9c40cb86c2c2bbec2ce6ff0ddce9ad586c..247294d66ee04633486c9da28b94241e1f7c4c31 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -37,11 +37,13 @@ * * @author Fabien Potencier <fabien@symfony.com> * @author Jordi Boggiano <j.boggiano@seld.be> - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { + private $vendorDir; + // PSR-4 private $prefixLengthsPsr4 = array(); private $prefixDirsPsr4 = array(); @@ -57,6 +59,13 @@ class ClassLoader private $missingClasses = array(); private $apcuPrefix; + private static $registeredLoaders = array(); + + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -300,6 +309,17 @@ public function getApcuPrefix() public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } } /** @@ -308,6 +328,10 @@ public function register($prepend = false) public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } } /** @@ -367,6 +391,16 @@ public function findFile($class) return $file; } + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + private function findFileWithExtension($class, $ext) { // PSR-4 lookup diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 8e2921eac9ecc6be8ae466987f8d8f6ea9bc68cd..b9c973bc4f7f2b1849b0d1c1e803ce862e7349fd 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -1,25 +1,36 @@ <?php +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Composer; +use Composer\Autoload\ClassLoader; use Composer\Semver\VersionParser; - - - - - +/** + * This class is copied in every Composer installed project and available to all + * + * To require it's presence, you can require `composer-runtime-api ^2.0` + */ class InstalledVersions { -private static $installed = array ( + private static $installed = array ( 'root' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', 'name' => 'drupal/recommended-project', ), 'versions' => @@ -184,6 +195,15 @@ class InstalledVersions ), 'reference' => '8.x-2.4', ), + 'drupal/adminimal_theme' => + array ( + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.6', + ), 'drupal/aggregator' => array ( 'replaced' => @@ -288,14 +308,32 @@ class InstalledVersions ), 'reference' => '8.x-1.1', ), + 'drupal/cern-adminimal-subtheme' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'a2ed5628d532fccb54abbeaf063db3944784bd76', + ), + 'drupal/cern-base-theme' => + array ( + 'pretty_version' => '2.6.6', + 'version' => '2.6.6.0', + 'aliases' => + array ( + ), + 'reference' => 'cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3', + ), 'drupal/cern-cds-media' => array ( - 'pretty_version' => '2.1.3', - 'version' => '2.1.3.0', + 'pretty_version' => '2.1.4', + 'version' => '2.1.4.0', 'aliases' => array ( ), - 'reference' => '57ba9f56ce31d754e1d89117fcdd65ae816ce22c', + 'reference' => '211fb1be8dbb83df9dd791b6f75d8798bb99f290', ), 'drupal/cern-components' => array ( @@ -308,12 +346,12 @@ class InstalledVersions ), 'drupal/cern-dev-status' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', 'aliases' => array ( ), - 'reference' => '50a2dcafc5ba1d130dd270cff17718f03e4cc3b5', + 'reference' => 'faba2b40d7f34d718f0826dbb38250e42881e71a', ), 'drupal/cern-display-formats' => array ( @@ -324,23 +362,41 @@ class InstalledVersions ), 'reference' => '57b5b7cc346f4094359efbb53f9cb21cfedbaaf3', ), + 'drupal/cern-drupal-welcome-message-block' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6', + ), 'drupal/cern-full-html-format' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', 'aliases' => array ( ), - 'reference' => '862c0ffe8ed690dc622d72d22292c83f42c77bb6', + 'reference' => '4e4a15aa77576abadb8639f537e31d31edbc09a6', + ), + 'drupal/cern-indico-feeds' => + array ( + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', + 'aliases' => + array ( + ), + 'reference' => '8478ce54ec7267c82e3370c5e35642d8e0c11534', ), 'drupal/cern-landing-page' => array ( - 'pretty_version' => '2.2.3', - 'version' => '2.2.3.0', + 'pretty_version' => '2.2.4', + 'version' => '2.2.4.0', 'aliases' => array ( ), - 'reference' => '7f2e2fae22215d2f1b886eb677e9dafdecdc9033', + 'reference' => 'a6aa2903393d64b341900aa65c3e160afd39752f', ), 'drupal/cern-loading' => array ( @@ -353,21 +409,48 @@ class InstalledVersions ), 'drupal/cern-paragraph-types' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', + 'aliases' => + array ( + ), + 'reference' => '5d9bd43e424dc7865ccd564544a1e07045f5c111', + ), + 'drupal/cern-profile-displayname' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '1392ffebc377e627a22b6a817f2c342d126b93f2', + ), + 'drupal/cern-theme' => + array ( + 'pretty_version' => '2.6.11', + 'version' => '2.6.11.0', 'aliases' => array ( ), - 'reference' => 'c62b7f8d71029a6cd6535ef87d465e5e858f74a5', + 'reference' => '38332c5687938b4c9368a05693071c884da02d14', ), 'drupal/cern-toolbar' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', + 'aliases' => + array ( + ), + 'reference' => 'ab38a97568bfe8e7f985bde28fdfd847b89aa685', + ), + 'drupal/cern-webcast-feeds' => + array ( + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', 'aliases' => array ( ), - 'reference' => '51e6b5293d8628c03c124c46b1b81e972279393c', + 'reference' => '4f255383eec3c97d2b9de1c0bae98d23b16e0076', ), 'drupal/ckeditor' => array ( @@ -426,12 +509,12 @@ class InstalledVersions ), 'drupal/colorbox' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/colorbutton' => array ( @@ -808,12 +891,12 @@ class InstalledVersions ), 'drupal/ds' => array ( - 'pretty_version' => '3.9.0', - 'version' => '3.9.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.9', + 'reference' => '8.x-3.12', ), 'drupal/dynamic_page_cache' => array ( @@ -824,12 +907,21 @@ class InstalledVersions ), 'drupal/easy_breadcrumb' => array ( - 'pretty_version' => '1.13.0', - 'version' => '1.13.0.0', + 'pretty_version' => '1.15.0', + 'version' => '1.15.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.13', + 'reference' => '8.x-1.15', + ), + 'drupal/easychart' => + array ( + 'pretty_version' => '3.4.0', + 'version' => '3.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-3.4', ), 'drupal/editor' => array ( @@ -865,12 +957,12 @@ class InstalledVersions ), 'drupal/entity_reference_revisions' => array ( - 'pretty_version' => '1.8.0', - 'version' => '1.8.0.0', + 'pretty_version' => '1.9.0', + 'version' => '1.9.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.8', + 'reference' => '8.x-1.9', ), 'drupal/externalauth' => array ( @@ -883,21 +975,21 @@ class InstalledVersions ), 'drupal/extlink' => array ( - 'pretty_version' => '1.5.0', - 'version' => '1.5.0.0', + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.5', + 'reference' => '8.x-1.6', ), 'drupal/facets' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/fast_404' => array ( @@ -910,12 +1002,12 @@ class InstalledVersions ), 'drupal/features' => array ( - 'pretty_version' => '3.11.0', - 'version' => '3.11.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.11', + 'reference' => '8.x-3.12', ), 'drupal/feeds' => array ( @@ -1199,12 +1291,12 @@ class InstalledVersions ), 'drupal/ludwig' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/mailsystem' => array ( @@ -1240,12 +1332,12 @@ class InstalledVersions ), 'drupal/memcache' => array ( - 'pretty_version' => '2.2.0', - 'version' => '2.2.0.0', + 'pretty_version' => '2.3.0', + 'version' => '2.3.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.2', + 'reference' => '8.x-2.3', ), 'drupal/menu_block' => array ( @@ -1290,12 +1382,12 @@ class InstalledVersions ), 'drupal/metatag' => array ( - 'pretty_version' => '1.15.0', - 'version' => '1.15.0.0', + 'pretty_version' => '1.16.0', + 'version' => '1.16.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.15', + 'reference' => '8.x-1.16', ), 'drupal/migrate' => array ( @@ -1370,12 +1462,12 @@ class InstalledVersions ), 'drupal/module_filter' => array ( - 'pretty_version' => '3.1.0', - 'version' => '3.1.0.0', + 'pretty_version' => '3.2.0', + 'version' => '3.2.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.1', + 'reference' => '8.x-3.2', ), 'drupal/node' => array ( @@ -1393,6 +1485,15 @@ class InstalledVersions ), 'reference' => '8.x-1.4', ), + 'drupal/openid_connect' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.0', + ), 'drupal/options' => array ( 'replaced' => @@ -1477,12 +1578,12 @@ class InstalledVersions ), 'drupal/permissions_by_term' => array ( - 'pretty_version' => '2.29.0', - 'version' => '2.29.0.0', + 'pretty_version' => '2.31.0', + 'version' => '2.31.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.29', + 'reference' => '8.x-2.31', ), 'drupal/piwik' => array ( @@ -1518,12 +1619,12 @@ class InstalledVersions ), 'drupal/recommended-project' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', ), 'drupal/redirect' => array ( @@ -1536,12 +1637,12 @@ class InstalledVersions ), 'drupal/require_login' => array ( - 'pretty_version' => '2.1.0', - 'version' => '2.1.0.0', + 'pretty_version' => '2.4.0', + 'version' => '2.4.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.1', + 'reference' => '8.x-2.4', ), 'drupal/responsive_image' => array ( @@ -1665,6 +1766,15 @@ class InstalledVersions 0 => '8.9.13', ), ), + 'drupal/sticky' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.1', + ), 'drupal/syslog' => array ( 'replaced' => @@ -1824,12 +1934,12 @@ class InstalledVersions ), 'drupal/webform' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), - 'reference' => '8.x-5.24', + 'reference' => '8.x-5.25', ), 'drupal/webform_analysis' => array ( @@ -1851,8 +1961,8 @@ class InstalledVersions ), 'drupal/webform_ui' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), @@ -1901,12 +2011,12 @@ class InstalledVersions ), 'drush/drush' => array ( - 'pretty_version' => '8.4.6', - 'version' => '8.4.6.0', + 'pretty_version' => '8.4.8', + 'version' => '8.4.8.0', 'aliases' => array ( ), - 'reference' => '4e48e11d7fe858eebe6c2fad71650c977d3f8900', + 'reference' => 'b377b1896e344085d06bdbf671a465950a164d1e', ), 'easyrdf/easyrdf' => array ( @@ -1937,12 +2047,12 @@ class InstalledVersions ), 'gettext/gettext' => array ( - 'pretty_version' => 'v4.8.3', - 'version' => '4.8.3.0', + 'pretty_version' => 'v4.8.4', + 'version' => '4.8.4.0', 'aliases' => array ( ), - 'reference' => '57ff4fb16647e78e80a5909fe3c190f1c3110321', + 'reference' => '58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1', ), 'gettext/languages' => array ( @@ -2135,12 +2245,12 @@ class InstalledVersions ), 'phpmailer/phpmailer' => array ( - 'pretty_version' => 'v6.2.0', - 'version' => '6.2.0.0', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', 'aliases' => array ( ), - 'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f', + 'reference' => '4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb', ), 'psr/container' => array ( @@ -2192,12 +2302,12 @@ class InstalledVersions ), 'psy/psysh' => array ( - 'pretty_version' => 'v0.10.6', - 'version' => '0.10.6.0', + 'pretty_version' => 'v0.10.7', + 'version' => '0.10.7.0', 'aliases' => array ( ), - 'reference' => '6f990c19f91729de8b31e639d6e204ea59f19cf3', + 'reference' => 'a395af46999a12006213c0c8346c9445eb31640c', ), 'ralouphie/getallheaders' => array ( @@ -2303,12 +2413,12 @@ class InstalledVersions ), 'simplesamlphp/simplesamlphp-module-authorize' => array ( - 'pretty_version' => 'v0.9.2', - 'version' => '0.9.2.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => 'c2607a5252ee1256b50ce7795e35513b116998d4', + 'reference' => '0593bfcb84fca9d9133f415246ab8ca51b412c92', ), 'simplesamlphp/simplesamlphp-module-authtwitter' => array ( @@ -2384,12 +2494,12 @@ class InstalledVersions ), 'simplesamlphp/simplesamlphp-module-discopower' => array ( - 'pretty_version' => 'v0.9.1', - 'version' => '0.9.1.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => '006c0617610f1bae11cf4d17e8ce4c509239a60e', + 'reference' => 'c892926e8186d0a2c638f7032dfc30540c1f92fb', ), 'simplesamlphp/simplesamlphp-module-exampleattributeserver' => array ( @@ -2573,12 +2683,12 @@ class InstalledVersions ), 'symfony/config' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '2c4c7827a7e143f5cf375666641b0f448eab8802', + 'reference' => '98606c6fa1a8f55ff964ccdd704275bf5b9f71b3', ), 'symfony/console' => array ( @@ -2618,21 +2728,21 @@ class InstalledVersions ), 'symfony/filesystem' => array ( - 'pretty_version' => 'v5.2.3', - 'version' => '5.2.3.0', + 'pretty_version' => 'v5.2.4', + 'version' => '5.2.4.0', 'aliases' => array ( ), - 'reference' => '262d033b57c73e8b59cd6e68a45c528318b15038', + 'reference' => '710d364200997a5afde34d9fe57bd52f3cc1e108', ), 'symfony/finder' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '25d79cfccfc12e84e7a63a248c3f0720fdd92db6', + 'reference' => '2543795ab1570df588b9bbd31e1a2bd7037b94f6', ), 'symfony/http-foundation' => array ( @@ -2717,8 +2827,8 @@ class InstalledVersions ), 'symfony/polyfill-php80' => array ( - 'pretty_version' => 'v1.22.0', - 'version' => '1.22.0.0', + 'pretty_version' => 'v1.22.1', + 'version' => '1.22.1.0', 'aliases' => array ( ), @@ -2789,8 +2899,8 @@ class InstalledVersions ), 'symfony/var-dumper' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), @@ -2843,12 +2953,12 @@ class InstalledVersions ), 'webmozart/assert' => array ( - 'pretty_version' => '1.9.1', - 'version' => '1.9.1.0', + 'pretty_version' => '1.5.0', + 'version' => '1.5.0.0', 'aliases' => array ( ), - 'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389', + 'reference' => '88e6d84706d09a236046d686bbea96f07b3a34f4', ), 'webmozart/path-util' => array ( @@ -2870,12 +2980,12 @@ class InstalledVersions ), 'wikimedia/composer-merge-plugin' => array ( - 'pretty_version' => 'dev-feature/composer-v2', - 'version' => 'dev-feature/composer-v2', + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', 'aliases' => array ( ), - 'reference' => '3f4c1e914be5ba7b9e84434a69f3bb835bff2ac1', + 'reference' => '8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912', ), 'zendframework/zend-diactoros' => array ( @@ -2907,175 +3017,238 @@ class InstalledVersions ), ), ); - - - - - - - -public static function getInstalledPackages() -{ -return array_keys(self::$installed['versions']); -} - - - - - - - - - -public static function isInstalled($packageName) -{ -return isset(self::$installed['versions'][$packageName]); -} - - - - - - - - - - - - - - -public static function satisfies(VersionParser $parser, $packageName, $constraint) -{ -$constraint = $parser->parseConstraints($constraint); -$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - -return $provided->matches($constraint); -} - - - - - - - - - - -public static function getVersionRanges($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -$ranges = array(); -if (isset(self::$installed['versions'][$packageName]['pretty_version'])) { -$ranges[] = self::$installed['versions'][$packageName]['pretty_version']; -} -if (array_key_exists('aliases', self::$installed['versions'][$packageName])) { -$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']); -} -if (array_key_exists('replaced', self::$installed['versions'][$packageName])) { -$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']); -} -if (array_key_exists('provided', self::$installed['versions'][$packageName])) { -$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']); -} - -return implode(' || ', $ranges); -} - - - - - -public static function getVersion($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -if (!isset(self::$installed['versions'][$packageName]['version'])) { -return null; -} - -return self::$installed['versions'][$packageName]['version']; -} - - - - - -public static function getPrettyVersion($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) { -return null; -} - -return self::$installed['versions'][$packageName]['pretty_version']; -} - - - - - -public static function getReference($packageName) -{ -if (!isset(self::$installed['versions'][$packageName])) { -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - -if (!isset(self::$installed['versions'][$packageName]['reference'])) { -return null; -} - -return self::$installed['versions'][$packageName]['reference']; -} - - - - - -public static function getRootPackage() -{ -return self::$installed['root']; -} - - - - - - - -public static function getRawData() -{ -return self::$installed; -} - - - - - - - - - - - - - - - - - - - -public static function reload($data) -{ -self::$installed = $data; -} + private static $canGetVendors; + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list<string> + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @return bool + */ + public static function isInstalled($packageName) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return true; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>} + */ + public static function getRawData() + { + return self::$installed; + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + } + } + } + + $installed[] = self::$installed; + + return $installed; + } } diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 2bd7e6bbfc2b1b442436fa9969f5488c469cb1ba..5d20f95bbaba54e91bd3e8d9e51c8583ad50d0fc 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -9,6 +9,7 @@ 'ArithmeticError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php', 'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php', 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'Console_Table' => $vendorDir . '/pear/console_table/Table.php', 'DivisionByZeroError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php', 'Dompdf\\Cpdf' => $vendorDir . '/dompdf/dompdf/lib/Cpdf.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 860aa7be93eadbbec40e4d822bdd1f14a6cad771..9062cba0393f4e35946f3c32ba1c7bbf436d5878 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -8,7 +8,7 @@ return array( 'lsolesen\\pel\\' => array($vendorDir . '/lsolesen/pel/src'), 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), - 'Wikimedia\\Composer\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'), + 'Wikimedia\\Composer\\Merge\\V2\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'), 'WhiteHat101\\Crypt\\' => array($vendorDir . '/whitehat101/apr1-md5/src'), 'Webmozart\\PathUtil\\' => array($vendorDir . '/webmozart/path-util/src'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 2d6efe2dcf34a4d917ecbb7a3f2e89d4c4771f8b..7e98a855ac2c825f7b603d96567032ab6b5f66b5 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -22,8 +22,10 @@ public static function getLoader() return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInit26b9ab19422811c9528189a39d74c975', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); spl_autoload_unregister(array('ComposerAutoloaderInit26b9ab19422811c9528189a39d74c975', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; @@ -32,7 +34,7 @@ public static function getLoader() $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; + require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit26b9ab19422811c9528189a39d74c975::getInitializer($loader)); } else { diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 0f8a042fbd86ec507ebd62cead530482442bd035..eb7b2ff8d196c9616dc24ab481311cc55673baf9 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -52,7 +52,7 @@ class ComposerStaticInit26b9ab19422811c9528189a39d74c975 ), 'W' => array ( - 'Wikimedia\\Composer\\' => 19, + 'Wikimedia\\Composer\\Merge\\V2\\' => 28, 'WhiteHat101\\Crypt\\' => 18, 'Webmozart\\PathUtil\\' => 19, 'Webmozart\\Assert\\' => 17, @@ -208,7 +208,7 @@ class ComposerStaticInit26b9ab19422811c9528189a39d74c975 array ( 0 => __DIR__ . '/..' . '/dnoegel/php-xdg-base-dir/src', ), - 'Wikimedia\\Composer\\' => + 'Wikimedia\\Composer\\Merge\\V2\\' => array ( 0 => __DIR__ . '/..' . '/wikimedia/composer-merge-plugin/src', ), @@ -707,6 +707,7 @@ class ComposerStaticInit26b9ab19422811c9528189a39d74c975 'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php', 'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php', 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'Console_Table' => __DIR__ . '/..' . '/pear/console_table/Table.php', 'DivisionByZeroError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php', 'Dompdf\\Cpdf' => __DIR__ . '/..' . '/dompdf/dompdf/lib/Cpdf.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 90a6672e292d6cc5c6d2547a95a3f6e153c34428..dc3c138cdfd2be34b4f8eae538858ae8ded8f879 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,14997 +1,15264 @@ -[ - { - "name": "asm89/stack-cors", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/asm89/stack-cors.git", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", - "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8.10", - "squizlabs/php_codesniffer": "^2.3" - }, - "time": "2019-12-24T22:41:47+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Asm89\\Stack\\": "src/Asm89/Stack/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cross-origin resource sharing library and stack middleware", - "homepage": "https://github.com/asm89/stack-cors", - "keywords": [ - "cors", - "stack" - ] - }, - { - "name": "composer/installers", - "version": "v1.10.0", - "version_normalized": "1.10.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/installers.git", - "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", - "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" - }, - "require-dev": { - "composer/composer": "1.6.* || ^2.0", - "composer/semver": "^1 || ^3", - "phpstan/phpstan": "^0.12.55", - "phpstan/phpstan-phpunit": "^0.12.16", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.3" - }, - "time": "2021-01-14T11:07:16+00:00", - "type": "composer-plugin", - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Installers\\": "src/Composer/Installers" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "description": "A multi-framework Composer library installer", - "homepage": "https://composer.github.io/installers/", - "keywords": [ - "Craft", - "Dolibarr", - "Eliasis", - "Hurad", - "ImageCMS", - "Kanboard", - "Lan Management System", - "MODX Evo", - "MantisBT", - "Mautic", - "Maya", - "OXID", - "Plentymarkets", - "Porto", - "RadPHP", - "SMF", - "Starbug", - "Thelia", - "Whmcs", - "WolfCMS", - "agl", - "aimeos", - "annotatecms", - "attogram", - "bitrix", - "cakephp", - "chef", - "cockpit", - "codeigniter", - "concrete5", - "croogo", - "dokuwiki", - "drupal", - "eZ Platform", - "elgg", - "expressionengine", - "fuelphp", - "grav", - "installer", - "itop", - "joomla", - "known", - "kohana", - "laravel", - "lavalite", - "lithium", - "magento", - "majima", - "mako", - "mediawiki", - "modulework", - "modx", - "moodle", - "osclass", - "phpbb", - "piwik", - "ppi", - "processwire", - "puppet", - "pxcms", - "reindex", - "roundcube", - "shopware", - "silverstripe", - "sydes", - "sylius", - "symfony", - "typo3", - "wordpress", - "yawik", - "zend", - "zikula" - ], - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ] - }, - { - "name": "composer/semver", - "version": "1.5.1", - "version_normalized": "1.5.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" - }, - "time": "2020-01-13T12:06:48+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "consolidation/annotated-command", - "version": "2.12.1", - "version_normalized": "2.12.1.0", - "source": { - "type": "git", - "url": "https://github.com/consolidation/annotated-command.git", - "reference": "0ee361762df2274f360c085e3239784a53f850b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5", - "reference": "0ee361762df2274f360c085e3239784a53f850b5", - "shasum": "" - }, - "require": { - "consolidation/output-formatters": "^3.5.1", - "php": ">=5.4.5", - "psr/log": "^1", - "symfony/console": "^2.8|^3|^4", - "symfony/event-dispatcher": "^2.5|^3|^4", - "symfony/finder": "^2.5|^3|^4|^5" - }, - "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", - "phpunit/phpunit": "^6", - "squizlabs/php_codesniffer": "^2.7" - }, - "time": "2020-10-11T04:30:03+00:00", - "type": "library", - "extra": { - "scenarios": { - "finder5": { - "require": { - "symfony/finder": "^5" +{ + "packages": [ + { + "name": "asm89/stack-cors", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", + "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8.10", + "squizlabs/php_codesniffer": "^2.3" + }, + "time": "2019-12-24T22:41:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/Asm89/Stack/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "install-path": "../asm89/stack-cors" + }, + { + "name": "composer/installers", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", + "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0" + }, + "replace": { + "roundcube/plugin-installer": "*", + "shama/baton": "*" + }, + "require-dev": { + "composer/composer": "1.6.* || ^2.0", + "composer/semver": "^1 || ^3", + "phpstan/phpstan": "^0.12.55", + "phpstan/phpstan-phpunit": "^0.12.16", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.3" + }, + "time": "2021-01-14T11:07:16+00:00", + "type": "composer-plugin", + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Composer\\Installers\\": "src/Composer/Installers" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "https://composer.github.io/installers/", + "keywords": [ + "Craft", + "Dolibarr", + "Eliasis", + "Hurad", + "ImageCMS", + "Kanboard", + "Lan Management System", + "MODX Evo", + "MantisBT", + "Mautic", + "Maya", + "OXID", + "Plentymarkets", + "Porto", + "RadPHP", + "SMF", + "Starbug", + "Thelia", + "Whmcs", + "WolfCMS", + "agl", + "aimeos", + "annotatecms", + "attogram", + "bitrix", + "cakephp", + "chef", + "cockpit", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "eZ Platform", + "elgg", + "expressionengine", + "fuelphp", + "grav", + "installer", + "itop", + "joomla", + "known", + "kohana", + "laravel", + "lavalite", + "lithium", + "magento", + "majima", + "mako", + "mediawiki", + "modulework", + "modx", + "moodle", + "osclass", + "phpbb", + "piwik", + "ppi", + "processwire", + "puppet", + "pxcms", + "reindex", + "roundcube", + "shopware", + "silverstripe", + "sydes", + "sylius", + "symfony", + "typo3", + "wordpress", + "yawik", + "zend", + "zikula" + ], + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "install-path": "./installers" + }, + { + "name": "composer/semver", + "version": "1.5.1", + "version_normalized": "1.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "time": "2020-01-13T12:06:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "./semver" + }, + { + "name": "consolidation/annotated-command", + "version": "2.12.1", + "version_normalized": "2.12.1.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "0ee361762df2274f360c085e3239784a53f850b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5", + "reference": "0ee361762df2274f360c085e3239784a53f850b5", + "shasum": "" + }, + "require": { + "consolidation/output-formatters": "^3.5.1", + "php": ">=5.4.5", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4|^5" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2.7" + }, + "time": "2020-10-11T04:30:03+00:00", + "type": "library", + "extra": { + "scenarios": { + "finder5": { + "require": { + "symfony/finder": "^5" + }, + "config": { + "platform": { + "php": "7.2.5" + } + } }, - "config": { - "platform": { - "php": "7.2.5" + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" } - } - }, - "symfony4": { - "require": { - "symfony/console": "^4.0" }, - "config": { - "platform": { - "php": "7.1.3" + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } } } }, - "symfony2": { - "require": { - "symfony/console": "^2.8" + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "support": { + "issues": "https://github.com/consolidation/annotated-command/issues", + "source": "https://github.com/consolidation/annotated-command/tree/2.12.1" + }, + "install-path": "../consolidation/annotated-command" + }, + { + "name": "consolidation/output-formatters", + "version": "3.5.1", + "version_normalized": "3.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "0d38f13051ef05c223a2bb8e962d668e24785196" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196", + "reference": "0d38f13051ef05c223a2bb8e962d668e24785196", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4|^5" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5.7.27", + "squizlabs/php_codesniffer": "^2.7", + "symfony/var-dumper": "^2.8|^3|^4", + "victorjonsson/markdowndocs": "^1.3" + }, + "suggest": { + "symfony/var-dumper": "For using the var_dump formatter" + }, + "time": "2020-10-11T04:15:32+00:00", + "type": "library", + "extra": { + "scenarios": { + "finder5": { + "require": { + "symfony/finder": "^5" + }, + "config": { + "platform": { + "php": "7.2.5" + } + } }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^6" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" + "symfony3": { + "require": { + "symfony/console": "^3.4", + "symfony/finder": "^3.4", + "symfony/var-dumper": "^3.4" + }, + "config": { + "platform": { + "php": "5.6.32" + } } }, - "scenario-options": { - "create-lockfile": "false" + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } } }, - "phpunit4": { - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "support": { + "issues": "https://github.com/consolidation/output-formatters/issues", + "source": "https://github.com/consolidation/output-formatters/tree/3.5.1" + }, + "install-path": "../consolidation/output-formatters" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2017-01-20T21:14:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/master" + }, + "install-path": "../dflydev/dot-access-data" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "version_normalized": "0.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "time": "2019-12-04T15:06:13+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "install-path": "../dnoegel/php-xdg-base-dir" + }, + { + "name": "doctrine/annotations", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^5.7" + }, + "time": "2017-02-24T16:22:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../doctrine/annotations" + }, + { + "name": "doctrine/cache", + "version": "v1.6.2", + "version_normalized": "1.6.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", + "shasum": "" + }, + "require": { + "php": "~5.5|~7.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", + "satooshi/php-coveralls": "~0.6" + }, + "time": "2017-07-22T12:49:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "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": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "install-path": "../doctrine/cache" + }, + { + "name": "doctrine/collections", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "time": "2017-01-03T10:49:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "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": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "install-path": "../doctrine/collections" + }, + { + "name": "doctrine/common", + "version": "v2.7.3", + "version_normalized": "2.7.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~5.6|~7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.6" + }, + "time": "2017-07-22T08:35:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "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": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "install-path": "../doctrine/common" + }, + { + "name": "doctrine/inflector", + "version": "v1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "time": "2017-07-22T12:18:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + } + }, + "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": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "install-path": "../doctrine/inflector" + }, + { + "name": "doctrine/lexer", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "time": "2019-06-08T11:03:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "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": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "install-path": "../doctrine/lexer" + }, + { + "name": "dompdf/dompdf", + "version": "v0.8.6", + "version_normalized": "0.8.6.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", + "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "^0.5.2", + "phenx/php-svg-lib": "^0.3.3", + "php": "^7.1" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "time": "2020-08-30T22:54:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/master" + }, + "install-path": "../dompdf/dompdf" + }, + { + "name": "drupal-ckeditor-libraries-group/codesnippet", + "version": "4.16.0", + "version_normalized": "4.16.0.0", + "source": { + "type": "git", + "url": "https://github.com/drupal-ckeditor-libraries-group/codesnippet.git", + "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/codesnippet/zipball/cbddc36e5873323b1c34db1542a3449bcb1ff9e7", + "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7", + "shasum": "" + }, + "time": "2021-01-25T12:06:23+00:00", + "type": "drupal-library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later", + "LGPL-2.1-or-later", + "MPL-1.1" + ], + "description": "CKEditor 4 codesnippet plugin", + "homepage": "https://ckeditor.com/cke4/addon/codesnippet", + "keywords": [ + "CKEditor", + "codesnippet", + "plugin" + ], + "support": { + "issues": "https://github.com/ckeditor/ckeditor4/issues", + "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/codesnippet" + }, + "install-path": "../../web/libraries/codesnippet" + }, + { + "name": "drupal-ckeditor-libraries-group/font", + "version": "4.13.1", + "version_normalized": "4.13.1.0", + "source": { + "type": "git", + "url": "https://github.com/drupal-ckeditor-libraries-group/font.git", + "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/font/zipball/81cbe90726319bb0a8c0c12c0a893e1e2e660c60", + "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60", + "shasum": "" + }, + "time": "2019-06-27T14:05:00+00:00", + "type": "drupal-library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later", + "LGPL-2.1-or-later", + "MPL-1.1" + ], + "description": "CKEditor 4 font plugin", + "homepage": "https://ckeditor.com/cke4/addon/font", + "keywords": [ + "CKEditor", + "font", + "plugin" + ], + "support": { + "issues": "https://github.com/ckeditor/ckeditor4/issues", + "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/font" + }, + "install-path": "../../web/libraries/font" + }, + { + "name": "drupal/admin_toolbar", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/admin_toolbar.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/admin_toolbar-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "6240047b8d91ac78f98d861ba8282af971fa0b38" + }, + "require": { + "drupal/core": "^8.8.0 || ^9.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.4", + "datestamp": "1601999178", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Consolidation\\AnnotatedCommand\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Initialize Symfony Console commands from annotated command class methods.", - "support": { - "issues": "https://github.com/consolidation/annotated-command/issues", - "source": "https://github.com/consolidation/annotated-command/tree/2.12.1" - } - }, - { - "name": "consolidation/output-formatters", - "version": "3.5.1", - "version_normalized": "3.5.1.0", - "source": { - "type": "git", - "url": "https://github.com/consolidation/output-formatters.git", - "reference": "0d38f13051ef05c223a2bb8e962d668e24785196" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196", - "reference": "0d38f13051ef05c223a2bb8e962d668e24785196", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^1.1.0", - "php": ">=5.4.0", - "symfony/console": "^2.8|^3|^4", - "symfony/finder": "^2.5|^3|^4|^5" - }, - "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", - "phpunit/phpunit": "^5.7.27", - "squizlabs/php_codesniffer": "^2.7", - "symfony/var-dumper": "^2.8|^3|^4", - "victorjonsson/markdowndocs": "^1.3" - }, - "suggest": { - "symfony/var-dumper": "For using the var_dump formatter" - }, - "time": "2020-10-11T04:15:32+00:00", - "type": "library", - "extra": { - "scenarios": { - "finder5": { - "require": { - "symfony/finder": "^5" - }, - "config": { - "platform": { - "php": "7.2.5" - } + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Wilfrid Roze (eme)", + "homepage": "https://www.drupal.org/u/eme", + "role": "Maintainer" + }, + { + "name": "Romain Jarraud (romainj)", + "homepage": "https://www.drupal.org/u/romainj", + "role": "Maintainer" + }, + { + "name": "Adrian Cid Almaguer (adriancid)", + "homepage": "https://www.drupal.org/u/adriancid", + "email": "adriancid@gmail.com", + "role": "Maintainer" + }, + { + "name": "Mohamed Anis Taktak (matio89)", + "homepage": "https://www.drupal.org/u/matio89", + "role": "Maintainer" + }, + { + "name": "fethi.krout", + "homepage": "https://www.drupal.org/user/3206765" + }, + { + "name": "matio89", + "homepage": "https://www.drupal.org/user/2320090" + }, + { + "name": "romainj", + "homepage": "https://www.drupal.org/user/370706" + } + ], + "description": "Provides a drop-down menu interface to the core Drupal Toolbar.", + "homepage": "http://drupal.org/project/admin_toolbar", + "keywords": [ + "Drupal", + "Toolbar" + ], + "support": { + "source": "https://git.drupalcode.org/project/admin_toolbar", + "issues": "https://www.drupal.org/project/issues/admin_toolbar" + }, + "install-path": "../../web/modules/contrib/admin_toolbar" + }, + { + "name": "drupal/adminimal_theme", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/adminimal_theme.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/adminimal_theme-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "89132d0853388afe8dfd11fb83c69a48d8c13413" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-theme", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1602006937", + "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": "ANDiTKO", + "homepage": "https://www.drupal.org/user/1428124" }, - "symfony4": { - "require": { - "symfony/console": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^6" - }, - "config": { - "platform": { - "php": "7.1.3" - } + { + "name": "andrey.troeglazov", + "homepage": "https://www.drupal.org/user/3145389" + }, + { + "name": "realityloop", + "homepage": "https://www.drupal.org/user/139189" + } + ], + "description": "Drupal administration theme with modern minimalist design.", + "homepage": "https://www.drupal.org/project/adminimal_theme", + "support": { + "source": "https://git.drupalcode.org/project/adminimal_theme", + "issues": "https://www.drupal.org/project/issues/adminimal_theme" + }, + "install-path": "../../web/themes/contrib/adminimal_theme" + }, + { + "name": "drupal/allowed_formats", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/allowed_formats.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/allowed_formats-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "4c3c036d7b41428d6e22b61f1219de0ab012feec" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1592909219", + "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": "floretan", + "homepage": "https://www.drupal.org/user/66163" + } + ], + "description": "Limit which text formats are available for each field instance.", + "homepage": "https://www.drupal.org/project/allowed_formats", + "support": { + "source": "https://git.drupalcode.org/project/allowed_formats" + }, + "install-path": "../../web/modules/contrib/allowed_formats" + }, + { + "name": "drupal/bootstrap", + "version": "3.23.0", + "version_normalized": "3.23.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/bootstrap.git", + "reference": "8.x-3.23" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/bootstrap-8.x-3.23.zip", + "reference": "8.x-3.23", + "shasum": "9849be667cc678a91ad29f77c2baea2cf16878bc" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-theme", + "extra": { + "drupal": { + "version": "8.x-3.23", + "datestamp": "1592175762", + "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": "Mark Carver (markcarver)", + "homepage": "https://www.drupal.org/u/markcarver", + "role": "Maintainer" }, - "symfony3": { - "require": { - "symfony/console": "^3.4", - "symfony/finder": "^3.4", - "symfony/var-dumper": "^3.4" - }, - "config": { - "platform": { - "php": "5.6.32" - } + { + "name": "John McCormick (neardark)", + "homepage": "https://www.drupal.org/u/neardark", + "role": "Co-maintainer" + }, + { + "name": "Fabiano Sant'Ana (wundo)", + "homepage": "https://www.drupal.org/u/wundo", + "role": "Co-maintainer" + } + ], + "description": "Built to use Bootstrap, a sleek, intuitive, and powerful front-end framework for faster and easier web development.", + "homepage": "https://www.drupal.org/project/bootstrap", + "support": { + "source": "https://git.drupalcode.org/project/bootstrap", + "docs": "https://drupal-bootstrap.org", + "issues": "https://www.drupal.org/project/issues/bootstrap", + "irc": "irc://irc.freenode.org/drupal-bootstrap" + }, + "install-path": "../../web/themes/contrib/bootstrap" + }, + { + "name": "drupal/captcha", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/captcha.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/captcha-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "2eaf6f00ea256652c09f785b26dc933cc5b3dd26" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1591160977", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } }, - "symfony2": { - "require": { - "symfony/console": "^2.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - }, - "scenario-options": { - "create-lockfile": "false" + "branch-alias": { + "dev-8.x-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + }, + { + "name": "elachlan", + "homepage": "https://www.drupal.org/user/1021502" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "naveenvalecha", + "homepage": "https://www.drupal.org/user/2665733" + }, + { + "name": "podarok", + "homepage": "https://www.drupal.org/user/116002" + }, + { + "name": "soxofaan", + "homepage": "https://www.drupal.org/user/41478" + }, + { + "name": "wundo", + "homepage": "https://www.drupal.org/user/25523" + } + ], + "description": "The CAPTCHA module provides this feature to virtually any user facing web form on a Drupal site.", + "homepage": "https://www.drupal.org/project/captcha", + "support": { + "source": "https://git.drupalcode.org/project/captcha", + "issues": "https://www.drupal.org/project/issues/captcha" + }, + "install-path": "../../web/modules/contrib/captcha" + }, + { + "name": "drupal/cern-adminimal-subtheme", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/adminimal_subtheme.git", + "reference": "a2ed5628d532fccb54abbeaf063db3944784bd76" + }, + "require": { + "drupal/adminimal_theme": "^1.6" + }, + "time": "2021-02-11T10:54:34+00:00", + "type": "drupal-custom-theme", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Applies overrides on the adminimal theme", + "install-path": "../../web/themes/custom/cern-adminimal-subtheme" + }, + { + "name": "drupal/cern-base-theme", + "version": "2.6.6", + "version_normalized": "2.6.6.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cernbase.git", + "reference": "cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3" + }, + "require": { + "drupal/bootstrap": "^3.23" + }, + "time": "2021-02-10T13:48:27+00:00", + "type": "drupal-custom-theme", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Base theme of all CERN Drupal themes", + "install-path": "../../web/themes/custom/cern-base-theme" + }, + { + "name": "drupal/cern-cds-media", + "version": "2.1.4", + "version_normalized": "2.1.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-cds-media.git", + "reference": "211fb1be8dbb83df9dd791b6f75d8798bb99f290" + }, + "time": "2021-02-08T09:12:29+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Provides the CERN CDS Media Plugin in the CKEditor.", + "install-path": "../../web/modules/custom/cern-cds-media" + }, + { + "name": "drupal/cern-components", + "version": "2.7.10", + "version_normalized": "2.7.10.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-components.git", + "reference": "8cc5c011dbb200e748718701212882dcda5563ff" + }, + "require": { + "drupal/cern-full-html-format": "^2.0.2", + "drupal/components": "^1.1", + "drupal/ds": "^3.9", + "drupal/field_group": "^3.1", + "drupal/twig_tweak": "^2.8", + "drupal/ui_patterns": "^1.2" + }, + "time": "2021-01-14T13:28:59+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure", + "install-path": "../../web/modules/custom/cern-components" + }, + { + "name": "drupal/cern-dev-status", + "version": "2.0.5", + "version_normalized": "2.0.5.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-dev-status.git", + "reference": "faba2b40d7f34d718f0826dbb38250e42881e71a" + }, + "time": "2021-02-08T15:54:50+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Displays a banner at the bottom of the website and applies styles according to its development status. Prevents anonymous users to access the website by checking their IP.", + "install-path": "../../web/modules/custom/cern-dev-status" + }, + { + "name": "drupal/cern-display-formats", + "version": "1.4.5", + "version_normalized": "1.4.5.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-display-formats.git", + "reference": "57b5b7cc346f4094359efbb53f9cb21cfedbaaf3" + }, + "require": { + "drupal/components": "^1.1" + }, + "time": "2021-01-14T08:51:34+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines a set of views display formats", + "install-path": "../../web/modules/custom/cern-display-formats" + }, + { + "name": "drupal/cern-drupal-welcome-message-block", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/drupal-welcome-message-block.git", + "reference": "c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6" + }, + "time": "2021-02-11T13:36:40+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Creates the welcome message block for CERN Drupal websites", + "install-path": "../../web/modules/custom/cern-drupal-welcome-message-block" + }, + { + "name": "drupal/cern-full-html-format", + "version": "2.0.4", + "version_normalized": "2.0.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-full-html-format.git", + "reference": "4e4a15aa77576abadb8639f537e31d31edbc09a6" + }, + "require": { + "drupal/ckeditor_font": "^1.1", + "drupal/colorbutton": "^1.2", + "drupal/panelbutton": "^1.3" + }, + "time": "2021-02-08T09:36:17+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Adds the CERN Full HTML text format on CKEditor", + "install-path": "../../web/modules/custom/cern-full-html-format" + }, + { + "name": "drupal/cern-indico-feeds", + "version": "2.0.5", + "version_normalized": "2.0.5.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-indico-feeds.git", + "reference": "8478ce54ec7267c82e3370c5e35642d8e0c11534" + }, + "require": { + "drupal/feeds": "^3.0-alpha8" + }, + "time": "2021-02-09T13:16:40+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure", + "install-path": "../../web/modules/custom/cern-indico-feeds" + }, + { + "name": "drupal/cern-landing-page", + "version": "2.2.4", + "version_normalized": "2.2.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-landing-page.git", + "reference": "a6aa2903393d64b341900aa65c3e160afd39752f" + }, + "require": { + "drupal/allowed_formats": "^1.3", + "drupal/cern-cds-media": "^2.1.2", + "drupal/cern-paragraph-types": "^2.2.1", + "drupal/color_field": "^2.4", + "drupal/ds": "^3.9", + "drupal/easy_breadcrumb": "^1.13", + "drupal/entity_reference_revisions": "^1.8", + "drupal/field_formatter_class": "^1.4", + "drupal/field_group": "^3.1", + "drupal/filefield_paths": "^1.0-beta5", + "drupal/paragraphs": "^1.12", + "drupal/pathauto": "^1.8", + "drupal/scheduler": "^1.3", + "drupal/smart_trim": "^1.3", + "drupal/viewsreference": "^1.6" + }, + "time": "2021-02-08T09:43:22+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Provides the Landing Page content type and related configuration. A long-form story telling page.", + "install-path": "../../web/modules/custom/cern-landing-page" + }, + { + "name": "drupal/cern-loading", + "version": "2.1.2", + "version_normalized": "2.1.2.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-loading.git", + "reference": "7192a53bc4b2d6a4187c3abf1fef6df1d1df1744" + }, + "time": "2021-01-14T09:07:39+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Adds the loader animation on CERN Drupal sites", + "install-path": "../../web/modules/custom/cern-loading" + }, + { + "name": "drupal/cern-paragraph-types", + "version": "2.2.3", + "version_normalized": "2.2.3.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/paragraph-types.git", + "reference": "5d9bd43e424dc7865ccd564544a1e07045f5c111" + }, + "require": { + "drupal/cern-components": "^2.7.6", + "drupal/paragraphs": "^1.12" + }, + "time": "2021-02-08T10:19:40+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "A common set of re-usable paragraph types.", + "install-path": "../../web/modules/custom/cern-paragraph-types" + }, + { + "name": "drupal/cern-profile-displayname", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-profile-displayname.git", + "reference": "1392ffebc377e627a22b6a817f2c342d126b93f2" + }, + "require": { + "drupal/simplesamlphp_auth": "^3.2" + }, + "time": "2021-02-11T10:01:34+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Overrides user login names with the SimpleSaml fullname attribute. Enables redirection to Profiles site.", + "install-path": "../../web/modules/custom/cern-profile-displayname" + }, + { + "name": "drupal/cern-theme", + "version": "2.6.11", + "version_normalized": "2.6.11.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cern.git", + "reference": "38332c5687938b4c9368a05693071c884da02d14" + }, + "require": { + "drupal/cern-base-theme": "^2.6.1" + }, + "time": "2021-02-09T12:56:21+00:00", + "type": "drupal-custom-theme", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines the CERN theme", + "install-path": "../../web/themes/custom/cern-theme" + }, + { + "name": "drupal/cern-toolbar", + "version": "2.2.3", + "version_normalized": "2.2.3.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-toolbar.git", + "reference": "ab38a97568bfe8e7f985bde28fdfd847b89aa685" + }, + "time": "2021-02-08T10:00:25+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Adds the CERN Toolbar on CERN Drupal sites", + "install-path": "../../web/modules/custom/cern-toolbar" + }, + { + "name": "drupal/cern-webcast-feeds", + "version": "2.0.4", + "version_normalized": "2.0.4.0", + "source": { + "type": "git", + "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-webcast-feeds.git", + "reference": "4f255383eec3c97d2b9de1c0bae98d23b16e0076" + }, + "require": { + "drupal/cern-indico-feeds": "^2.0.5", + "drupal/feeds": "^3.0" + }, + "time": "2021-02-09T13:25:19+00:00", + "type": "drupal-custom-module", + "installation-source": "source", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Konstantinos Platis", + "email": "konstantinos.platis@cern.ch" + } + ], + "description": "Defines Webcast feeds for the CERN Drupal infrastructure", + "install-path": "../../web/modules/custom/cern-webcast-feeds" + }, + { + "name": "drupal/ckeditor_font", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ckeditor_font.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ckeditor_font-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "a8d0d10e7b23307bb9aba5de707518c108f69570" + }, + "require": { + "drupal-ckeditor-libraries-group/font": "4.13.1", + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1590157419", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Consolidation\\OutputFormatters\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Format text by applying transformations provided by plug-in formatters.", - "support": { - "issues": "https://github.com/consolidation/output-formatters/issues", - "source": "https://github.com/consolidation/output-formatters/tree/3.5.1" - } - }, - { - "name": "dflydev/dot-access-data", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", - "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "time": "2017-01-20T21:14:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Dflydev\\DotAccessData": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/master" - } - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "version_normalized": "0.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "time": "2019-12-04T15:06:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - } - }, - { - "name": "doctrine/annotations", - "version": "v1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.7" - }, - "time": "2017-02-24T16:22:25+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "doctrine/cache", - "version": "v1.6.2", - "version_normalized": "1.6.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", - "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", - "shasum": "" - }, - "require": { - "php": "~5.5|~7.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" - }, - "time": "2017-07-22T12:49:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "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": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ] - }, - { - "name": "doctrine/collections", - "version": "v1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/coding-standard": "~0.1@dev", - "phpunit/phpunit": "^5.7" - }, - "time": "2017-01-03T10:49:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" - } - }, - "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": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ] - }, - { - "name": "doctrine/common", - "version": "v2.7.3", - "version_normalized": "2.7.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", - "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", - "shasum": "" - }, - "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": "~5.6|~7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4.6" - }, - "time": "2017-07-22T08:35:12+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "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": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ] - }, - { - "name": "doctrine/inflector", - "version": "v1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "time": "2017-07-22T12:18:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "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": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ] - }, - { - "name": "doctrine/lexer", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "^4.5" - }, - "time": "2019-06-08T11:03:04+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "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": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ] - }, - { - "name": "dompdf/dompdf", - "version": "v0.8.6", - "version_normalized": "0.8.6.0", - "source": { - "type": "git", - "url": "https://github.com/dompdf/dompdf.git", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5", - "reference": "db91d81866c69a42dad1d2926f61515a1e3f42c5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "phenx/php-font-lib": "^0.5.2", - "phenx/php-svg-lib": "^0.3.3", - "php": "^7.1" - }, - "require-dev": { - "mockery/mockery": "^1.3", - "phpunit/phpunit": "^7.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "ext-gd": "Needed to process images", - "ext-gmagick": "Improves image processing performance", - "ext-imagick": "Improves image processing performance", - "ext-zlib": "Needed for pdf stream compression" - }, - "time": "2020-08-30T22:54:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.7-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Dompdf\\": "src/" - }, - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - }, - { - "name": "Brian Sweeney", - "email": "eclecticgeek@gmail.com" - }, - { - "name": "Gabriel Bull", - "email": "me@gabrielbull.com" - } - ], - "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", - "homepage": "https://github.com/dompdf/dompdf", - "support": { - "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/master" - } - }, - { - "name": "drupal-ckeditor-libraries-group/codesnippet", - "version": "4.16.0", - "version_normalized": "4.16.0.0", - "source": { - "type": "git", - "url": "https://github.com/drupal-ckeditor-libraries-group/codesnippet.git", - "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/codesnippet/zipball/cbddc36e5873323b1c34db1542a3449bcb1ff9e7", - "reference": "cbddc36e5873323b1c34db1542a3449bcb1ff9e7", - "shasum": "" - }, - "time": "2021-01-25T12:06:23+00:00", - "type": "drupal-library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later", - "LGPL-2.1-or-later", - "MPL-1.1" - ], - "description": "CKEditor 4 codesnippet plugin", - "homepage": "https://ckeditor.com/cke4/addon/codesnippet", - "keywords": [ - "CKEditor", - "codesnippet", - "plugin" - ], - "support": { - "issues": "https://github.com/ckeditor/ckeditor4/issues", - "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/codesnippet" - } - }, - { - "name": "drupal-ckeditor-libraries-group/font", - "version": "4.13.1", - "version_normalized": "4.13.1.0", - "source": { - "type": "git", - "url": "https://github.com/drupal-ckeditor-libraries-group/font.git", - "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal-ckeditor-libraries-group/font/zipball/81cbe90726319bb0a8c0c12c0a893e1e2e660c60", - "reference": "81cbe90726319bb0a8c0c12c0a893e1e2e660c60", - "shasum": "" - }, - "time": "2019-06-27T14:05:00+00:00", - "type": "drupal-library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later", - "LGPL-2.1-or-later", - "MPL-1.1" - ], - "description": "CKEditor 4 font plugin", - "homepage": "https://ckeditor.com/cke4/addon/font", - "keywords": [ - "CKEditor", - "font", - "plugin" - ], - "support": { - "issues": "https://github.com/ckeditor/ckeditor4/issues", - "source": "https://github.com/ckeditor/ckeditor4/tree/master/plugins/font" - } - }, - { - "name": "drupal/admin_toolbar", - "version": "2.4.0", - "version_normalized": "2.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/admin_toolbar.git", - "reference": "8.x-2.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/admin_toolbar-8.x-2.4.zip", - "reference": "8.x-2.4", - "shasum": "6240047b8d91ac78f98d861ba8282af971fa0b38" - }, - "require": { - "drupal/core": "^8.8.0 || ^9.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.4", - "datestamp": "1601999178", - "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": "Wilfrid Roze (eme)", - "homepage": "https://www.drupal.org/u/eme", - "role": "Maintainer" - }, - { - "name": "Romain Jarraud (romainj)", - "homepage": "https://www.drupal.org/u/romainj", - "role": "Maintainer" - }, - { - "name": "Adrian Cid Almaguer (adriancid)", - "homepage": "https://www.drupal.org/u/adriancid", - "email": "adriancid@gmail.com", - "role": "Maintainer" - }, - { - "name": "Mohamed Anis Taktak (matio89)", - "homepage": "https://www.drupal.org/u/matio89", - "role": "Maintainer" - }, - { - "name": "fethi.krout", - "homepage": "https://www.drupal.org/user/3206765" - }, - { - "name": "matio89", - "homepage": "https://www.drupal.org/user/2320090" - }, - { - "name": "romainj", - "homepage": "https://www.drupal.org/user/370706" - } - ], - "description": "Provides a drop-down menu interface to the core Drupal Toolbar.", - "homepage": "http://drupal.org/project/admin_toolbar", - "keywords": [ - "Drupal", - "Toolbar" - ], - "support": { - "source": "https://git.drupalcode.org/project/admin_toolbar", - "issues": "https://www.drupal.org/project/issues/admin_toolbar" - } - }, - { - "name": "drupal/adminimal_theme", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/adminimal_theme.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/adminimal_theme-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "89132d0853388afe8dfd11fb83c69a48d8c13413" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-theme", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1602006937", - "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": "ANDiTKO", - "homepage": "https://www.drupal.org/user/1428124" - }, - { - "name": "andrey.troeglazov", - "homepage": "https://www.drupal.org/user/3145389" - }, - { - "name": "realityloop", - "homepage": "https://www.drupal.org/user/139189" - } - ], - "description": "Drupal administration theme with modern minimalist design.", - "homepage": "https://www.drupal.org/project/adminimal_theme", - "support": { - "source": "https://git.drupalcode.org/project/adminimal_theme", - "issues": "https://www.drupal.org/project/issues/adminimal_theme" - } - }, - { - "name": "drupal/allowed_formats", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/allowed_formats.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/allowed_formats-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "4c3c036d7b41428d6e22b61f1219de0ab012feec" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1592909219", - "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": "floretan", - "homepage": "https://www.drupal.org/user/66163" - } - ], - "description": "Limit which text formats are available for each field instance.", - "homepage": "https://www.drupal.org/project/allowed_formats", - "support": { - "source": "https://git.drupalcode.org/project/allowed_formats" - } - }, - { - "name": "drupal/bootstrap", - "version": "3.23.0", - "version_normalized": "3.23.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/bootstrap.git", - "reference": "8.x-3.23" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/bootstrap-8.x-3.23.zip", - "reference": "8.x-3.23", - "shasum": "9849be667cc678a91ad29f77c2baea2cf16878bc" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-theme", - "extra": { - "drupal": { - "version": "8.x-3.23", - "datestamp": "1592175762", - "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": "Mark Carver (markcarver)", - "homepage": "https://www.drupal.org/u/markcarver", - "role": "Maintainer" - }, - { - "name": "John McCormick (neardark)", - "homepage": "https://www.drupal.org/u/neardark", - "role": "Co-maintainer" - }, - { - "name": "Fabiano Sant'Ana (wundo)", - "homepage": "https://www.drupal.org/u/wundo", - "role": "Co-maintainer" - } - ], - "description": "Built to use Bootstrap, a sleek, intuitive, and powerful front-end framework for faster and easier web development.", - "homepage": "https://www.drupal.org/project/bootstrap", - "support": { - "source": "https://git.drupalcode.org/project/bootstrap", - "docs": "https://drupal-bootstrap.org", - "issues": "https://www.drupal.org/project/issues/bootstrap", - "irc": "irc://irc.freenode.org/drupal-bootstrap" - } - }, - { - "name": "drupal/captcha", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/captcha.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/captcha-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "2eaf6f00ea256652c09f785b26dc933cc5b3dd26" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1591160977", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - }, - { - "name": "elachlan", - "homepage": "https://www.drupal.org/user/1021502" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "naveenvalecha", - "homepage": "https://www.drupal.org/user/2665733" - }, - { - "name": "podarok", - "homepage": "https://www.drupal.org/user/116002" - }, - { - "name": "soxofaan", - "homepage": "https://www.drupal.org/user/41478" - }, - { - "name": "wundo", - "homepage": "https://www.drupal.org/user/25523" - } - ], - "description": "The CAPTCHA module provides this feature to virtually any user facing web form on a Drupal site.", - "homepage": "https://www.drupal.org/project/captcha", - "support": { - "source": "https://git.drupalcode.org/project/captcha", - "issues": "https://www.drupal.org/project/issues/captcha" - } - }, - { - "name": "drupal/cern-adminimal-subtheme", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/adminimal_subtheme.git", - "reference": "a2ed5628d532fccb54abbeaf063db3944784bd76" - }, - "require": { - "drupal/adminimal_theme": "^1.6" - }, - "time": "2021-02-11T10:54:34+00:00", - "type": "drupal-custom-theme", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Applies overrides on the adminimal theme" - }, - { - "name": "drupal/cern-base-theme", - "version": "2.6.6", - "version_normalized": "2.6.6.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cernbase.git", - "reference": "cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3" - }, - "require": { - "drupal/bootstrap": "^3.23" - }, - "time": "2021-02-10T13:48:27+00:00", - "type": "drupal-custom-theme", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Base theme of all CERN Drupal themes" - }, - { - "name": "drupal/cern-cds-media", - "version": "2.1.4", - "version_normalized": "2.1.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-cds-media.git", - "reference": "211fb1be8dbb83df9dd791b6f75d8798bb99f290" - }, - "time": "2021-02-08T09:12:29+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Provides the CERN CDS Media Plugin in the CKEditor." - }, - { - "name": "drupal/cern-components", - "version": "2.7.10", - "version_normalized": "2.7.10.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-components.git", - "reference": "8cc5c011dbb200e748718701212882dcda5563ff" - }, - "require": { - "drupal/cern-full-html-format": "^2.0.2", - "drupal/components": "^1.1", - "drupal/ds": "^3.9", - "drupal/field_group": "^3.1", - "drupal/twig_tweak": "^2.8", - "drupal/ui_patterns": "^1.2" - }, - "time": "2021-01-14T13:28:59+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure" - }, - { - "name": "drupal/cern-dev-status", - "version": "2.0.5", - "version_normalized": "2.0.5.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-dev-status.git", - "reference": "faba2b40d7f34d718f0826dbb38250e42881e71a" - }, - "time": "2021-02-08T15:54:50+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Displays a banner at the bottom of the website and applies styles according to its development status. Prevents anonymous users to access the website by checking their IP." - }, - { - "name": "drupal/cern-display-formats", - "version": "1.4.5", - "version_normalized": "1.4.5.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-display-formats.git", - "reference": "57b5b7cc346f4094359efbb53f9cb21cfedbaaf3" - }, - "require": { - "drupal/components": "^1.1" - }, - "time": "2021-01-14T08:51:34+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines a set of views display formats" - }, - { - "name": "drupal/cern-drupal-welcome-message-block", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/drupal-welcome-message-block.git", - "reference": "c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6" - }, - "time": "2021-02-11T13:36:40+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Creates the welcome message block for CERN Drupal websites" - }, - { - "name": "drupal/cern-full-html-format", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-full-html-format.git", - "reference": "4e4a15aa77576abadb8639f537e31d31edbc09a6" - }, - "require": { - "drupal/ckeditor_font": "^1.1", - "drupal/colorbutton": "^1.2", - "drupal/panelbutton": "^1.3" - }, - "time": "2021-02-08T09:36:17+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Adds the CERN Full HTML text format on CKEditor" - }, - { - "name": "drupal/cern-indico-feeds", - "version": "2.0.5", - "version_normalized": "2.0.5.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-indico-feeds.git", - "reference": "8478ce54ec7267c82e3370c5e35642d8e0c11534" - }, - "require": { - "drupal/feeds": "^3.0-alpha8" - }, - "time": "2021-02-09T13:16:40+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines a set of re-usable patterns for the CERN Drupal infrastructure" - }, - { - "name": "drupal/cern-landing-page", - "version": "2.2.4", - "version_normalized": "2.2.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-landing-page.git", - "reference": "a6aa2903393d64b341900aa65c3e160afd39752f" - }, - "require": { - "drupal/allowed_formats": "^1.3", - "drupal/cern-cds-media": "^2.1.2", - "drupal/cern-paragraph-types": "^2.2.1", - "drupal/color_field": "^2.4", - "drupal/ds": "^3.9", - "drupal/easy_breadcrumb": "^1.13", - "drupal/entity_reference_revisions": "^1.8", - "drupal/field_formatter_class": "^1.4", - "drupal/field_group": "^3.1", - "drupal/filefield_paths": "^1.0-beta5", - "drupal/paragraphs": "^1.12", - "drupal/pathauto": "^1.8", - "drupal/scheduler": "^1.3", - "drupal/smart_trim": "^1.3", - "drupal/viewsreference": "^1.6" - }, - "time": "2021-02-08T09:43:22+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Provides the Landing Page content type and related configuration. A long-form story telling page." - }, - { - "name": "drupal/cern-loading", - "version": "2.1.2", - "version_normalized": "2.1.2.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-loading.git", - "reference": "7192a53bc4b2d6a4187c3abf1fef6df1d1df1744" - }, - "time": "2021-01-14T09:07:39+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Adds the loader animation on CERN Drupal sites" - }, - { - "name": "drupal/cern-paragraph-types", - "version": "2.2.3", - "version_normalized": "2.2.3.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/paragraph-types.git", - "reference": "5d9bd43e424dc7865ccd564544a1e07045f5c111" - }, - "require": { - "drupal/cern-components": "^2.7.6", - "drupal/paragraphs": "^1.12" - }, - "time": "2021-02-08T10:19:40+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "A common set of re-usable paragraph types." - }, - { - "name": "drupal/cern-profile-displayname", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-profile-displayname.git", - "reference": "1392ffebc377e627a22b6a817f2c342d126b93f2" - }, - "require": { - "drupal/simplesamlphp_auth": "^3.2" - }, - "time": "2021-02-11T10:01:34+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Overrides user login names with the SimpleSaml fullname attribute. Enables redirection to Profiles site." - }, - { - "name": "drupal/cern-theme", - "version": "2.6.11", - "version_normalized": "2.6.11.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/themes/cern.git", - "reference": "38332c5687938b4c9368a05693071c884da02d14" - }, - "require": { - "drupal/cern-base-theme": "^2.6.1" - }, - "time": "2021-02-09T12:56:21+00:00", - "type": "drupal-custom-theme", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines the CERN theme" - }, - { - "name": "drupal/cern-toolbar", - "version": "2.2.3", - "version_normalized": "2.2.3.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-toolbar.git", - "reference": "ab38a97568bfe8e7f985bde28fdfd847b89aa685" - }, - "time": "2021-02-08T10:00:25+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Adds the CERN Toolbar on CERN Drupal sites" - }, - { - "name": "drupal/cern-webcast-feeds", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://gitlab.cern.ch/web-team/drupal/public/d8/modules/cern-webcast-feeds.git", - "reference": "4f255383eec3c97d2b9de1c0bae98d23b16e0076" - }, - "require": { - "drupal/cern-indico-feeds": "^2.0.5", - "drupal/feeds": "^3.0" - }, - "time": "2021-02-09T13:25:19+00:00", - "type": "drupal-custom-module", - "installation-source": "source", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Konstantinos Platis", - "email": "konstantinos.platis@cern.ch" - } - ], - "description": "Defines Webcast feeds for the CERN Drupal infrastructure" - }, - { - "name": "drupal/ckeditor_font", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ckeditor_font.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ckeditor_font-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "a8d0d10e7b23307bb9aba5de707518c108f69570" - }, - "require": { - "drupal-ckeditor-libraries-group/font": "4.13.1", - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1590157419", - "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": "Webbeh", - "homepage": "https://www.drupal.org/user/1160608" - }, - { - "name": "cobenash", - "homepage": "https://www.drupal.org/user/2138470" - }, - { - "name": "darol100", - "homepage": "https://www.drupal.org/user/2667123" - }, - { - "name": "dinarcon", - "homepage": "https://www.drupal.org/user/909522" - } - ], - "description": "This plugin adds Font Size and Font Family dropdowns that applies as inline element style.", - "homepage": "https://www.drupal.org/project/ckeditor_font", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/ckeditor_font", - "issues": "http://drupal.org/project/issues/ckeditor_font" - } - }, - { - "name": "drupal/codesnippet", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/codesnippet.git", - "reference": "8.x-1.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/codesnippet-8.x-1.7.zip", - "reference": "8.x-1.7", - "shasum": "d620a6d1272e9811e19cc69524a991e271da142c" - }, - "require": { - "drupal-ckeditor-libraries-group/codesnippet": "^4.5.11", - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.7", - "datestamp": "1593798298", - "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": "Kevin Quillen (kevinquillen)", - "homepage": "https://www.drupal.org/u/kevinquillen", - "role": "Maintainer" - }, - { - "name": "kevinquillen", - "homepage": "https://www.drupal.org/user/317279" - }, - { - "name": "szloredan", - "homepage": "https://www.drupal.org/user/3531611" - } - ], - "description": "Adds the CodeSnippet plugin to CKEditor.", - "homepage": "http://drupal.org/project/codesnippet", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/codesnippet", - "issues": "http://drupal.org/project/issues/codesnippet" - } - }, - { - "name": "drupal/color_field", - "version": "2.4.0", - "version_normalized": "2.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/color_field.git", - "reference": "8.x-2.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/color_field-8.x-2.4.zip", - "reference": "8.x-2.4", - "shasum": "11c163a409f4f70083f188d917fecc6052c53a2f" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/token": "~1.3", - "nickwilde1990/php-composter-phpcs-drupal": "^2.0" - }, - "suggest": { - "bower-asset/jquery-simple-color": "^v1.2.2: Provides JavaScript library necessary for the Color Grid widget", - "bower-asset/spectrum": "^1.8: Provides JavaScript library necessary for Spectrum widget." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.4", - "datestamp": "1596479692", - "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": "targoo", - "homepage": "https://www.drupal.org/user/431910", - "role": "Maintainer" - }, - { - "name": "Nick Wilde", - "homepage": "https://www.drupal.org/user/nickwilde", - "role": "Maintainer" - } - ], - "description": "Provides a color field type to store the color value and opacity", - "homepage": "https://www.drupal.org/project/color_field", - "support": { - "source": "https://git.drupalcode.org/project/color_field", - "issues": "https://www.drupal.org/project/issues/color_field?version=8.x" - } - }, - { - "name": "drupal/colorbox", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/colorbox.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "73bfc74e9afd294e3d3aded3622ad9cb9de6b75c" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "suggest": { - "jackmoore/colorbox": "The Colorbox library is required to use the drupal/colorbox module." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1587025715", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - }, - { - "name": "Fredrik Jonsson", - "homepage": "https://www.drupal.org/u/frjo", - "role": "Maintainer" - }, - { - "name": "Sam152", - "homepage": "https://www.drupal.org/user/1485048" - }, - { - "name": "jdwfly", - "homepage": "https://www.drupal.org/user/298179" - }, - { - "name": "rsmylski", - "homepage": "https://www.drupal.org/user/1324348" - } - ], - "description": "A light-weight, customizable lightbox plugin for jQuery.", - "homepage": "https://www.drupal.org/project/colorbox", - "support": { - "source": "https://git.drupalcode.org/project/colorbox", - "issues": "https://www.drupal.org/project/issues/colorbox" - } - }, - { - "name": "drupal/colorbutton", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/colorbutton.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/colorbutton-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "a3467286d9882819bc45e9573dc2253444971bfc" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/panelbutton": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1589886092", - "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": "Kevin Quillen (kevinquillen)", - "homepage": "https://www.drupal.org/u/kevinquillen", - "role": "Maintainer" - }, - { - "name": "ddrozdik", - "homepage": "https://www.drupal.org/user/574124" - }, - { - "name": "kevinquillen", - "homepage": "https://www.drupal.org/user/317279" - } - ], - "description": "Adds the Color Button plugin to CKEditor.", - "homepage": "http://drupal.org/project/colorbutton", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/colorbutton", - "issues": "http://drupal.org/project/issues/colorbutton" - } - }, - { - "name": "drupal/components", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/components.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/components-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "72af8ff1ca842556ee4b95335595c24703acdb75" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1556870881", - "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": "JohnAlbin", - "homepage": "https://www.drupal.org/user/32095" - }, - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - } - ], - "description": "Registers “component libraries” defined in modules and themes with the Twig system", - "homepage": "https://www.drupal.org/project/components", - "support": { - "source": "https://git.drupalcode.org/project/components" - } - }, - { - "name": "drupal/config_update", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/config_update.git", - "reference": "8.x-1.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/config_update-8.x-1.7.zip", - "reference": "8.x-1.7", - "shasum": "8f079abf7c2ea826a27fa5224b0770a26404c968" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.7", - "datestamp": "1586355587", - "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": "jhodgdon", - "homepage": "https://www.drupal.org/user/155601" - }, - { - "name": "nedjo", - "homepage": "https://www.drupal.org/user/4481" - } - ], - "description": "Provides basic revert and update functionality for other modules", - "homepage": "https://www.drupal.org/project/config_update", - "support": { - "source": "https://git.drupalcode.org/project/config_update" - } - }, - { - "name": "drupal/content_access", - "version": "1.0.0-alpha3", - "version_normalized": "1.0.0.0-alpha3", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/content_access.git", - "reference": "8.x-1.0-alpha3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/content_access-8.x-1.0-alpha3.zip", - "reference": "8.x-1.0-alpha3", - "shasum": "38715d271d166cbf7ed801acd6cee6010962bc79" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/acl": "~1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-alpha3", - "datestamp": "1600327861", - "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - }, - { - "name": "gisle", - "homepage": "https://www.drupal.org/user/409554" - }, - { - "name": "good_man", - "homepage": "https://www.drupal.org/user/265439" - } - ], - "description": "Provides flexible content access control.", - "homepage": "https://drupal.org/project/content_access", - "support": { - "source": "https://git.drupalcode.org/project/content_access" - } - }, - { - "name": "drupal/context", - "version": "4.0.0-beta5", - "version_normalized": "4.0.0.0-beta5", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/context.git", - "reference": "8.x-4.0-beta5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/context-8.x-4.0-beta5.zip", - "reference": "8.x-4.0-beta5", - "shasum": "893d7e6ce07b23764baa6fd609da811ec80c5a04" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.0-beta5", - "datestamp": "1600783508", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christoffer Palm", - "homepage": "http://www.oddhill.se/", - "email": "christoffer.palm@oddhill.se", - "role": "Developer" - }, - { - "name": "Steven Jones", - "homepage": "https://www.drupal.org/user/99644" - }, - { - "name": "alex_b", - "homepage": "https://www.drupal.org/user/53995" - }, - { - "name": "boshtian", - "homepage": "https://www.drupal.org/user/1773456" - }, - { - "name": "colan", - "homepage": "https://www.drupal.org/user/58704" - }, - { - "name": "emanaton", - "homepage": "https://www.drupal.org/user/120853" - }, - { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" - }, - { - "name": "fizk", - "homepage": "https://www.drupal.org/user/473174" - }, - { - "name": "hass", - "homepage": "https://www.drupal.org/user/85918" - }, - { - "name": "hefox", - "homepage": "https://www.drupal.org/user/426416" - }, - { - "name": "jmiccolis", - "homepage": "https://www.drupal.org/user/31731" - }, - { - "name": "nedjo", - "homepage": "https://www.drupal.org/user/4481" - }, - { - "name": "patricksettle", - "homepage": "https://www.drupal.org/user/26618" - }, - { - "name": "paulocs", - "homepage": "https://www.drupal.org/user/3640109" - }, - { - "name": "tekante", - "homepage": "https://www.drupal.org/user/640024" - }, - { - "name": "yhahn", - "homepage": "https://www.drupal.org/user/264833" - } - ], - "description": "Manage contextual conditions and reactions for different portions of your site.", - "homepage": "https://github.com/oddhill/context", - "keywords": [ - "Drupal", - "block", - "conditions", - "context", - "visibility" - ], - "support": { - "source": "https://github.com/oddhill/context", - "issues": "https://github.com/oddhill/context/issues", - "docs": "https://github.com/oddhill/context" - } - }, - { - "name": "drupal/contribute", - "version": "1.0.0-beta8", - "version_normalized": "1.0.0.0-beta8", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/contribute.git", - "reference": "8.x-1.0-beta8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/contribute-8.x-1.0-beta8.zip", - "reference": "8.x-1.0-beta8", - "shasum": "0f197e7ed0997818366d557a1c990d2c199e3565" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta8", - "datestamp": "1572372486", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Adrian Cid Almaguer (adriancid)", - "homepage": "https://www.drupal.org/u/adriancid", - "role": "Maintainer" - }, - { - "name": "Jacob Rockowitz (jrockowitz)", - "homepage": "https://www.drupal.org/u/jrockowitz", - "role": "Maintainer" - }, - { - "name": "jrockowitz", - "homepage": "https://www.drupal.org/user/371407" - } - ], - "description": "Provides status report message which encourage users or organizations to join the Drupal community, become a member of Drupal Association, and contribute back to Drupal.", - "homepage": "https://www.drupal.org/project/contribute", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/contribute", - "issues": "https://www.drupal.org/project/issues/contribute" - } - }, - { - "name": "drupal/cookieconsent", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/cookieconsent.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/cookieconsent-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "3acb8380e230e3a01486e336197e5b543892c409" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1592402037", - "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": "Hans van Wezenbeek (Nitebreed)", - "homepage": "https://www.drupal.org/u/nitebreed", - "role": "Maintainer" - }, - { - "name": "Steven Buteneers", - "homepage": "https://www.drupal.org/user/3301055" - }, - { - "name": "pjotr", - "homepage": "https://www.drupal.org/user/3487709" - } - ], - "description": "CookieConsent uses the Cookie Consent javascript library for alerting users about the use of cookies on your website", - "homepage": "https://www.drupal.org/project/cookieconsent", - "keywords": [ - "Cookie", - "CookieConsent", - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/cookieconsent", - "issues": "http://drupal.org/project/issues/cookieconsent" - } - }, - { - "name": "drupal/core", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core.git", - "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/a53db77b55a035453d7229e0c3069f8591cb4cb6", - "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6", - "shasum": "" - }, - "require": { - "asm89/stack-cors": "^1.1", - "composer/semver": "^1.0", - "doctrine/annotations": "^1.4", - "doctrine/common": "^2.7", - "easyrdf/easyrdf": "^0.9", - "egulias/email-validator": "^2.0", - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-gd": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-pdo": "*", - "ext-session": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "guzzlehttp/guzzle": "^6.3", - "laminas/laminas-diactoros": "^1.8", - "laminas/laminas-feed": "^2.12", - "masterminds/html5": "^2.1", - "pear/archive_tar": "^1.4.12", - "php": "^7.0.8", - "psr/log": "^1.0", - "stack/builder": "^1.0", - "symfony-cmf/routing": "^1.4", - "symfony/class-loader": "~3.4.0", - "symfony/console": "~3.4.0", - "symfony/dependency-injection": "~3.4.26", - "symfony/event-dispatcher": "~3.4.0", - "symfony/http-foundation": "~3.4.35", - "symfony/http-kernel": "~3.4.14", - "symfony/polyfill-iconv": "^1.0", - "symfony/process": "~3.4.0", - "symfony/psr-http-message-bridge": "^1.1.2", - "symfony/routing": "~3.4.0", - "symfony/serializer": "~3.4.0", - "symfony/translation": "~3.4.0", - "symfony/validator": "~3.4.0", - "symfony/yaml": "~3.4.5", - "twig/twig": "^1.38.2", - "typo3/phar-stream-wrapper": "^3.1.3" - }, - "conflict": { - "drupal/pathauto": "<1.6", - "drush/drush": "<8.1.10" - }, - "replace": { - "drupal/action": "self.version", - "drupal/aggregator": "self.version", - "drupal/automated_cron": "self.version", - "drupal/ban": "self.version", - "drupal/bartik": "self.version", - "drupal/basic_auth": "self.version", - "drupal/big_pipe": "self.version", - "drupal/block": "self.version", - "drupal/block_content": "self.version", - "drupal/block_place": "self.version", - "drupal/book": "self.version", - "drupal/breakpoint": "self.version", - "drupal/ckeditor": "self.version", - "drupal/claro": "self.version", - "drupal/classy": "self.version", - "drupal/color": "self.version", - "drupal/comment": "self.version", - "drupal/config": "self.version", - "drupal/config_translation": "self.version", - "drupal/contact": "self.version", - "drupal/content_moderation": "self.version", - "drupal/content_translation": "self.version", - "drupal/contextual": "self.version", - "drupal/core-annotation": "self.version", - "drupal/core-assertion": "self.version", - "drupal/core-bridge": "self.version", - "drupal/core-class-finder": "self.version", - "drupal/core-datetime": "self.version", - "drupal/core-dependency-injection": "self.version", - "drupal/core-diff": "self.version", - "drupal/core-discovery": "self.version", - "drupal/core-event-dispatcher": "self.version", - "drupal/core-file-cache": "self.version", - "drupal/core-file-security": "self.version", - "drupal/core-filesystem": "self.version", - "drupal/core-gettext": "self.version", - "drupal/core-graph": "self.version", - "drupal/core-http-foundation": "self.version", - "drupal/core-php-storage": "self.version", - "drupal/core-plugin": "self.version", - "drupal/core-proxy-builder": "self.version", - "drupal/core-render": "self.version", - "drupal/core-serialization": "self.version", - "drupal/core-transliteration": "self.version", - "drupal/core-utility": "self.version", - "drupal/core-uuid": "self.version", - "drupal/core-version": "self.version", - "drupal/datetime": "self.version", - "drupal/datetime_range": "self.version", - "drupal/dblog": "self.version", - "drupal/dynamic_page_cache": "self.version", - "drupal/editor": "self.version", - "drupal/entity_reference": "self.version", - "drupal/field": "self.version", - "drupal/field_layout": "self.version", - "drupal/field_ui": "self.version", - "drupal/file": "self.version", - "drupal/filter": "self.version", - "drupal/forum": "self.version", - "drupal/hal": "self.version", - "drupal/help": "self.version", - "drupal/help_topics": "self.version", - "drupal/history": "self.version", - "drupal/image": "self.version", - "drupal/inline_form_errors": "self.version", - "drupal/jsonapi": "self.version", - "drupal/language": "self.version", - "drupal/layout_builder": "self.version", - "drupal/layout_discovery": "self.version", - "drupal/link": "self.version", - "drupal/locale": "self.version", - "drupal/media": "self.version", - "drupal/media_library": "self.version", - "drupal/menu_link_content": "self.version", - "drupal/menu_ui": "self.version", - "drupal/migrate": "self.version", - "drupal/migrate_drupal": "self.version", - "drupal/migrate_drupal_multilingual": "self.version", - "drupal/migrate_drupal_ui": "self.version", - "drupal/minimal": "self.version", - "drupal/node": "self.version", - "drupal/options": "self.version", - "drupal/page_cache": "self.version", - "drupal/path": "self.version", - "drupal/path_alias": "self.version", - "drupal/quickedit": "self.version", - "drupal/rdf": "self.version", - "drupal/responsive_image": "self.version", - "drupal/rest": "self.version", - "drupal/search": "self.version", - "drupal/serialization": "self.version", - "drupal/settings_tray": "self.version", - "drupal/seven": "self.version", - "drupal/shortcut": "self.version", - "drupal/simpletest": "self.version", - "drupal/standard": "self.version", - "drupal/stark": "self.version", - "drupal/statistics": "self.version", - "drupal/syslog": "self.version", - "drupal/system": "self.version", - "drupal/taxonomy": "self.version", - "drupal/telephone": "self.version", - "drupal/text": "self.version", - "drupal/toolbar": "self.version", - "drupal/tour": "self.version", - "drupal/tracker": "self.version", - "drupal/update": "self.version", - "drupal/user": "self.version", - "drupal/views": "self.version", - "drupal/views_ui": "self.version", - "drupal/workflows": "self.version", - "drupal/workspaces": "self.version" - }, - "type": "drupal-core", - "extra": { - "drupal-scaffold": { - "file-mapping": { - "[project-root]/.editorconfig": "assets/scaffold/files/editorconfig", - "[project-root]/.gitattributes": "assets/scaffold/files/gitattributes", - "[web-root]/.csslintrc": "assets/scaffold/files/csslintrc", - "[web-root]/.eslintignore": "assets/scaffold/files/eslintignore", - "[web-root]/.eslintrc.json": "assets/scaffold/files/eslintrc.json", - "[web-root]/.ht.router.php": "assets/scaffold/files/ht.router.php", - "[web-root]/.htaccess": "assets/scaffold/files/htaccess", - "[web-root]/example.gitignore": "assets/scaffold/files/example.gitignore", - "[web-root]/index.php": "assets/scaffold/files/index.php", - "[web-root]/INSTALL.txt": "assets/scaffold/files/drupal.INSTALL.txt", - "[web-root]/README.txt": "assets/scaffold/files/drupal.README.txt", - "[web-root]/robots.txt": "assets/scaffold/files/robots.txt", - "[web-root]/update.php": "assets/scaffold/files/update.php", - "[web-root]/web.config": "assets/scaffold/files/web.config", - "[web-root]/sites/README.txt": "assets/scaffold/files/sites.README.txt", - "[web-root]/sites/development.services.yml": "assets/scaffold/files/development.services.yml", - "[web-root]/sites/example.settings.local.php": "assets/scaffold/files/example.settings.local.php", - "[web-root]/sites/example.sites.php": "assets/scaffold/files/example.sites.php", - "[web-root]/sites/default/default.services.yml": "assets/scaffold/files/default.services.yml", - "[web-root]/sites/default/default.settings.php": "assets/scaffold/files/default.settings.php", - "[web-root]/modules/README.txt": "assets/scaffold/files/modules.README.txt", - "[web-root]/profiles/README.txt": "assets/scaffold/files/profiles.README.txt", - "[web-root]/themes/README.txt": "assets/scaffold/files/themes.README.txt" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\Core\\": "lib/Drupal/Core", - "Drupal\\Component\\": "lib/Drupal/Component", - "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" - }, - "classmap": [ - "lib/Drupal.php", - "lib/Drupal/Component/Utility/Timer.php", - "lib/Drupal/Component/Utility/Unicode.php", - "lib/Drupal/Core/Database/Database.php", - "lib/Drupal/Core/DrupalKernel.php", - "lib/Drupal/Core/DrupalKernelInterface.php", - "lib/Drupal/Core/Site/Settings.php" - ] - }, - "scripts": { - "pre-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::preAutoloadDump" - ], - "post-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::ensureHtaccess" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Drupal is an open source content management platform powering millions of websites and applications." - }, - { - "name": "drupal/core-composer-scaffold", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core-composer-scaffold.git", - "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c902d07cb49ef73777e2b33a39e54c2861a8c81d", - "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1 || ^2", - "php": ">=7.0.8" - }, - "conflict": { - "drupal-composer/drupal-scaffold": "*" - }, - "require-dev": { - "composer/composer": "^1.8@stable" - }, - "type": "composer-plugin", - "extra": { - "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\Composer\\Plugin\\Scaffold\\": "" - } - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "A flexible Composer project scaffold builder.", - "homepage": "https://www.drupal.org/project/drupal", - "keywords": [ - "drupal" - ] - }, - { - "name": "drupal/core-project-message", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core-project-message.git", - "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core-project-message/zipball/3f8fa28128f1fef68ee0e6647011a543ef92be5b", - "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2", - "php": ">=7.0.8" - }, - "type": "composer-plugin", - "extra": { - "class": "Drupal\\Composer\\Plugin\\ProjectMessage\\MessagePlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\Composer\\Plugin\\ProjectMessage\\": "." - } - }, - "license": [ - "GPL-2.0-or-later" - ], - "description": "Adds a message after Composer installation.", - "homepage": "https://www.drupal.org/project/drupal", - "keywords": [ - "drupal" - ] - }, - { - "name": "drupal/core-recommended", - "version": "8.9.13", - "version_normalized": "8.9.13.0", - "source": { - "type": "git", - "url": "https://github.com/drupal/core-recommended.git", - "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7a940fd5b64d2b22366680e2a60d96bf2c10089d", - "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d", - "shasum": "" - }, - "require": { - "asm89/stack-cors": "1.3.0", - "composer/semver": "1.5.1", - "doctrine/annotations": "v1.4.0", - "doctrine/cache": "v1.6.2", - "doctrine/collections": "v1.4.0", - "doctrine/common": "v2.7.3", - "doctrine/inflector": "v1.2.0", - "doctrine/lexer": "1.0.2", - "drupal/core": "8.9.13", - "easyrdf/easyrdf": "0.9.1", - "egulias/email-validator": "2.1.17", - "guzzlehttp/guzzle": "6.5.4", - "guzzlehttp/promises": "v1.3.1", - "guzzlehttp/psr7": "1.6.1", - "laminas/laminas-diactoros": "1.8.7p2", - "laminas/laminas-escaper": "2.6.1", - "laminas/laminas-feed": "2.12.2", - "laminas/laminas-stdlib": "3.2.1", - "laminas/laminas-zendframework-bridge": "1.0.4", - "masterminds/html5": "2.3.0", - "paragonie/random_compat": "v9.99.99", - "pear/archive_tar": "1.4.12", - "pear/console_getopt": "v1.4.3", - "pear/pear-core-minimal": "v1.10.10", - "pear/pear_exception": "v1.0.1", - "psr/container": "1.0.0", - "psr/http-message": "1.0.1", - "psr/log": "1.1.3", - "ralouphie/getallheaders": "3.0.3", - "stack/builder": "v1.0.5", - "symfony-cmf/routing": "1.4.1", - "symfony/class-loader": "v3.4.41", - "symfony/console": "v3.4.41", - "symfony/debug": "v3.4.41", - "symfony/dependency-injection": "v3.4.41", - "symfony/event-dispatcher": "v3.4.41", - "symfony/http-foundation": "v3.4.41", - "symfony/http-kernel": "v3.4.44", - "symfony/polyfill-ctype": "v1.17.0", - "symfony/polyfill-iconv": "v1.17.0", - "symfony/polyfill-intl-idn": "v1.17.0", - "symfony/polyfill-mbstring": "v1.17.0", - "symfony/polyfill-php56": "v1.17.0", - "symfony/polyfill-php70": "v1.17.0", - "symfony/polyfill-php72": "v1.17.0", - "symfony/polyfill-util": "v1.17.0", - "symfony/process": "v3.4.41", - "symfony/psr-http-message-bridge": "v1.1.2", - "symfony/routing": "v3.4.41", - "symfony/serializer": "v3.4.41", - "symfony/translation": "v3.4.41", - "symfony/validator": "v3.4.41", - "symfony/yaml": "v3.4.41", - "twig/twig": "v1.42.5", - "typo3/phar-stream-wrapper": "v3.1.4" - }, - "conflict": { - "webflo/drupal-core-strict": "*" - }, - "type": "metapackage", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Locked core dependencies; require this project INSTEAD OF drupal/core." - }, - { - "name": "drupal/ctools", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ctools.git", - "reference": "8.x-3.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ctools-8.x-3.4.zip", - "reference": "8.x-3.4", - "shasum": "016ca5abb7ac4ca720352a72e8989f3ef0e20539" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.4", - "datestamp": "1585763383", - "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": "Kris Vanderwater (EclipseGc)", - "homepage": "https://www.drupal.org/u/eclipsegc", - "role": "Maintainer" - }, - { - "name": "Jakob Perry (japerry)", - "homepage": "https://www.drupal.org/u/japerry", - "role": "Maintainer" - }, - { - "name": "Tim Plunkett (tim.plunkett)", - "homepage": "https://www.drupal.org/u/timplunkett", - "role": "Maintainer" - }, - { - "name": "James Gilliland (neclimdul)", - "homepage": "https://www.drupal.org/u/neclimdul", - "role": "Maintainer" - }, - { - "name": "Daniel Wehner (dawehner)", - "homepage": "https://www.drupal.org/u/dawehner", - "role": "Maintainer" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "sdboyer", - "homepage": "https://www.drupal.org/user/146719" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Provides a number of utility and helper APIs for Drupal developers and site builders.", - "homepage": "https://www.drupal.org/project/ctools", - "support": { - "source": "https://git.drupalcode.org/project/ctools", - "issues": "https://www.drupal.org/project/issues/ctools" - } - }, - { - "name": "drupal/ctools_block", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "require": { - "drupal/core": "^8 || ^9", - "drupal/ctools": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-3.4", - "datestamp": "1585763383", - "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": "EclipseGc", - "homepage": "https://www.drupal.org/user/61203" - }, - { - "name": "damiankloip", - "homepage": "https://www.drupal.org/user/1037976" - }, - { - "name": "dawehner", - "homepage": "https://www.drupal.org/user/99340" - }, - { - "name": "esmerel", - "homepage": "https://www.drupal.org/user/164022" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "sdboyer", - "homepage": "https://www.drupal.org/user/146719" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Provides improvements to blocks that will one day be added to Drupal core.", - "homepage": "https://www.drupal.org/project/ctools", - "support": { - "source": "https://git.drupalcode.org/project/ctools" - } - }, - { - "name": "drupal/devel", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/devel.git", - "reference": "8.x-2.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-8.x-2.1.zip", - "reference": "8.x-2.1", - "shasum": "8f735892922aa5f228e681e645e5f02b1c008f14" - }, - "require": { - "drupal/core": "~8.0", - "symfony/var-dumper": "~2.7|^3|^4" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.1", - "datestamp": "1556799496", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Moshe Weitzman", - "homepage": "https://github.com/weitzman", - "email": "weitzman@tejasa.com", - "role": "Maintainer" - }, - { - "name": "Hans Salvisberg", - "homepage": "https://www.drupal.org/u/salvis", - "email": "drupal@salvisberg.com", - "role": "Maintainer" - }, - { - "name": "Luca Lusso", - "homepage": "https://www.drupal.org/u/lussoluca", - "role": "Maintainer" - }, - { - "name": "Marco (willzyx)", - "homepage": "https://www.drupal.org/u/willzyx", - "role": "Maintainer" - }, - { - "name": "See contributors", - "homepage": "https://www.drupal.org/node/3236/committers" - } - ], - "description": "Various blocks, pages, and functions for developers.", - "homepage": "http://drupal.org/project/devel", - "support": { - "source": "http://cgit.drupalcode.org/devel", - "issues": "http://drupal.org/project/devel", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/domain_301_redirect", - "version": "1.0.0-alpha0", - "version_normalized": "1.0.0.0-alpha0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/domain_301_redirect.git", - "reference": "8.x-1.0-alpha0" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/domain_301_redirect-8.x-1.0-alpha0.zip", - "reference": "8.x-1.0-alpha0", - "shasum": "7b2756cdba8ecf8af052e9a6105530c1eaa2cfa5" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-alpha0", - "datestamp": "1569004385", - "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Kevin Hankens", - "homepage": "https://www.drupal.org/user/78090" - }, - { - "name": "jessebeach", - "homepage": "https://www.drupal.org/user/748566" - }, - { - "name": "nagba", - "homepage": "https://www.drupal.org/user/21231" - }, - { - "name": "naveenvalecha", - "homepage": "https://www.drupal.org/user/2665733" - }, - { - "name": "timhilliard", - "homepage": "https://www.drupal.org/user/195493" - } - ], - "description": "Allows you to 301 redirect any domain to the main domain associated with a site.", - "homepage": "http://drupal.org/project/domain_301_redirect", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/domain_301_redirect", - "issues": "http://drupal.org/project/domain_301_redirect" - } - }, - { - "name": "drupal/ds", - "version": "3.9.0", - "version_normalized": "3.9.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ds.git", - "reference": "8.x-3.9" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.9.zip", - "reference": "8.x-3.9", - "shasum": "7b419763cd87c2b3f06313489500746705a46334" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/devel": "3.x-dev", - "drupal/field_group": "3.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.9", - "datestamp": "1598898821", - "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": "Bram Goffings", - "homepage": "https://www.drupal.org/user/172527", - "role": "Maintainer" - }, - { - "name": "Kristof De Jaeger", - "homepage": "http://realize.be/", - "role": "Maintainer" - }, - { - "name": "Brecht Ceyssens", - "homepage": "https://www.drupal.org/user/591438", - "role": "Maintainer" - }, - { - "name": "swentel", - "homepage": "https://www.drupal.org/user/107403" - } - ], - "description": "Extend the display options for every entity type.", - "homepage": "https://www.drupal.org/project/ds", - "keywords": [ - "drupal", - "layout", - "php" - ], - "support": { - "source": "http://git.drupal.org/project/ds.git", - "issues": "https://www.drupal.org/project/issues/ds", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/easy_breadcrumb", - "version": "1.13.0", - "version_normalized": "1.13.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", - "reference": "8.x-1.13" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.13.zip", - "reference": "8.x-1.13", - "shasum": "8a8be82e1de1383eb849989b1c5790dd13270ffa" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.13", - "datestamp": "1595445195", - "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": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - }, - { - "name": "Greg Boggs", - "homepage": "https://www.drupal.org/u/greg-boggs", - "role": "Maintainer" - }, - { - "name": "RenatoG", - "homepage": "https://www.drupal.org/user/3326031" - }, - { - "name": "diamondsea", - "homepage": "https://www.drupal.org/user/430714" - }, - { - "name": "hmartens", - "homepage": "https://www.drupal.org/user/622826" - }, - { - "name": "loopduplicate", - "homepage": "https://www.drupal.org/user/717290" - }, - { - "name": "sonemonu", - "homepage": "https://www.drupal.org/user/1667988" - }, - { - "name": "tatarbj", - "homepage": "https://www.drupal.org/user/649590" - }, - { - "name": "volkswagenchick", - "homepage": "https://www.drupal.org/user/3332522" - } - ], - "description": "Adds configuration to the system breadcrumbs.", - "homepage": "https://www.drupal.org/project/easy_breadcrumb", - "support": { - "source": "https://git.drupalcode.org/project/easy_breadcrumb", - "issues": "https://www.drupal.org/project/issues/easy_breadcrumb" - } - }, - { - "name": "drupal/easychart", - "version": "3.4.0", - "version_normalized": "3.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/easychart.git", - "reference": "8.x-3.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/easychart-8.x-3.4.zip", - "reference": "8.x-3.4", - "shasum": "6ec1848fd12b1515c16d841cc87a071883fa476c" - }, - "require": { - "drupal/core": "^8" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.4", - "datestamp": "1475594996", - "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": "Jan-Yves Vanhaverbeke", - "homepage": "https://www.drupal.org/user/1823074", - "role": "Maintainer" - }, - { - "name": "Thomas Daem", - "homepage": "https://www.drupal.org/user/591438", - "role": "Maintainer" - }, - { - "name": "Kristof De Jaeger", - "homepage": "http://realize.be/", - "role": "Maintainer" - }, - { - "name": "thomas_rz", - "homepage": "https://www.drupal.org/user/1142210" - } - ], - "description": "A visual editor for the world's best web charting tool: Highcharts.", - "homepage": "https://www.drupal.org/project/easychart", - "keywords": [ - "Highcharts", - "chart", - "drupal" - ], - "support": { - "source": "http://git.drupal.org/project/easychart.git", - "issues": "https://www.drupal.org/project/issues/easychart", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/entity_browser", - "version": "2.5.0", - "version_normalized": "2.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/entity_browser.git", - "reference": "8.x-2.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.5.zip", - "reference": "8.x-2.5", - "shasum": "29456b961f0f90ff064601ab8a382446a8143774" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/embed": "~1.0", - "drupal/entity_embed": "1.x-dev", - "drupal/entity_reference_revisions": "1.x-dev", - "drupal/entityqueue": "1.x-dev", - "drupal/inline_entity_form": "1.x-dev", - "drupal/paragraphs": "1.x-dev", - "drupal/token": "~1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.5", - "datestamp": "1588015429", - "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": "Janez Urevc", - "homepage": "https://github.com/slashrsm", - "role": "Maintainer" - }, - { - "name": "Primoz Hmeljak", - "homepage": "https://github.com/primsi", - "role": "Maintainer" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/1943336/committers", - "role": "contributor" - }, - { - "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": "oknate", - "homepage": "https://www.drupal.org/user/471638" - }, - { - "name": "samuel.mortenson", - "homepage": "https://www.drupal.org/user/2582268" - }, - { - "name": "slashrsm", - "homepage": "https://www.drupal.org/user/744628" - } - ], - "description": "Entity browsing and selecting component.", - "homepage": "http://drupal.org/project/entity_browser", - "support": { - "source": "https://git.drupalcode.org/project/entity_browser", - "issues": "https://www.drupal.org/project/issues/entity_browser", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/entity_print", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/entity_print.git", - "reference": "8.x-2.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_print-8.x-2.2.zip", - "reference": "8.x-2.2", - "shasum": "5bd7671e2563a68925ab7f6ecd8dc8e8e396a0ea" - }, - "require": { - "dompdf/dompdf": "~0.8.0", - "drupal/core": "^8 || ^9" - }, - "suggest": { - "mikehaertl/phpwkhtmltopdf": "PhpWkhtmlToPdf provides the PHP library to use Wkhtmltopdf" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.2", - "datestamp": "1592533892", - "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": "Ben Dougherty", - "homepage": "https://www.drupal.org/u/benjy" - }, - { - "name": "benjy", - "homepage": "https://www.drupal.org/user/1852732" - }, - { - "name": "pameeela", - "homepage": "https://www.drupal.org/user/1431110" - } - ], - "description": "PDF print solution for any Drupal entity.", - "homepage": "http://drupal.org/project/entity_print", - "keywords": [ - "PDF", - "drupal", - "print", - "web" - ], - "support": { - "source": "https://git.drupalcode.org/project/entity_print" - } - }, - { - "name": "drupal/entity_reference_revisions", - "version": "1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "c1279e6c683edc2dbccedba8de1505340c8a62b6" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "require-dev": { - "drupal/diff": "1.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.8", - "datestamp": "1583961846", - "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": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Frans", - "homepage": "https://www.drupal.org/user/514222" - }, - { - "name": "jeroen.b", - "homepage": "https://www.drupal.org/user/1853532" - }, - { - "name": "miro_dietiker", - "homepage": "https://www.drupal.org/user/227761" - } - ], - "description": "Entity Reference Revisions", - "homepage": "https://www.drupal.org/project/entity_reference_revisions", - "support": { - "source": "https://git.drupalcode.org/project/entity_reference_revisions" - } - }, - { - "name": "drupal/externalauth", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/externalauth.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/externalauth-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "b1b38e6718fe66bd38fc894dab1f9d7a7d60f10b" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1587629529", - "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": "rgristroph", - "homepage": "https://www.drupal.org/user/516442" - }, - { - "name": "snufkin", - "homepage": "https://www.drupal.org/user/58645" - }, - { - "name": "svendecabooter", - "homepage": "https://www.drupal.org/user/35369" - } - ], - "description": "Helper module to authenticate users using an external site / service and storing identification details", - "homepage": "https://www.drupal.org/project/externalauth", - "support": { - "source": "https://git.drupalcode.org/project/externalauth" - } - }, - { - "name": "drupal/extlink", - "version": "1.5.0", - "version_normalized": "1.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/extlink.git", - "reference": "8.x-1.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "5a2b74d12ff9e9257a0566cca8dac3872da64970" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.5", - "datestamp": "1601382250", - "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": "Nate Lampton", - "homepage": "https://www.drupal.org/u/quicksketch", - "role": "Maintainer" - }, - { - "name": "Lachlan Ennis", - "homepage": "https://www.drupal.org/u/elachlan", - "role": "Maintainer" - }, - { - "name": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - } - ], - "description": "Modify behavior and appearance of external links.", - "homepage": "https://www.drupal.org/project/extlink", - "keywords": [ - "Drupal", - "External Links" - ], - "support": { - "source": "https://git.drupalcode.org/project/extlink", - "issues": "https://www.drupal.org/project/issues/extlink" - } - }, - { - "name": "drupal/facets", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/facets.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "4942b62f1cae20eaface3c0627551716c8706255" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/search_api": "~1.5" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1604397981", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "See all contributors", - "homepage": "https://www.drupal.org/node/2348769/committers" - }, - { - "name": "StryKaizer", - "homepage": "https://www.drupal.org/user/462700" - }, - { - "name": "borisson_", - "homepage": "https://www.drupal.org/user/2393360" - } - ], - "description": "The Facet module allows site builders to easily create and manage faceted search interfaces.", - "homepage": "https://www.drupal.org/project/facets", - "support": { - "source": "git://git.drupal.org/project/facets.git", - "issues": "https://www.drupal.org/project/issues/facets", - "irc": "irc://irc.freenode.org/drupal-search-api" - } - }, - { - "name": "drupal/fast_404", - "version": "2.0.0-alpha5", - "version_normalized": "2.0.0.0-alpha5", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/fast_404.git", - "reference": "8.x-2.0-alpha5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/fast_404-8.x-2.0-alpha5.zip", - "reference": "8.x-2.0-alpha5", - "shasum": "071518c28f73ed011068ec0dbfe07a5904b8f982" - }, - "require": { - "drupal/core": "^8.8" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.0-alpha5", - "datestamp": "1590876049", - "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "adammalone", - "homepage": "https://www.drupal.org/user/1295980" - }, - { - "name": "bonus", - "homepage": "https://www.drupal.org/user/360002" - }, - { - "name": "naveenvalecha", - "homepage": "https://www.drupal.org/user/2665733" - }, - { - "name": "neetu morwani", - "homepage": "https://www.drupal.org/user/2632025" - }, - { - "name": "soyarma", - "homepage": "https://www.drupal.org/user/286273" - } - ], - "homepage": "https://www.drupal.org/project/fast_404", - "support": { - "source": "https://git.drupalcode.org/project/fast_404" - } - }, - { - "name": "drupal/features", - "version": "3.12.0", - "version_normalized": "3.12.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/features.git", - "reference": "8.x-3.12" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/features-8.x-3.12.zip", - "reference": "8.x-3.12", - "shasum": "f28d6e7d3340e32666a3e8ae515ed746dbe86b98" - }, - "require": { - "drupal/config_update": "^1.4", - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.12", - "datestamp": "1612830531", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "dawehner", - "homepage": "https://www.drupal.org/user/99340" - }, - { - "name": "donquixote", - "homepage": "https://www.drupal.org/user/459338" - }, - { - "name": "e2thex", - "homepage": "https://www.drupal.org/user/189123" - }, - { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" - }, - { - "name": "flocondetoile", - "homepage": "https://www.drupal.org/user/2006064" - }, - { - "name": "jmiccolis", - "homepage": "https://www.drupal.org/user/31731" - }, - { - "name": "joseph.olstad", - "homepage": "https://www.drupal.org/user/1321830" - }, - { - "name": "mpotter", - "homepage": "https://www.drupal.org/user/616192" - }, - { - "name": "nedjo", - "homepage": "https://www.drupal.org/user/4481" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Enables administrators to package configuration into modules", - "homepage": "https://www.drupal.org/project/features", - "support": { - "source": "https://git.drupalcode.org/project/features" - } - }, - { - "name": "drupal/feeds", - "version": "3.0.0-alpha10", - "version_normalized": "3.0.0.0-alpha10", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/feeds.git", - "reference": "8.x-3.0-alpha10" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/feeds-8.x-3.0-alpha10.zip", - "reference": "8.x-3.0-alpha10", - "shasum": "84691c6258503c8d4afea5009dcd21bbd8292d49" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/pathauto": "^1.8", - "drush/drush": "^9 || ^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.0-alpha10", - "datestamp": "1612455136", - "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" - } - } - }, - "installation-source": "dist", - "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": "Ian Ward", - "homepage": "https://www.drupal.org/user/4736" - }, - { - "name": "MegaChriz", - "homepage": "https://www.drupal.org/user/654114" - }, - { - "name": "Will White", - "homepage": "https://www.drupal.org/user/32237" - }, - { - "name": "alex_b", - "homepage": "https://www.drupal.org/user/53995" - }, - { - "name": "e2thex", - "homepage": "https://www.drupal.org/user/189123" - }, - { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" - }, - { - "name": "franz", - "homepage": "https://www.drupal.org/user/581844" - }, - { - "name": "jmiccolis", - "homepage": "https://www.drupal.org/user/31731" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "kking", - "homepage": "https://www.drupal.org/user/24399" - }, - { - "name": "tobby", - "homepage": "https://www.drupal.org/user/154797" - }, - { - "name": "tristanoneil", - "homepage": "https://www.drupal.org/user/340659" - }, - { - "name": "twistor", - "homepage": "https://www.drupal.org/user/473738" - }, - { - "name": "yhahn", - "homepage": "https://www.drupal.org/user/264833" - } - ], - "description": "Aggregates RSS/Atom/RDF feeds, imports CSV files and more.", - "homepage": "https://www.drupal.org/project/feeds", - "keywords": [ - "Drupal" - ], - "support": { - "source": "https://git.drupalcode.org/project/feeds", - "issues": "https://www.drupal.org/project/issues/feeds" - } - }, - { - "name": "drupal/fences", - "version": "2.0.0-rc1", - "version_normalized": "2.0.0.0-RC1", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/fences.git", - "reference": "8.x-2.0-rc1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/fences-8.x-2.0-rc1.zip", - "reference": "8.x-2.0-rc1", - "shasum": "0ec3a95dda7bdbdd13401bc834d75a3c7dd1c256" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.0-rc1", - "datestamp": "1590457540", - "security-coverage": { - "status": "not-covered", - "message": "RC releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "CrashTest_", - "homepage": "https://www.drupal.org/user/261457" - }, - { - "name": "JohnAlbin", - "homepage": "https://www.drupal.org/user/32095" - }, - { - "name": "Sam152", - "homepage": "https://www.drupal.org/user/1485048" - }, - { - "name": "gleroux02", - "homepage": "https://www.drupal.org/user/282323" - }, - { - "name": "jensimmons", - "homepage": "https://www.drupal.org/user/140882" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - } - ], - "description": "Alter wrapping markup of fields.", - "homepage": "https://www.drupal.org/project/fences", - "support": { - "source": "https://git.drupalcode.org/project/fences" - } - }, - { - "name": "drupal/field_formatter_class", - "version": "1.5.0", - "version_normalized": "1.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/field_formatter_class.git", - "reference": "8.x-1.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_formatter_class-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "a51e0078615791a285250693a4e88775fac87b70" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.5", - "datestamp": "1610334141", - "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": "Andrew Macpherson", - "homepage": "https://www.drupal.org/u/andrewmacpherson", - "role": "maintainer" - }, - { - "name": "Oleksandr Dekhteruk", - "homepage": "https://www.drupal.org/u/pifagor", - "role": "maintainer" - }, - { - "name": "mfer", - "homepage": "https://www.drupal.org/user/25701" - }, - { - "name": "pifagor", - "homepage": "https://www.drupal.org/user/2375692" - } - ], - "description": "Provides custom HTML class settings for field formatters.", - "homepage": "https://www.drupal.org/project/field_formatter_class", - "support": { - "source": "https://git.drupalcode.org/project/field_formatter_class", - "issues": "https://www.drupal.org/project/issues/field_formatter_class" - } - }, - { - "name": "drupal/field_group", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/field_group.git", - "reference": "8.x-3.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_group-8.x-3.1.zip", - "reference": "8.x-3.1", - "shasum": "8a719eaea594f0ba874172831cb28da93c66b77a" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/jquery_ui_accordion": "^1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.1", - "datestamp": "1591772567", - "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": "Hydra", - "homepage": "https://www.drupal.org/user/647364" - }, - { - "name": "Stalski", - "homepage": "https://www.drupal.org/user/322618" - }, - { - "name": "jyve", - "homepage": "https://www.drupal.org/user/591438" - }, - { - "name": "nils.destoop", - "homepage": "https://www.drupal.org/user/361625" - }, - { - "name": "swentel", - "homepage": "https://www.drupal.org/user/107403" - } - ], - "description": "Provides the field_group module.", - "homepage": "https://www.drupal.org/project/field_group", - "support": { - "source": "https://git.drupalcode.org/project/field_group", - "issues": "https://www.drupal.org/project/issues/field_group" - } - }, - { - "name": "drupal/field_permissions", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/field_permissions.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/field_permissions-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "11e31db94999e6871ad7633455315bc27989a7ea" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1598646882", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "jhedstrom", - "homepage": "https://www.drupal.org/user/208732" - }, - { - "name": "mariacha1", - "homepage": "https://www.drupal.org/user/2210776" - }, - { - "name": "markus_petrux", - "homepage": "https://www.drupal.org/user/39593" - } - ], - "description": "The Field Permissions module allows site administrators to set field-level permissions to edit, view and create fields on any entity.", - "homepage": "https://www.drupal.org/project/field_permissions", - "support": { - "source": "https://git.drupalcode.org/project/field_permissions", - "issues": "https://www.drupal.org/project/issues/field_permissions" - } - }, - { - "name": "drupal/file_mdm", - "version": "dev-1.x", - "version_normalized": "dev-1.x", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/file_mdm.git", - "reference": "30264f78b6c6f98a614e2da8d1e0c843dce59472" - }, - "require": { - "drupal/core": "~8.0", - "lsolesen/pel": "0.9.6", - "phenx/php-font-lib": "^0.5", - "php": ">=5.6" - }, - "require-dev": { - "drupal/image_effects": "*" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.1+8-dev", - "datestamp": "1576326787", - "security-coverage": { - "status": "not-covered", - "message": "Dev releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "source", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "mondrake", - "homepage": "https://www.drupal.org/user/1307444" - } - ], - "description": "Provides a service to manage file metadata.", - "homepage": "https://www.drupal.org/project/file_mdm", - "support": { - "source": "https://git.drupalcode.org/project/file_mdm" - } - }, - { - "name": "drupal/file_mdm_exif", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "require": { - "drupal/core": "~8.0", - "drupal/file_mdm": "*" - }, - "require-dev": { - "drupal/image_effects": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1488273785", - "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": "mondrake", - "homepage": "https://www.drupal.org/user/1307444" - } - ], - "description": "Provides a file metadata plugin for EXIF image information.", - "homepage": "https://www.drupal.org/project/file_mdm", - "support": { - "source": "https://git.drupalcode.org/project/file_mdm" - } - }, - { - "name": "drupal/filefield_paths", - "version": "1.0.0-beta5", - "version_normalized": "1.0.0.0-beta5", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/filefield_paths.git", - "reference": "8.x-1.0-beta5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/filefield_paths-8.x-1.0-beta5.zip", - "reference": "8.x-1.0-beta5", - "shasum": "06719aaeee87bf5abdfb75e0079fcaf0bbd996a6" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/ctools": "*", - "drupal/pathauto": "*", - "drupal/redirect": "*", - "drupal/token": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta5", - "datestamp": "1606806673", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Deciphered", - "homepage": "https://www.drupal.org/user/103796" - }, - { - "name": "voleger", - "homepage": "https://www.drupal.org/user/3260314" - } - ], - "description": "Adds improved Token based file sorting and renaming functionalities.", - "homepage": "https://www.drupal.org/project/filefield_paths", - "support": { - "source": "https://git.drupalcode.org/project/filefield_paths" - } - }, - { - "name": "drupal/honeypot", - "version": "1.30.0", - "version_normalized": "1.30.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/honeypot.git", - "reference": "8.x-1.30" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/honeypot-8.x-1.30.zip", - "reference": "8.x-1.30", - "shasum": "1d7983e8e07feee4f13e4b05c9a10db15ae2097e" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.30", - "datestamp": "1576274288", - "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": "Jeff Geerling", - "homepage": "https://www.drupal.org/user/213194", - "email": "geerlingguy@mac.com" - }, - { - "name": "geerlingguy", - "homepage": "https://www.drupal.org/user/389011" - }, - { - "name": "vijaycs85", - "homepage": "https://www.drupal.org/user/93488" - } - ], - "description": "Mitigates spam form submissions using the honeypot method.", - "homepage": "https://www.drupal.org/project/honeypot", - "keywords": [ - "deterrent", - "form", - "honeypot", - "honeytrap", - "php", - "spam" - ], - "support": { - "source": "https://git.drupalcode.org/project/honeypot" - } - }, - { - "name": "drupal/hook_event_dispatcher", - "version": "1.29.0", - "version_normalized": "1.29.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/hook_event_dispatcher.git", - "reference": "8.x-1.29" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/hook_event_dispatcher-8.x-1.29.zip", - "reference": "8.x-1.29", - "shasum": "81cbc5f27b1e62ee323b27fb826ec75d3762c68f" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/coder": "8.3.1", - "drupal/core": "^8.8", - "drupal/eck": "^1.0@alpha", - "drupal/paragraphs": "^1.10", - "drupal/webform": "*", - "mockery/mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", - "phpmd/phpmd": "2.7.0", - "phpunit/phpunit": "^7", - "squizlabs/php_codesniffer": "^3.4" - }, - "suggest": { - "drupal/paragraphs": "Enables the creation of paragraphs entities.", - "drupal/token": "Provides additional tokens not supported by core (most notably fields), as well as a UI for browsing tokens." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.29", - "datestamp": "1589110992", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\hook_event_dispatcher\\": "src/", - "Drupal\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/src/" - } - }, - "autoload-dev": { - "psr-4": { - "Drupal\\Tests\\hook_event_dispatcher\\": "tests/src/", - "Drupal\\Tests\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/tests/src/", - "Drupal\\Tests\\": "vendor/drupal/core/tests/Drupal/Tests", - "Drupal\\TestTools\\": "vendor/drupal/core/tests/Drupal/TestTools", - "Drupal\\views\\": "vendor/drupal/core/modules/views/src/" - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "scripts": { - "test": [ - "@phplint", - "@phpunit", - "@phpcs", - "@phpmd" - ], - "phplint": [ - "vendor/bin/parallel-lint --exclude vendor/ --exclude .idea/ -e php,module,inc,install,profile,theme ." - ], - "phpunit": [ - "vendor/bin/phpunit --configuration=phpunit.xml" - ], - "phpcs": [ - "vendor/bin/phpcs --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme --report=full --warning-severity=0 ." - ], - "phpcbf": [ - "vendor/bin/phpcbf --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme ." - ], - "phpmd": [ - "vendor/bin/phpmd --exclude vendor/,.idea/ --suffixes php,module,inc,install,profile,theme . text phpmd.xml" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "pdenooijer", - "homepage": "https://www.drupal.org/user/3175437" - }, - { - "name": "robin.ingelbrecht", - "homepage": "https://www.drupal.org/user/2339074" - } - ], - "description": "Dispatches events for several drupal core hooks.", - "homepage": "https://www.drupal.org/project/hook_event_dispatcher", - "support": { - "source": "https://git.drupalcode.org/project/hook_event_dispatcher" - } - }, - { - "name": "drupal/hotjar", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/hotjar.git", - "reference": "8.x-2.0" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/hotjar-8.x-2.0.zip", - "reference": "8.x-2.0", - "shasum": "a2e21a22bcc7ba5e6f374350220eb00b1167722c" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "ext-json": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.0", - "datestamp": "1605689024", - "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": "csakiistvan", - "homepage": "https://www.drupal.org/user/491514" - }, - { - "name": "tikaszvince", - "homepage": "https://www.drupal.org/user/337178" - } - ], - "description": "Allows your site to be tracked by Hotjar by adding a Javascript tracking code to every page", - "homepage": "https://www.drupal.org/project/hotjar", - "support": { - "source": "https://git.drupalcode.org/project/hotjar" - } - }, - { - "name": "drupal/imagemagick", - "version": "2.7.0", - "version_normalized": "2.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/imagemagick.git", - "reference": "8.x-2.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imagemagick-8.x-2.7.zip", - "reference": "8.x-2.7", - "shasum": "e70fa0124305d99d5cf3f59d95c3e52657c1c8b4" - }, - "require": { - "drupal/core": "^8.3", - "drupal/file_mdm": "^1.1", - "drupal/file_mdm_exif": "^1.1", - "fileeye/mimemap": "^1.1.1" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.7", - "datestamp": "1581425670", - "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": "Chris Charlton", - "homepage": "https://www.drupal.org/user/17089" - }, - { - "name": "chx", - "homepage": "https://www.drupal.org/user/9446" - }, - { - "name": "claudiu.cristea", - "homepage": "https://www.drupal.org/user/56348" - }, - { - "name": "dman", - "homepage": "https://www.drupal.org/user/33240" - }, - { - "name": "dopry", - "homepage": "https://www.drupal.org/user/22202" - }, - { - "name": "drewish", - "homepage": "https://www.drupal.org/user/34869" - }, - { - "name": "gdl", - "homepage": "https://www.drupal.org/user/507326" - }, - { - "name": "mondrake", - "homepage": "https://www.drupal.org/user/1307444" - }, - { - "name": "quicksketch", - "homepage": "https://www.drupal.org/user/35821" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "walkah", - "homepage": "https://www.drupal.org/user/1531" - } - ], - "description": "Provides an image toolkit to integrate ImageMagick with the Image API.", - "homepage": "https://www.drupal.org/project/imagemagick", - "support": { - "source": "https://git.drupalcode.org/project/imagemagick" - } - }, - { - "name": "drupal/imce", - "version": "2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/imce.git", - "reference": "8.x-2.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imce-8.x-2.3.zip", - "reference": "8.x-2.3", - "shasum": "87548af8f66ef91146b70046755c1700a3847be6" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.3", - "datestamp": "1599926540", - "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": "See contributors", - "homepage": "https://www.drupal.org/node/2841111/committers", - "role": "Developer" - }, - { - "name": "ufku", - "homepage": "https://www.drupal.org/user/9910" - } - ], - "description": "Provides a file manager supporting personal folders.", - "homepage": "https://drupal.org/project/imce", - "support": { - "source": "https://git.drupalcode.org/project/imce", - "issues": "https://www.drupal.org/project/issues/imce?version=8.x" - } - }, - { - "name": "drupal/jquery_ui", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/jquery_ui.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jquery_ui-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "64c19ecc8902e2b4b1ab0cc5f5fe28dbc83bfebe" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1582149957", - "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": "RobLoach", - "homepage": "https://www.drupal.org/user/61114" - }, - { - "name": "jjeff", - "homepage": "https://www.drupal.org/user/17190" - }, - { - "name": "lauriii", - "homepage": "https://www.drupal.org/user/1078742" - }, - { - "name": "litwol", - "homepage": "https://www.drupal.org/user/78134" - }, - { - "name": "mfb", - "homepage": "https://www.drupal.org/user/12302" - }, - { - "name": "mfer", - "homepage": "https://www.drupal.org/user/25701" - }, - { - "name": "mikelutz", - "homepage": "https://www.drupal.org/user/2972409" - }, - { - "name": "sun", - "homepage": "https://www.drupal.org/user/54136" - }, - { - "name": "webchick", - "homepage": "https://www.drupal.org/user/24967" - }, - { - "name": "zrpnr", - "homepage": "https://www.drupal.org/user/1448368" - } - ], - "description": "Provides jQuery UI library.", - "homepage": "https://www.drupal.org/project/jquery_ui", - "support": { - "source": "https://git.drupalcode.org/project/jquery_ui" - } - }, - { - "name": "drupal/jquery_ui_draggable", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/jquery_ui_draggable.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jquery_ui_draggable-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "09e17046e38aebf84ed573822b0d5be6de3f0c94" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/jquery_ui": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1582150027", - "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": "bnjmnm", - "homepage": "https://www.drupal.org/user/2369194" - }, - { - "name": "lauriii", - "homepage": "https://www.drupal.org/user/1078742" - }, - { - "name": "zrpnr", - "homepage": "https://www.drupal.org/user/1448368" - } - ], - "description": "Provides jQuery UI Draggable library.", - "homepage": "https://www.drupal.org/project/jquery_ui_draggable", - "support": { - "source": "https://git.drupalcode.org/project/jquery_ui_draggable" - } - }, - { - "name": "drupal/jquery_ui_droppable", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/jquery_ui_droppable.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jquery_ui_droppable-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "6e53043f2d3215f211721eea4d4c6ab5d1672b14" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/jquery_ui": "*", - "drupal/jquery_ui_draggable": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1582150071", - "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": "bnjmnm", - "homepage": "https://www.drupal.org/user/2369194" - }, - { - "name": "lauriii", - "homepage": "https://www.drupal.org/user/1078742" - }, - { - "name": "zrpnr", - "homepage": "https://www.drupal.org/user/1448368" - } - ], - "description": "Provides jQuery UI Droppable library.", - "homepage": "https://www.drupal.org/project/jquery_ui_droppable", - "support": { - "source": "https://git.drupalcode.org/project/jquery_ui_droppable" - } - }, - { - "name": "drupal/kint", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "require": { - "drupal/core": "~8.0", - "drupal/devel": "^2" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-2.1", - "datestamp": "1556799496", - "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": "drupalspoons", - "homepage": "https://www.drupal.org/user/3647684" - }, - { - "name": "moshe weitzman", - "homepage": "https://www.drupal.org/user/23" - } - ], - "description": "Wrapper for Kint debugging tool.", - "homepage": "https://www.drupal.org/project/devel", - "support": { - "source": "https://git.drupalcode.org/project/devel" - } - }, - { - "name": "drupal/ludwig", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ludwig.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "33b1fcfb794cb69a1425bf4259a7a3847301fd49" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1611958525", - "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": "bojanz", - "homepage": "https://www.drupal.org/user/86106" - }, - { - "name": "devad", - "homepage": "https://www.drupal.org/user/2268520" - }, - { - "name": "jsacksick", - "homepage": "https://www.drupal.org/user/972218" - }, - { - "name": "mglaman", - "homepage": "https://www.drupal.org/user/2416470" - } - ], - "description": "Provides a manual alternative to Composer.", - "homepage": "https://www.drupal.org/project/ludwig", - "support": { - "source": "https://git.drupalcode.org/project/ludwig" - } - }, - { - "name": "drupal/mailsystem", - "version": "4.3.0", - "version_normalized": "4.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/mailsystem.git", - "reference": "8.x-4.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/mailsystem-8.x-4.3.zip", - "reference": "8.x-4.3", - "shasum": "1a74016e268ff207535be5d5e42ac8f72ac89050" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.3", - "datestamp": "1586203024", - "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": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Les Lim", - "homepage": "https://www.drupal.org/user/84263" - }, - { - "name": "Manuel Garcia", - "homepage": "https://www.drupal.org/user/213194" - }, - { - "name": "Nafes", - "homepage": "https://www.drupal.org/user/2489926" - }, - { - "name": "miro_dietiker", - "homepage": "https://www.drupal.org/user/227761" - }, - { - "name": "pillarsdotnet", - "homepage": "https://www.drupal.org/user/36148" - } - ], - "description": "Mail System", - "homepage": "https://www.drupal.org/project/mailsystem", - "support": { - "source": "https://git.drupalcode.org/project/mailsystem" - } - }, - { - "name": "drupal/matomo", - "version": "1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/matomo.git", - "reference": "8.x-1.11" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/matomo-8.x-1.11.zip", - "reference": "8.x-1.11", - "shasum": "82be96c20ab15df03d199ab98d047cef6e67d40b" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/php": "*", - "drupal/token": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.11", - "datestamp": "1601651459", - "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": "Carsten Logemann", - "homepage": "https://www.drupal.org/u/C_Logemann" - }, - { - "name": "Shelane French", - "homepage": "https://www.drupal.org/u/shelane" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/247808/committers" - } - ], - "description": "Adds Matomo javascript tracking code to all your site's pages", - "homepage": "https://www.drupal.org/project/matomo", - "support": { - "source": "https://git.drupal.org/project/matomo.git", - "issues": "https://www.drupal.org/project/issues/matomo" - } - }, - { - "name": "drupal/memcache", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/memcache.git", - "reference": "8.x-2.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.2.zip", - "reference": "8.x-2.2", - "shasum": "1d9876763c7ef04a9bba698ddcadbe708037fed2" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.2", - "datestamp": "1601053267", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-2.x": "2.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Fabianx", - "homepage": "https://www.drupal.org/user/693738" - }, - { - "name": "Jeremy", - "homepage": "https://www.drupal.org/user/409" - }, - { - "name": "bdragon", - "homepage": "https://www.drupal.org/user/53081" - }, - { - "name": "catch", - "homepage": "https://www.drupal.org/user/35733" - }, - { - "name": "damiankloip", - "homepage": "https://www.drupal.org/user/1037976" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "jvandyk", - "homepage": "https://www.drupal.org/user/2375" - }, - { - "name": "robertDouglass", - "homepage": "https://www.drupal.org/user/5449" - } - ], - "description": "High performance integration with memcache.", - "homepage": "http://drupal.org/project/memcache", - "support": { - "source": "https://git.drupalcode.org/project/memcache", - "issues": "https://www.drupal.org/project/issues/memcache" - } - }, - { - "name": "drupal/menu_block", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/menu_block.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/menu_block-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "3da96af15c3a5f5f1966e28b6e87b74228617998" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1587721600", - "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": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "JohnAlbin", - "homepage": "https://www.drupal.org/user/32095" - }, - { - "name": "RenatoG", - "homepage": "https://www.drupal.org/user/3326031" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "kim.pepper", - "homepage": "https://www.drupal.org/user/370574" - }, - { - "name": "rrrob", - "homepage": "https://www.drupal.org/user/273533" - } - ], - "description": "Provides configurable blocks of menu links.", - "homepage": "https://www.drupal.org/project/menu_block", - "support": { - "source": "https://git.drupalcode.org/project/menu_block" - } - }, - { - "name": "drupal/menu_breadcrumb", - "version": "1.14.0", - "version_normalized": "1.14.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/menu_breadcrumb.git", - "reference": "8.x-1.14" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/menu_breadcrumb-8.x-1.14.zip", - "reference": "8.x-1.14", - "shasum": "3edeb447410cdb0635d0babbfc641010014bee7f" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.14", - "datestamp": "1598626277", - "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": "RyanPrice", - "homepage": "https://www.drupal.org/user/873848" - }, - { - "name": "aaron", - "homepage": "https://www.drupal.org/user/33420" - }, - { - "name": "gdevlugt", - "homepage": "https://www.drupal.org/user/167273" - }, - { - "name": "rphair", - "homepage": "https://www.drupal.org/user/3196607" - }, - { - "name": "vaibhavjain", - "homepage": "https://www.drupal.org/user/1159692" - }, - { - "name": "xurizaemon", - "homepage": "https://www.drupal.org/user/76026" - } - ], - "description": "Create breadcrumbs from nested menu titles and/or taxonomy membership.", - "homepage": "https://www.drupal.org/project/menu_breadcrumb", - "support": { - "source": "https://git.drupalcode.org/project/menu_breadcrumb" - } - }, - { - "name": "drupal/menu_force", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/menu_force.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/menu_force-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "96036cf057002223ee08d1f03e494cbad25439ac" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1593463689", - "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": "BarisW", - "homepage": "https://www.drupal.org/user/107229" - }, - { - "name": "perennial.sky", - "homepage": "https://www.drupal.org/user/2622667" - }, - { - "name": "scuba_fly", - "homepage": "https://www.drupal.org/user/953390" - } - ], - "description": "Makes sure a node gets added to the menu system on specific content types", - "homepage": "https://www.drupal.org/project/menu_force", - "support": { - "source": "https://git.drupalcode.org/project/menu_force" - } - }, - { - "name": "drupal/metatag", - "version": "1.15.0", - "version_normalized": "1.15.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "8.x-1.15" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.15.zip", - "reference": "8.x-1.15", - "shasum": "7658d7286fdc075ea72a6ec36aea737b1182b5d8" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/token": "^1.0" - }, - "require-dev": { - "drupal/metatag_dc": "*", - "drupal/metatag_open_graph": "*", - "drupal/page_manager": "4.x-dev", - "drupal/panelizer": "4.x-dev", - "drupal/redirect": "1.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.15", - "datestamp": "1611210662", - "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": "See contributors", - "homepage": "https://www.drupal.org/node/640498/committers", - "role": "Developer" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - } - ], - "description": "Manage meta tags for all entities.", - "homepage": "https://www.drupal.org/project/metatag", - "keywords": [ - "Drupal", - "seo" - ], - "support": { - "source": "https://git.drupalcode.org/project/metatag", - "issues": "https://www.drupal.org/project/issues/metatag", - "docs": "https://www.drupal.org/docs/8/modules/metatag" - } - }, - { - "name": "drupal/migrate_devel", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_devel.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_devel-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "d8b6c8b1c6238a3a1cae241ce5dca759028c9504" - }, - "require": { - "drupal/core": "^8", - "drupal/devel": "*", - "drupal/kint": "*" - }, - "conflict": { - "drupal/core": ">=9", - "drush/drush": ">=9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1592350448", - "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": "Derimagia", - "homepage": "https://www.drupal.org/user/819640" - }, - { - "name": "aczietlow", - "homepage": "https://www.drupal.org/user/1616656" - }, - { - "name": "andrewmacpherson", - "homepage": "https://www.drupal.org/user/265648" - } - ], - "description": "Migrate Development Tools", - "homepage": "https://www.drupal.org/project/migrate_devel", - "support": { - "source": "https://git.drupalcode.org/project/migrate_devel", - "issues": "https://www.drupal.org/project/issues/migrate_devel" - } - }, - { - "name": "drupal/migrate_plus", - "version": "4.2.0", - "version_normalized": "4.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_plus.git", - "reference": "8.x-4.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_plus-8.x-4.2.zip", - "reference": "8.x-4.2", - "shasum": "5736a43e39cc5c091d54ceef2849ea35ba979af3" - }, - "require": { - "drupal/core": "^8.3" - }, - "require-dev": { - "drupal/entity": "*", - "drupal/migrate_example_advanced_setup": "*", - "drupal/migrate_example_setup": "*", - "drupal/migrate_tools": "*", - "drupal/profile": "*" - }, - "suggest": { - "ext-soap": "*", - "sainsburys/guzzle-oauth2-plugin": "3.0 required for the OAuth2 authentication plugin" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.2", - "datestamp": "1555683487", - "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": "Mike Ryan", - "homepage": "https://www.drupal.org/u/mikeryan", - "role": "Maintainer" - }, - { - "name": "mikeryan", - "homepage": "https://www.drupal.org/user/4420" - } - ], - "description": "Enhancements to core migration support.", - "homepage": "https://www.drupal.org/project/migrate_plus", - "support": { - "source": "https://cgit.drupalcode.org/migrate_plus", - "issues": "https://www.drupal.org/project/issues/migrate_plus", - "irc": "irc://irc.freenode.org/drupal-migrate" - } - }, - { - "name": "drupal/migrate_tools", - "version": "4.5.0", - "version_normalized": "4.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_tools.git", - "reference": "8.x-4.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_tools-8.x-4.5.zip", - "reference": "8.x-4.5", - "shasum": "06390b359bf53c50a30f2d6dc4c7542bfb1fe7ca" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/migrate_plus": "^4 || ^5" - }, - "require-dev": { - "drupal/migrate_plus": "4.x-dev", - "drupal/migrate_source_csv": "^2.2", - "drush/drush": "^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.5", - "datestamp": "1574693285", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "drupalspoons", - "homepage": "https://www.drupal.org/user/3647684" - }, - { - "name": "mikeryan", - "homepage": "https://www.drupal.org/user/4420" - } - ], - "description": "Tools to assist in developing and running migrations.", - "homepage": "http://drupal.org/project/migrate_tools", - "support": { - "source": "http://cgit.drupalcode.org/migrate_tools", - "issues": "http://drupal.org/project/migrate_tools", - "irc": "irc://irc.freenode.org/drupal-migrate" - } - }, - { - "name": "drupal/migrate_upgrade", - "version": "3.2.0", - "version_normalized": "3.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/migrate_upgrade.git", - "reference": "8.x-3.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/migrate_upgrade-8.x-3.2.zip", - "reference": "8.x-3.2", - "shasum": "f7be28c9fa9e2c56db24fafaf4e9cd6815582aed" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/migrate_plus": "^4 || ^5", - "drush/drush": "^8 || ^9 || ^10", - "php": ">7.1" - }, - "require-dev": { - "drupal/migrate_plus": "^5", - "drush/drush": "^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.2", - "datestamp": "1588260599", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Mike Ryan", - "homepage": "https://www.drupal.org/u/mikeryan", - "role": "Maintainer" - }, - { - "name": "Lucas Hedding", - "homepage": "https://www.drupal.org/u/heddn", - "role": "Maintainer" - } - ], - "description": "Drush support for direct upgrades from older Drupal versions.", - "homepage": "https://www.drupal.org/project/migrate_upgrade", - "support": { - "source": "https://git.drupalcode.org/project/migrate_upgrade", - "issues": "https://www.drupal.org/project/issues/migrate_upgrade", - "slack": "#migrate" - } - }, - { - "name": "drupal/module_filter", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/module_filter.git", - "reference": "8.x-3.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.1.zip", - "reference": "8.x-3.1", - "shasum": "39d627ce60280ae54bcf9beae217b85cce1969e4" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.1", - "datestamp": "1507650844", - "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": "andrey.troeglazov", - "homepage": "https://www.drupal.org/user/3145389" - }, - { - "name": "greenSkin", - "homepage": "https://www.drupal.org/user/173855" - } - ], - "description": "Filter the modules list.", - "homepage": "https://www.drupal.org/project/module_filter", - "support": { - "source": "https://git.drupalcode.org/project/module_filter" - } - }, - { - "name": "drupal/node_view_permissions", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/node_view_permissions.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/node_view_permissions-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "ba113ff1be022517a739dbf16d5caaae6dcccfd9" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1603096039", - "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": "adci_contributor", - "homepage": "https://www.drupal.org/user/1830536" - }, - { - "name": "adcillc", - "homepage": "https://www.drupal.org/user/366450" - }, - { - "name": "hoter", - "homepage": "https://www.drupal.org/user/1677790" - } - ], - "description": "Enables permissions \"View own content\" and \"View any content\" for each content type.", - "homepage": "https://www.drupal.org/project/node_view_permissions", - "support": { - "source": "https://git.drupalcode.org/project/node_view_permissions" - } - }, - { - "name": "drupal/openid_connect", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/openid_connect.git", - "reference": "8.x-1.0" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/openid_connect-8.x-1.0.zip", - "reference": "8.x-1.0", - "shasum": "62127d6f81950124c41a76f921678ab6f0a651e3" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "ext-json": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0", - "datestamp": "1608316550", - "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": "Mario Steinitz", - "homepage": "https://www.drupal.org/user/2536014" - }, - { - "name": "balintk", - "homepage": "https://www.drupal.org/user/613760" - }, - { - "name": "bojanz", - "homepage": "https://www.drupal.org/user/86106" - }, - { - "name": "jcnventura", - "homepage": "https://www.drupal.org/user/122464" - }, - { - "name": "pfrilling", - "homepage": "https://www.drupal.org/user/169695" - }, - { - "name": "pjcdawkins", - "homepage": "https://www.drupal.org/user/1025236" - }, - { - "name": "robertDouglass", - "homepage": "https://www.drupal.org/user/5449" - }, - { - "name": "sanduhrs", - "homepage": "https://www.drupal.org/user/28074" - } - ], - "description": "A pluggable client implementation for the OpenID Connect protocol.", - "homepage": "https://www.drupal.org/project/openid_connect", - "keywords": [ - "Drupal" - ], - "support": { - "source": "https://git.drupalcode.org/project/openid_connect", - "issues": "https://www.drupal.org/project/issues/openid_connect" - } - }, - { - "name": "drupal/panelbutton", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/panelbutton.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/panelbutton-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "1d65e6b9d9b1dfbc27364e2b713f63826bc33031" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1592593051", - "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": "Kevin Quillen (kevinquillen)", - "homepage": "https://www.drupal.org/u/kevinquillen", - "role": "Maintainer" - }, - { - "name": "ddrozdik", - "homepage": "https://www.drupal.org/user/574124" - }, - { - "name": "kevinquillen", - "homepage": "https://www.drupal.org/user/317279" - } - ], - "description": "Adds the Panel Button plugin to CKEditor. This plugin is a utility plugin that is required by certain user-facing CKEditor plugins.", - "homepage": "http://drupal.org/project/panelbutton", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/panelbutton", - "issues": "http://drupal.org/project/issues/panelbutton" - } - }, - { - "name": "drupal/panelizer", - "version": "4.4.0", - "version_normalized": "4.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/panelizer.git", - "reference": "8.x-4.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/panelizer-8.x-4.4.zip", - "reference": "8.x-4.4", - "shasum": "2d19f0be1ad05a0882a276befabf746041b1b5d8" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/ctools": ">=3.1.0", - "drupal/ctools_block": "*", - "drupal/panels": ">=4.4.0", - "drupal/panels_ipe": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.4", - "datestamp": "1588097387", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-4.x": "4.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Damien McKenna", - "homepage": "https://www.drupal.org/u/damienmckenna" - }, - { - "name": "Kris Vanderwater", - "homepage": "https://www.drupal.org/u/eclipsegc" - }, - { - "name": "David Snopek", - "homepage": "https://www.drupal.org/u/dsnopek" - }, - { - "name": "Jakob Perry", - "homepage": "https://www.drupal.org/u/japerry" - }, - { - "name": "Earl Miles", - "homepage": "https://www.drupal.org/u/merlinofchaos" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/1072922/committers" - }, - { - "name": "phenaproxima", - "homepage": "https://www.drupal.org/user/205645" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Allow any entity view mode to be rendered using a Panels display.", - "homepage": "https://www.drupal.org/project/panelizer", - "support": { - "source": "http://git.drupal.org/project/panelizer.git", - "issues": "https://www.drupal.org/project/issues/panelizer", - "irc": "irc://irc.freenode.org/drupal-scotch" - } - }, - { - "name": "drupal/panels", - "version": "4.6.0", - "version_normalized": "4.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/panels.git", - "reference": "8.x-4.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/panels-8.x-4.6.zip", - "reference": "8.x-4.6", - "shasum": "6430436a4d8fb64f8c113729dd92505a1e46b794" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/ctools": ">=3.0.0", - "drupal/jquery_ui_droppable": "^1.2" - }, - "require-dev": { - "drupal/jquery_ui_droppable": "*", - "drupal/page_manager": "^4" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.6", - "datestamp": "1585870866", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "branch-alias": { - "dev-8.x-4.x": "4.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Jakob Perry", - "homepage": "https://www.drupal.org/u/japerry" - }, - { - "name": "Samuel Mortenson", - "homepage": "https://www.drupal.org/u/samuel.mortenson" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/74958/committers" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "phenaproxima", - "homepage": "https://www.drupal.org/user/205645" - }, - { - "name": "samuel.mortenson", - "homepage": "https://www.drupal.org/user/2582268" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Core Panels display functions; provides no external UI, at least one other Panels module should be enabled.", - "homepage": "https://www.drupal.org/project/panels", - "support": { - "source": "http://git.drupal.org/project/panels.git", - "issues": "https://www.drupal.org/project/issues/panels", - "irc": "irc://irc.freenode.org/drupal-scotch" - } - }, - { - "name": "drupal/panels_ipe", - "version": "4.6.0", - "version_normalized": "4.6.0.0", - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/jquery_ui_droppable": "*", - "drupal/panels": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-4.6", - "datestamp": "1585870866", - "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": "EclipseGc", - "homepage": "https://www.drupal.org/user/61203" - }, - { - "name": "Letharion", - "homepage": "https://www.drupal.org/user/373603" - }, - { - "name": "esmerel", - "homepage": "https://www.drupal.org/user/164022" - }, - { - "name": "japerry", - "homepage": "https://www.drupal.org/user/45640" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - }, - { - "name": "merlinofchaos", - "homepage": "https://www.drupal.org/user/26979" - }, - { - "name": "neclimdul", - "homepage": "https://www.drupal.org/user/48673" - }, - { - "name": "phenaproxima", - "homepage": "https://www.drupal.org/user/205645" - }, - { - "name": "samuel.mortenson", - "homepage": "https://www.drupal.org/user/2582268" - }, - { - "name": "tim.plunkett", - "homepage": "https://www.drupal.org/user/241634" - } - ], - "description": "Panels In-place editor.", - "homepage": "https://www.drupal.org/project/panels", - "support": { - "source": "https://git.drupalcode.org/project/panels" - } - }, - { - "name": "drupal/paragraphs", - "version": "1.12.0", - "version_normalized": "1.12.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/paragraphs.git", - "reference": "8.x-1.12" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.12.zip", - "reference": "8.x-1.12", - "shasum": "3b67d8af1160af42d93a4610be1e02869e428965" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/entity_reference_revisions": "~1.3" - }, - "require-dev": { - "drupal/block_field": "~1.0", - "drupal/ctools": "3.x-dev", - "drupal/diff": "~1.0", - "drupal/entity_browser": "2.x-dev", - "drupal/entity_usage": "2.x-dev", - "drupal/field_group": "3.x-dev", - "drupal/inline_entity_form": "~1.0", - "drupal/paragraphs-paragraphs_library": "*", - "drupal/replicate": "~1.0", - "drupal/search_api": "~1.0", - "drupal/search_api_db": "*" - }, - "suggest": { - "drupal/entity_browser": "Recommended for an improved user experience when using the Paragraphs library module" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.12", - "datestamp": "1590140081", - "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": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Frans", - "homepage": "https://www.drupal.org/user/514222" - }, - { - "name": "Primsi", - "homepage": "https://www.drupal.org/user/282629" - }, - { - "name": "jeroen.b", - "homepage": "https://www.drupal.org/user/1853532" - }, - { - "name": "jstoller", - "homepage": "https://www.drupal.org/user/99012" - }, - { - "name": "miro_dietiker", - "homepage": "https://www.drupal.org/user/227761" - } - ], - "description": "Enables the creation of Paragraphs entities.", - "homepage": "https://www.drupal.org/project/paragraphs", - "support": { - "source": "https://git.drupalcode.org/project/paragraphs" - } - }, - { - "name": "drupal/pathauto", - "version": "1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/pathauto.git", - "reference": "8.x-1.8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/pathauto-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "ede3216abb9c4f77709338d9147334c595046329" - }, - "require": { - "drupal/core": "^8.8 || ^9", - "drupal/ctools": "*", - "drupal/token": "*" - }, - "suggest": { - "drupal/redirect": "When installed Pathauto will provide a new \"Update Action\" in case your URLs change. This is the recommended update action and is considered the best practice for SEO and usability." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.8", - "datestamp": "1588103046", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "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": "Freso", - "homepage": "https://www.drupal.org/user/27504" - }, - { - "name": "greggles", - "homepage": "https://www.drupal.org/user/36762" - } - ], - "description": "Provides a mechanism for modules to automatically generate aliases for the content they manage.", - "homepage": "https://www.drupal.org/project/pathauto", - "support": { - "source": "https://cgit.drupalcode.org/pathauto", - "issues": "https://www.drupal.org/project/issues/pathauto", - "documentation": "https://www.drupal.org/docs/8/modules/pathauto" - } - }, - { - "name": "drupal/permissions_by_term", - "version": "2.29.0", - "version_normalized": "2.29.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/permissions_by_term.git", - "reference": "8.x-2.29" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.29.zip", - "reference": "8.x-2.29", - "shasum": "40d06fb24d271d2022481fcedc0d4e9c042b6e3b" - }, - "require": { - "drupal/core": "^8.0", - "php": ">=7.1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.29", - "datestamp": "1612278248", - "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": "Peter Majmesku", - "homepage": "https://www.drupal.org/user/786132", - "email": "majmesku@publicplan.de" - }, - { - "name": "SaschaHannes", - "homepage": "https://www.drupal.org/user/3536189" - }, - { - "name": "marcoliver", - "homepage": "https://www.drupal.org/user/1529744" - } - ], - "description": "Restricts access to nodes by taxonomy terms in relation to users and their roles.", - "homepage": "https://www.drupal.org/project/permissions_by_term", - "support": { - "source": "https://git.drupalcode.org/project/permissions_by_term" - } - }, - { - "name": "drupal/piwik", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/piwik.git", - "reference": "8.x-1.4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/piwik-8.x-1.4.zip", - "reference": "8.x-1.4", - "shasum": "3692831f4b3de636e90679fb052ba8f30e49ac97" - }, - "require": { - "drupal/core": "~8.0", - "drupal/matomo": "^1.0" - }, - "require-dev": { - "drupal/php": "*", - "drupal/token": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.4", - "datestamp": "1530437786", - "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": "hass", - "homepage": "https://www.drupal.org/u/hass" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/247808/committers" - } - ], - "description": "Adds Piwik javascript tracking code to all your site's pages", - "homepage": "https://www.drupal.org/project/piwik", - "support": { - "source": "http://git.drupal.org/project/piwik.git", - "issues": "https://www.drupal.org/project/issues/piwik" - } - }, - { - "name": "drupal/recaptcha", - "version": "2.5.0", - "version_normalized": "2.5.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/recaptcha.git", - "reference": "8.x-2.5" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/recaptcha-8.x-2.5.zip", - "reference": "8.x-2.5", - "shasum": "ffc4e334c2b09cb04b75fa9e0df3f63d1ebde0bc" - }, - "require": { - "drupal/captcha": "^1.0.0-alpha1", - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.5", - "datestamp": "1580340616", - "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": "hass", - "homepage": "https://www.drupal.org/u/hass" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/147903/committers" - }, - { - "name": "amykhailova", - "homepage": "https://www.drupal.org/user/2892725" - }, - { - "name": "diolan", - "homepage": "https://www.drupal.org/user/2336786" - }, - { - "name": "hass", - "homepage": "https://www.drupal.org/user/85918" - }, - { - "name": "id.medion", - "homepage": "https://www.drupal.org/user/2542592" - }, - { - "name": "kim.pepper", - "homepage": "https://www.drupal.org/user/370574" - }, - { - "name": "rfay", - "homepage": "https://www.drupal.org/user/30906" - }, - { - "name": "soxofaan", - "homepage": "https://www.drupal.org/user/41478" - }, - { - "name": "wundo", - "homepage": "https://www.drupal.org/user/25523" - } - ], - "description": "Protect your website from spam and abuse while letting real people pass through with ease.", - "homepage": "https://www.drupal.org/project/recaptcha", - "support": { - "source": "https://git.drupal.org/project/recaptcha.git", - "issues": "https://www.drupal.org/project/issues/recaptcha" - } - }, - { - "name": "drupal/redirect", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/redirect.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/redirect-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "f848e001deac8425ae57d4b9397087c491d37294" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1589312204", - "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": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "pifagor", - "homepage": "https://www.drupal.org/user/2375692" - } - ], - "description": "Allows users to redirect from old URLs to new URLs.", - "homepage": "https://www.drupal.org/project/redirect", - "support": { - "source": "https://git.drupalcode.org/project/redirect" - } - }, - { - "name": "drupal/require_login", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/require_login.git", - "reference": "8.x-2.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.1.zip", - "reference": "8.x-2.1", - "shasum": "5e1e1e95597005fc132744c42547bf6d16c3a60d" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.1", - "datestamp": "1551549486", - "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": "robphillips", - "homepage": "https://www.drupal.org/user/459772" - } - ], - "description": "Require login authentication regardless of user permissions.", - "homepage": "https://www.drupal.org/project/require_login", - "support": { - "source": "https://git.drupalcode.org/project/require_login" - } - }, - { - "name": "drupal/rules", - "version": "3.0.0-alpha6", - "version_normalized": "3.0.0.0-alpha6", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/rules.git", - "reference": "8.x-3.0-alpha6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/rules-8.x-3.0-alpha6.zip", - "reference": "8.x-3.0-alpha6", - "shasum": "073bf5c23f0ef8f1aebf56538249d50d631d5a24" - }, - "require": { - "drupal/core": "^8.7", - "drupal/typed_data": "1.x-dev" - }, - "require-dev": { - "drupal/typed_data": "1.x-dev" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.0-alpha6", - "datestamp": "1595975406", - "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TR", - "homepage": "https://www.drupal.org/user/202830" - }, - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - }, - { - "name": "klausi", - "homepage": "https://www.drupal.org/user/262198" - } - ], - "description": "React on events and conditionally evaluate actions.", - "homepage": "https://www.drupal.org/project/rules", - "support": { - "source": "https://git.drupalcode.org/project/rules", - "issues": "https://www.drupal.org/project/issues/rules" - } - }, - { - "name": "drupal/scheduler", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/scheduler.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/scheduler-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "704f9e289c7a42ddfb65297beb0be02e324f02c6" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/devel_generate": "^2.0 || 3.x-dev", - "drupal/rules": "^3", - "drush/drush": "^9.0 || ^10" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1591436219", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Eric Schaefer (Eric Schaefer)", - "homepage": "https://www.drupal.org/u/eric-schaefer", - "role": "Maintainer" - }, - { - "name": "Jonathan Smith (jonathan1055)", - "homepage": "https://www.drupal.org/u/jonathan1055", - "role": "Maintainer" - }, - { - "name": "Pieter Frenssen (pfrenssen)", - "homepage": "https://www.drupal.org/u/pfrenssen", - "role": "Maintainer" - }, - { - "name": "Rick Manelius (rickmanelius)", - "homepage": "https://www.drupal.org/u/rickmanelius", - "role": "Maintainer" - } - ], - "description": "Automatically publish and unpublish content at specified dates and times.", - "homepage": "https://drupal.org/project/scheduler", - "support": { - "source": "https://git.drupalcode.org/project/scheduler", - "issues": "https://www.drupal.org/project/issues/scheduler" - } - }, - { - "name": "drupal/search_api", - "version": "1.19.0", - "version_normalized": "1.19.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/search_api.git", - "reference": "8.x-1.19" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/search_api-8.x-1.19.zip", - "reference": "8.x-1.19", - "shasum": "5654e9d02117e28c585d89a25ea3cc40d20c5019" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "conflict": { - "drupal/search_api_solr": "2.* || 3.0 || 3.1" - }, - "require-dev": { - "drupal/language_fallback_fix": "@dev", - "drupal/search_api_autocomplete": "@dev", - "drupal/search_api_db": "*" - }, - "suggest": { - "drupal/facets": "Adds the ability to create faceted searches.", - "drupal/search_api_autocomplete": "Allows adding autocomplete suggestions to search fields.", - "drupal/search_api_solr": "Adds support for using Apache Solr as a backend." - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.19", - "datestamp": "1612192040", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Thomas Seidl", - "homepage": "https://www.drupal.org/u/drunken-monkey" - }, - { - "name": "Nick Veenhof", - "homepage": "https://www.drupal.org/u/nick_vh" - }, - { - "name": "See other contributors", - "homepage": "https://www.drupal.org/node/790418/committers" - } - ], - "description": "Provides a generic framework for modules offering search capabilities.", - "homepage": "https://www.drupal.org/project/search_api", - "support": { - "source": "https://git.drupalcode.org/project/search_api", - "issues": "https://www.drupal.org/project/issues/search_api", - "irc": "irc://irc.freenode.org/drupal-search-api" - } - }, - { - "name": "drupal/simplesamlphp_auth", - "version": "3.2.0", - "version_normalized": "3.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/simplesamlphp_auth.git", - "reference": "8.x-3.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.2.zip", - "reference": "8.x-3.2", - "shasum": "a5a2b10fc873eb8669929ad1a6d9599e47a2ca99" - }, - "require": { - "drupal/core": "^8.7|^9.0", - "drupal/externalauth": "^1.1", - "simplesamlphp/simplesamlphp": "^1.18.2" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-3.2", - "datestamp": "1580423953", - "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": "Berdir", - "homepage": "https://www.drupal.org/user/214652" - }, - { - "name": "colan", - "homepage": "https://www.drupal.org/user/58704" - }, - { - "name": "dakku", - "homepage": "https://www.drupal.org/user/97634" - }, - { - "name": "geekwisdom", - "homepage": "https://www.drupal.org/user/1662" - }, - { - "name": "snufkin", - "homepage": "https://www.drupal.org/user/58645" - }, - { - "name": "svendecabooter", - "homepage": "https://www.drupal.org/user/35369" - } - ], - "description": "Allows users to authenticate to a remote SAML identity provider (IdP) via a locally configured SimpleSAMLphp service point (SP).", - "homepage": "https://www.drupal.org/project/simplesamlphp_auth", - "support": { - "source": "https://git.drupalcode.org/project/simplesamlphp_auth" - } - }, - { - "name": "drupal/smart_trim", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/smart_trim.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/smart_trim-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "5894aa067fba19a3452ed8ce749f33bd9ae91907" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1589766531", - "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": "Mark Casias (markie)", - "homepage": "https://www.drupal.org/u/markie", - "role": "Maintainer" - }, - { - "name": "newsignature", - "homepage": "https://www.drupal.org/user/765518" - }, - { - "name": "ultimike", - "homepage": "https://www.drupal.org/user/51132" - }, - { - "name": "volkswagenchick", - "homepage": "https://www.drupal.org/user/3332522" - } - ], - "description": "Provides a more robust alternative to 'summary or trimmed' textfield format.", - "homepage": "https://drupal.org/project/smart_trim", - "support": { - "source": "https://cgit.drupalcode.org/smart_trim", - "issues": "https://drupal.org/project/issues/smart_trim" - } - }, - { - "name": "drupal/sticky", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/sticky.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/sticky-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "98735598ba94c5ef2c0ae2ee77717174994724a4" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1491909243", - "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": "f0ns", - "homepage": "https://www.drupal.org/user/723426" - } - ], - "description": "Sticky is a module that gives you the ability to make any element on your website to always stay visible.", - "homepage": "https://www.drupal.org/project/sticky", - "support": { - "source": "https://git.drupalcode.org/project/sticky" - } - }, - { - "name": "drupal/token", - "version": "1.9.0", - "version_normalized": "1.9.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/token.git", - "reference": "8.x-1.9" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/token-8.x-1.9.zip", - "reference": "8.x-1.9", - "shasum": "a5d234382a1a0e4ba61d4c7a2fa10671ca656be4" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.9", - "datestamp": "1608284866", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "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": "eaton", - "homepage": "https://www.drupal.org/user/16496" - }, - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - }, - { - "name": "greggles", - "homepage": "https://www.drupal.org/user/36762" - }, - { - "name": "mikeryan", - "homepage": "https://www.drupal.org/user/4420" - } - ], - "description": "Provides a user interface for the Token API, some missing core tokens.", - "homepage": "https://www.drupal.org/project/token", - "support": { - "source": "https://git.drupalcode.org/project/token" - } - }, - { - "name": "drupal/twig_tweak", - "version": "2.9.0", - "version_normalized": "2.9.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/twig_tweak.git", - "reference": "8.x-2.9" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/twig_tweak-8.x-2.9.zip", - "reference": "8.x-2.9", - "shasum": "c45ba1a41e323a432d1ff36d0a72344b88595a39" - }, - "require": { - "drupal/core": "^8.7 || ^9.0", - "twig/twig": "^1.41 || ^2.12" - }, - "suggest": { - "symfony/var-dumper": "Better dump() function for debugging Twig variables" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.9", - "datestamp": "1608093728", - "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": "Chi", - "homepage": "https://www.drupal.org/user/556138" - } - ], - "description": "A Twig extension with some useful functions and filters for Drupal development.", - "homepage": "https://www.drupal.org/project/twig_tweak", - "keywords": [ - "Drupal", - "Twig" - ], - "support": { - "source": "https://git.drupalcode.org/project/twig_tweak", - "issues": "https://www.drupal.org/project/issues/twig_tweak" - } - }, - { - "name": "drupal/typed_data", - "version": "dev-1.x", - "version_normalized": "dev-1.x", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/typed_data.git", - "reference": "27555f47b522730d04f3b33c9a46c0acbcb3146e" - }, - "require": { - "drupal/core": "^8.8.2 || ^9" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.0-alpha5+21-dev", - "datestamp": "1600719315", - "security-coverage": { - "status": "not-covered", - "message": "Dev releases are not covered by Drupal security advisories." - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "source", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TR", - "homepage": "https://www.drupal.org/user/202830" - }, - { - "name": "fago", - "homepage": "https://www.drupal.org/user/16747" - } - ], - "description": "Extends the core Typed Data API with new APIs and features.", - "homepage": "https://www.drupal.org/project/typed_data", - "support": { - "source": "https://git.drupalcode.org/project/typed_data", - "issues": "https://www.drupal.org/project/issues/typed_data" - } - }, - { - "name": "drupal/ui_patterns", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/ui_patterns.git", - "reference": "8.x-1.2" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ui_patterns-8.x-1.2.zip", - "reference": "8.x-1.2", - "shasum": "c792d38a1511e1c24386af5a8da8181d0394b824" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "composer/installers": "^1.2", - "cweagans/composer-patches": "~1.4", - "drupal/config_devel": "~1", - "drupal/core-composer-scaffold": "^8.0", - "drupal/core-dev": "^8.0", - "drupal/core-recommended": "~9.0", - "drupal/ds": "~3", - "drupal/field_group": "~3", - "drupal/page_manager": "*", - "drupal/panels": "~4", - "drupal/paragraphs": "~1", - "drupal/token": "~1", - "drush/drush": "~10", - "openeuropa/task-runner": "~1.0-beta3", - "phpro/grumphp": "~0.14" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.2", - "datestamp": "1591882155", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "composer-exit-on-patch-failure": true, - "enable-patching": true, - "drupal-scaffold": { - "locations": { - "web-root": "build/" - } - }, - "installer-paths": { - "build/core": [ - "type:drupal-core" + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Webbeh", + "homepage": "https://www.drupal.org/user/1160608" + }, + { + "name": "cobenash", + "homepage": "https://www.drupal.org/user/2138470" + }, + { + "name": "darol100", + "homepage": "https://www.drupal.org/user/2667123" + }, + { + "name": "dinarcon", + "homepage": "https://www.drupal.org/user/909522" + } + ], + "description": "This plugin adds Font Size and Font Family dropdowns that applies as inline element style.", + "homepage": "https://www.drupal.org/project/ckeditor_font", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/ckeditor_font", + "issues": "http://drupal.org/project/issues/ckeditor_font" + }, + "install-path": "../../web/modules/contrib/ckeditor_font" + }, + { + "name": "drupal/codesnippet", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/codesnippet.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/codesnippet-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "d620a6d1272e9811e19cc69524a991e271da142c" + }, + "require": { + "drupal-ckeditor-libraries-group/codesnippet": "^4.5.11", + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1593798298", + "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": "Kevin Quillen (kevinquillen)", + "homepage": "https://www.drupal.org/u/kevinquillen", + "role": "Maintainer" + }, + { + "name": "kevinquillen", + "homepage": "https://www.drupal.org/user/317279" + }, + { + "name": "szloredan", + "homepage": "https://www.drupal.org/user/3531611" + } + ], + "description": "Adds the CodeSnippet plugin to CKEditor.", + "homepage": "http://drupal.org/project/codesnippet", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/codesnippet", + "issues": "http://drupal.org/project/issues/codesnippet" + }, + "install-path": "../../web/modules/contrib/codesnippet" + }, + { + "name": "drupal/color_field", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/color_field.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/color_field-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "11c163a409f4f70083f188d917fecc6052c53a2f" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/token": "~1.3", + "nickwilde1990/php-composter-phpcs-drupal": "^2.0" + }, + "suggest": { + "bower-asset/jquery-simple-color": "^v1.2.2: Provides JavaScript library necessary for the Color Grid widget", + "bower-asset/spectrum": "^1.8: Provides JavaScript library necessary for Spectrum widget." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.4", + "datestamp": "1596479692", + "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": "targoo", + "homepage": "https://www.drupal.org/user/431910", + "role": "Maintainer" + }, + { + "name": "Nick Wilde", + "homepage": "https://www.drupal.org/user/nickwilde", + "role": "Maintainer" + } + ], + "description": "Provides a color field type to store the color value and opacity", + "homepage": "https://www.drupal.org/project/color_field", + "support": { + "source": "https://git.drupalcode.org/project/color_field", + "issues": "https://www.drupal.org/project/issues/color_field?version=8.x" + }, + "install-path": "../../web/modules/contrib/color_field" + }, + { + "name": "drupal/colorbox", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/colorbox.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/colorbox-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "64c7290be86fe1d3bf80dcf4003a37b3698bba50" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "suggest": { + "jackmoore/colorbox": "The Colorbox library is required to use the drupal/colorbox module." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1614960641", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + }, + { + "name": "Fredrik Jonsson", + "homepage": "https://www.drupal.org/u/frjo", + "role": "Maintainer" + }, + { + "name": "Sam152", + "homepage": "https://www.drupal.org/user/1485048" + }, + { + "name": "jdwfly", + "homepage": "https://www.drupal.org/user/298179" + }, + { + "name": "rsmylski", + "homepage": "https://www.drupal.org/user/1324348" + } + ], + "description": "A light-weight, customizable lightbox plugin for jQuery.", + "homepage": "https://www.drupal.org/project/colorbox", + "support": { + "source": "https://git.drupalcode.org/project/colorbox", + "issues": "https://www.drupal.org/project/issues/colorbox" + }, + "install-path": "../../web/modules/contrib/colorbox" + }, + { + "name": "drupal/colorbutton", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/colorbutton.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/colorbutton-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "a3467286d9882819bc45e9573dc2253444971bfc" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/panelbutton": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1589886092", + "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": "Kevin Quillen (kevinquillen)", + "homepage": "https://www.drupal.org/u/kevinquillen", + "role": "Maintainer" + }, + { + "name": "ddrozdik", + "homepage": "https://www.drupal.org/user/574124" + }, + { + "name": "kevinquillen", + "homepage": "https://www.drupal.org/user/317279" + } + ], + "description": "Adds the Color Button plugin to CKEditor.", + "homepage": "http://drupal.org/project/colorbutton", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/colorbutton", + "issues": "http://drupal.org/project/issues/colorbutton" + }, + "install-path": "../../web/modules/contrib/colorbutton" + }, + { + "name": "drupal/components", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/components.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/components-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "72af8ff1ca842556ee4b95335595c24703acdb75" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1556870881", + "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": "JohnAlbin", + "homepage": "https://www.drupal.org/user/32095" + }, + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + } + ], + "description": "Registers “component libraries” defined in modules and themes with the Twig system", + "homepage": "https://www.drupal.org/project/components", + "support": { + "source": "https://git.drupalcode.org/project/components" + }, + "install-path": "../../web/modules/contrib/components" + }, + { + "name": "drupal/config_update", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/config_update.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/config_update-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "8f079abf7c2ea826a27fa5224b0770a26404c968" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1586355587", + "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": "jhodgdon", + "homepage": "https://www.drupal.org/user/155601" + }, + { + "name": "nedjo", + "homepage": "https://www.drupal.org/user/4481" + } + ], + "description": "Provides basic revert and update functionality for other modules", + "homepage": "https://www.drupal.org/project/config_update", + "support": { + "source": "https://git.drupalcode.org/project/config_update" + }, + "install-path": "../../web/modules/contrib/config_update" + }, + { + "name": "drupal/content_access", + "version": "1.0.0-alpha3", + "version_normalized": "1.0.0.0-alpha3", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/content_access.git", + "reference": "8.x-1.0-alpha3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/content_access-8.x-1.0-alpha3.zip", + "reference": "8.x-1.0-alpha3", + "shasum": "38715d271d166cbf7ed801acd6cee6010962bc79" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/acl": "~1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-alpha3", + "datestamp": "1600327861", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0" + ], + "authors": [ + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "gisle", + "homepage": "https://www.drupal.org/user/409554" + }, + { + "name": "good_man", + "homepage": "https://www.drupal.org/user/265439" + } + ], + "description": "Provides flexible content access control.", + "homepage": "https://drupal.org/project/content_access", + "support": { + "source": "https://git.drupalcode.org/project/content_access" + }, + "install-path": "../../web/modules/contrib/content_access" + }, + { + "name": "drupal/context", + "version": "4.0.0-beta5", + "version_normalized": "4.0.0.0-beta5", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/context.git", + "reference": "8.x-4.0-beta5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/context-8.x-4.0-beta5.zip", + "reference": "8.x-4.0-beta5", + "shasum": "893d7e6ce07b23764baa6fd609da811ec80c5a04" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.0-beta5", + "datestamp": "1600783508", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoffer Palm", + "homepage": "http://www.oddhill.se/", + "email": "christoffer.palm@oddhill.se", + "role": "Developer" + }, + { + "name": "Steven Jones", + "homepage": "https://www.drupal.org/user/99644" + }, + { + "name": "alex_b", + "homepage": "https://www.drupal.org/user/53995" + }, + { + "name": "boshtian", + "homepage": "https://www.drupal.org/user/1773456" + }, + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "emanaton", + "homepage": "https://www.drupal.org/user/120853" + }, + { + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" + }, + { + "name": "fizk", + "homepage": "https://www.drupal.org/user/473174" + }, + { + "name": "hass", + "homepage": "https://www.drupal.org/user/85918" + }, + { + "name": "hefox", + "homepage": "https://www.drupal.org/user/426416" + }, + { + "name": "jmiccolis", + "homepage": "https://www.drupal.org/user/31731" + }, + { + "name": "nedjo", + "homepage": "https://www.drupal.org/user/4481" + }, + { + "name": "patricksettle", + "homepage": "https://www.drupal.org/user/26618" + }, + { + "name": "paulocs", + "homepage": "https://www.drupal.org/user/3640109" + }, + { + "name": "tekante", + "homepage": "https://www.drupal.org/user/640024" + }, + { + "name": "yhahn", + "homepage": "https://www.drupal.org/user/264833" + } + ], + "description": "Manage contextual conditions and reactions for different portions of your site.", + "homepage": "https://github.com/oddhill/context", + "keywords": [ + "Drupal", + "block", + "conditions", + "context", + "visibility" + ], + "support": { + "source": "https://github.com/oddhill/context", + "issues": "https://github.com/oddhill/context/issues", + "docs": "https://github.com/oddhill/context" + }, + "install-path": "../../web/modules/contrib/context" + }, + { + "name": "drupal/contribute", + "version": "1.0.0-beta8", + "version_normalized": "1.0.0.0-beta8", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/contribute.git", + "reference": "8.x-1.0-beta8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/contribute-8.x-1.0-beta8.zip", + "reference": "8.x-1.0-beta8", + "shasum": "0f197e7ed0997818366d557a1c990d2c199e3565" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta8", + "datestamp": "1572372486", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Adrian Cid Almaguer (adriancid)", + "homepage": "https://www.drupal.org/u/adriancid", + "role": "Maintainer" + }, + { + "name": "Jacob Rockowitz (jrockowitz)", + "homepage": "https://www.drupal.org/u/jrockowitz", + "role": "Maintainer" + }, + { + "name": "jrockowitz", + "homepage": "https://www.drupal.org/user/371407" + } + ], + "description": "Provides status report message which encourage users or organizations to join the Drupal community, become a member of Drupal Association, and contribute back to Drupal.", + "homepage": "https://www.drupal.org/project/contribute", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/contribute", + "issues": "https://www.drupal.org/project/issues/contribute" + }, + "install-path": "../../web/modules/contrib/contribute" + }, + { + "name": "drupal/cookieconsent", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/cookieconsent.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/cookieconsent-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "3acb8380e230e3a01486e336197e5b543892c409" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1592402037", + "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": "Hans van Wezenbeek (Nitebreed)", + "homepage": "https://www.drupal.org/u/nitebreed", + "role": "Maintainer" + }, + { + "name": "Steven Buteneers", + "homepage": "https://www.drupal.org/user/3301055" + }, + { + "name": "pjotr", + "homepage": "https://www.drupal.org/user/3487709" + } + ], + "description": "CookieConsent uses the Cookie Consent javascript library for alerting users about the use of cookies on your website", + "homepage": "https://www.drupal.org/project/cookieconsent", + "keywords": [ + "Cookie", + "CookieConsent", + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/cookieconsent", + "issues": "http://drupal.org/project/issues/cookieconsent" + }, + "install-path": "../../web/modules/contrib/cookieconsent" + }, + { + "name": "drupal/core", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core.git", + "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core/zipball/a53db77b55a035453d7229e0c3069f8591cb4cb6", + "reference": "a53db77b55a035453d7229e0c3069f8591cb4cb6", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "^1.1", + "composer/semver": "^1.0", + "doctrine/annotations": "^1.4", + "doctrine/common": "^2.7", + "easyrdf/easyrdf": "^0.9", + "egulias/email-validator": "^2.0", + "ext-date": "*", + "ext-dom": "*", + "ext-filter": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "guzzlehttp/guzzle": "^6.3", + "laminas/laminas-diactoros": "^1.8", + "laminas/laminas-feed": "^2.12", + "masterminds/html5": "^2.1", + "pear/archive_tar": "^1.4.12", + "php": "^7.0.8", + "psr/log": "^1.0", + "stack/builder": "^1.0", + "symfony-cmf/routing": "^1.4", + "symfony/class-loader": "~3.4.0", + "symfony/console": "~3.4.0", + "symfony/dependency-injection": "~3.4.26", + "symfony/event-dispatcher": "~3.4.0", + "symfony/http-foundation": "~3.4.35", + "symfony/http-kernel": "~3.4.14", + "symfony/polyfill-iconv": "^1.0", + "symfony/process": "~3.4.0", + "symfony/psr-http-message-bridge": "^1.1.2", + "symfony/routing": "~3.4.0", + "symfony/serializer": "~3.4.0", + "symfony/translation": "~3.4.0", + "symfony/validator": "~3.4.0", + "symfony/yaml": "~3.4.5", + "twig/twig": "^1.38.2", + "typo3/phar-stream-wrapper": "^3.1.3" + }, + "conflict": { + "drupal/pathauto": "<1.6", + "drush/drush": "<8.1.10" + }, + "replace": { + "drupal/action": "self.version", + "drupal/aggregator": "self.version", + "drupal/automated_cron": "self.version", + "drupal/ban": "self.version", + "drupal/bartik": "self.version", + "drupal/basic_auth": "self.version", + "drupal/big_pipe": "self.version", + "drupal/block": "self.version", + "drupal/block_content": "self.version", + "drupal/block_place": "self.version", + "drupal/book": "self.version", + "drupal/breakpoint": "self.version", + "drupal/ckeditor": "self.version", + "drupal/claro": "self.version", + "drupal/classy": "self.version", + "drupal/color": "self.version", + "drupal/comment": "self.version", + "drupal/config": "self.version", + "drupal/config_translation": "self.version", + "drupal/contact": "self.version", + "drupal/content_moderation": "self.version", + "drupal/content_translation": "self.version", + "drupal/contextual": "self.version", + "drupal/core-annotation": "self.version", + "drupal/core-assertion": "self.version", + "drupal/core-bridge": "self.version", + "drupal/core-class-finder": "self.version", + "drupal/core-datetime": "self.version", + "drupal/core-dependency-injection": "self.version", + "drupal/core-diff": "self.version", + "drupal/core-discovery": "self.version", + "drupal/core-event-dispatcher": "self.version", + "drupal/core-file-cache": "self.version", + "drupal/core-file-security": "self.version", + "drupal/core-filesystem": "self.version", + "drupal/core-gettext": "self.version", + "drupal/core-graph": "self.version", + "drupal/core-http-foundation": "self.version", + "drupal/core-php-storage": "self.version", + "drupal/core-plugin": "self.version", + "drupal/core-proxy-builder": "self.version", + "drupal/core-render": "self.version", + "drupal/core-serialization": "self.version", + "drupal/core-transliteration": "self.version", + "drupal/core-utility": "self.version", + "drupal/core-uuid": "self.version", + "drupal/core-version": "self.version", + "drupal/datetime": "self.version", + "drupal/datetime_range": "self.version", + "drupal/dblog": "self.version", + "drupal/dynamic_page_cache": "self.version", + "drupal/editor": "self.version", + "drupal/entity_reference": "self.version", + "drupal/field": "self.version", + "drupal/field_layout": "self.version", + "drupal/field_ui": "self.version", + "drupal/file": "self.version", + "drupal/filter": "self.version", + "drupal/forum": "self.version", + "drupal/hal": "self.version", + "drupal/help": "self.version", + "drupal/help_topics": "self.version", + "drupal/history": "self.version", + "drupal/image": "self.version", + "drupal/inline_form_errors": "self.version", + "drupal/jsonapi": "self.version", + "drupal/language": "self.version", + "drupal/layout_builder": "self.version", + "drupal/layout_discovery": "self.version", + "drupal/link": "self.version", + "drupal/locale": "self.version", + "drupal/media": "self.version", + "drupal/media_library": "self.version", + "drupal/menu_link_content": "self.version", + "drupal/menu_ui": "self.version", + "drupal/migrate": "self.version", + "drupal/migrate_drupal": "self.version", + "drupal/migrate_drupal_multilingual": "self.version", + "drupal/migrate_drupal_ui": "self.version", + "drupal/minimal": "self.version", + "drupal/node": "self.version", + "drupal/options": "self.version", + "drupal/page_cache": "self.version", + "drupal/path": "self.version", + "drupal/path_alias": "self.version", + "drupal/quickedit": "self.version", + "drupal/rdf": "self.version", + "drupal/responsive_image": "self.version", + "drupal/rest": "self.version", + "drupal/search": "self.version", + "drupal/serialization": "self.version", + "drupal/settings_tray": "self.version", + "drupal/seven": "self.version", + "drupal/shortcut": "self.version", + "drupal/simpletest": "self.version", + "drupal/standard": "self.version", + "drupal/stark": "self.version", + "drupal/statistics": "self.version", + "drupal/syslog": "self.version", + "drupal/system": "self.version", + "drupal/taxonomy": "self.version", + "drupal/telephone": "self.version", + "drupal/text": "self.version", + "drupal/toolbar": "self.version", + "drupal/tour": "self.version", + "drupal/tracker": "self.version", + "drupal/update": "self.version", + "drupal/user": "self.version", + "drupal/views": "self.version", + "drupal/views_ui": "self.version", + "drupal/workflows": "self.version", + "drupal/workspaces": "self.version" + }, + "type": "drupal-core", + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[project-root]/.editorconfig": "assets/scaffold/files/editorconfig", + "[project-root]/.gitattributes": "assets/scaffold/files/gitattributes", + "[web-root]/.csslintrc": "assets/scaffold/files/csslintrc", + "[web-root]/.eslintignore": "assets/scaffold/files/eslintignore", + "[web-root]/.eslintrc.json": "assets/scaffold/files/eslintrc.json", + "[web-root]/.ht.router.php": "assets/scaffold/files/ht.router.php", + "[web-root]/.htaccess": "assets/scaffold/files/htaccess", + "[web-root]/example.gitignore": "assets/scaffold/files/example.gitignore", + "[web-root]/index.php": "assets/scaffold/files/index.php", + "[web-root]/INSTALL.txt": "assets/scaffold/files/drupal.INSTALL.txt", + "[web-root]/README.txt": "assets/scaffold/files/drupal.README.txt", + "[web-root]/robots.txt": "assets/scaffold/files/robots.txt", + "[web-root]/update.php": "assets/scaffold/files/update.php", + "[web-root]/web.config": "assets/scaffold/files/web.config", + "[web-root]/sites/README.txt": "assets/scaffold/files/sites.README.txt", + "[web-root]/sites/development.services.yml": "assets/scaffold/files/development.services.yml", + "[web-root]/sites/example.settings.local.php": "assets/scaffold/files/example.settings.local.php", + "[web-root]/sites/example.sites.php": "assets/scaffold/files/example.sites.php", + "[web-root]/sites/default/default.services.yml": "assets/scaffold/files/default.services.yml", + "[web-root]/sites/default/default.settings.php": "assets/scaffold/files/default.settings.php", + "[web-root]/modules/README.txt": "assets/scaffold/files/modules.README.txt", + "[web-root]/profiles/README.txt": "assets/scaffold/files/profiles.README.txt", + "[web-root]/themes/README.txt": "assets/scaffold/files/themes.README.txt" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Core\\": "lib/Drupal/Core", + "Drupal\\Component\\": "lib/Drupal/Component", + "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" + }, + "classmap": [ + "lib/Drupal.php", + "lib/Drupal/Component/Utility/Timer.php", + "lib/Drupal/Component/Utility/Unicode.php", + "lib/Drupal/Core/Database/Database.php", + "lib/Drupal/Core/DrupalKernel.php", + "lib/Drupal/Core/DrupalKernelInterface.php", + "lib/Drupal/Core/Site/Settings.php" + ] + }, + "scripts": { + "pre-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::preAutoloadDump" + ], + "post-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::ensureHtaccess" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Drupal is an open source content management platform powering millions of websites and applications.", + "install-path": "../../web/core" + }, + { + "name": "drupal/core-composer-scaffold", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-composer-scaffold.git", + "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c902d07cb49ef73777e2b33a39e54c2861a8c81d", + "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1 || ^2", + "php": ">=7.0.8" + }, + "conflict": { + "drupal-composer/drupal-scaffold": "*" + }, + "require-dev": { + "composer/composer": "^1.8@stable" + }, + "type": "composer-plugin", + "extra": { + "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\Scaffold\\": "" + } + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A flexible Composer project scaffold builder.", + "homepage": "https://www.drupal.org/project/drupal", + "keywords": [ + "drupal" + ], + "install-path": "../drupal/core-composer-scaffold" + }, + { + "name": "drupal/core-project-message", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-project-message.git", + "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-project-message/zipball/3f8fa28128f1fef68ee0e6647011a543ef92be5b", + "reference": "3f8fa28128f1fef68ee0e6647011a543ef92be5b", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2", + "php": ">=7.0.8" + }, + "type": "composer-plugin", + "extra": { + "class": "Drupal\\Composer\\Plugin\\ProjectMessage\\MessagePlugin" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\ProjectMessage\\": "." + } + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Adds a message after Composer installation.", + "homepage": "https://www.drupal.org/project/drupal", + "keywords": [ + "drupal" + ], + "install-path": "../drupal/core-project-message" + }, + { + "name": "drupal/core-recommended", + "version": "8.9.13", + "version_normalized": "8.9.13.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-recommended.git", + "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/7a940fd5b64d2b22366680e2a60d96bf2c10089d", + "reference": "7a940fd5b64d2b22366680e2a60d96bf2c10089d", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "1.3.0", + "composer/semver": "1.5.1", + "doctrine/annotations": "v1.4.0", + "doctrine/cache": "v1.6.2", + "doctrine/collections": "v1.4.0", + "doctrine/common": "v2.7.3", + "doctrine/inflector": "v1.2.0", + "doctrine/lexer": "1.0.2", + "drupal/core": "8.9.13", + "easyrdf/easyrdf": "0.9.1", + "egulias/email-validator": "2.1.17", + "guzzlehttp/guzzle": "6.5.4", + "guzzlehttp/promises": "v1.3.1", + "guzzlehttp/psr7": "1.6.1", + "laminas/laminas-diactoros": "1.8.7p2", + "laminas/laminas-escaper": "2.6.1", + "laminas/laminas-feed": "2.12.2", + "laminas/laminas-stdlib": "3.2.1", + "laminas/laminas-zendframework-bridge": "1.0.4", + "masterminds/html5": "2.3.0", + "paragonie/random_compat": "v9.99.99", + "pear/archive_tar": "1.4.12", + "pear/console_getopt": "v1.4.3", + "pear/pear-core-minimal": "v1.10.10", + "pear/pear_exception": "v1.0.1", + "psr/container": "1.0.0", + "psr/http-message": "1.0.1", + "psr/log": "1.1.3", + "ralouphie/getallheaders": "3.0.3", + "stack/builder": "v1.0.5", + "symfony-cmf/routing": "1.4.1", + "symfony/class-loader": "v3.4.41", + "symfony/console": "v3.4.41", + "symfony/debug": "v3.4.41", + "symfony/dependency-injection": "v3.4.41", + "symfony/event-dispatcher": "v3.4.41", + "symfony/http-foundation": "v3.4.41", + "symfony/http-kernel": "v3.4.44", + "symfony/polyfill-ctype": "v1.17.0", + "symfony/polyfill-iconv": "v1.17.0", + "symfony/polyfill-intl-idn": "v1.17.0", + "symfony/polyfill-mbstring": "v1.17.0", + "symfony/polyfill-php56": "v1.17.0", + "symfony/polyfill-php70": "v1.17.0", + "symfony/polyfill-php72": "v1.17.0", + "symfony/polyfill-util": "v1.17.0", + "symfony/process": "v3.4.41", + "symfony/psr-http-message-bridge": "v1.1.2", + "symfony/routing": "v3.4.41", + "symfony/serializer": "v3.4.41", + "symfony/translation": "v3.4.41", + "symfony/validator": "v3.4.41", + "symfony/yaml": "v3.4.41", + "twig/twig": "v1.42.5", + "typo3/phar-stream-wrapper": "v3.1.4" + }, + "conflict": { + "webflo/drupal-core-strict": "*" + }, + "type": "metapackage", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.", + "install-path": null + }, + { + "name": "drupal/ctools", + "version": "3.4.0", + "version_normalized": "3.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ctools.git", + "reference": "8.x-3.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ctools-8.x-3.4.zip", + "reference": "8.x-3.4", + "shasum": "016ca5abb7ac4ca720352a72e8989f3ef0e20539" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.4", + "datestamp": "1585763383", + "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": "Kris Vanderwater (EclipseGc)", + "homepage": "https://www.drupal.org/u/eclipsegc", + "role": "Maintainer" + }, + { + "name": "Jakob Perry (japerry)", + "homepage": "https://www.drupal.org/u/japerry", + "role": "Maintainer" + }, + { + "name": "Tim Plunkett (tim.plunkett)", + "homepage": "https://www.drupal.org/u/timplunkett", + "role": "Maintainer" + }, + { + "name": "James Gilliland (neclimdul)", + "homepage": "https://www.drupal.org/u/neclimdul", + "role": "Maintainer" + }, + { + "name": "Daniel Wehner (dawehner)", + "homepage": "https://www.drupal.org/u/dawehner", + "role": "Maintainer" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "sdboyer", + "homepage": "https://www.drupal.org/user/146719" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Provides a number of utility and helper APIs for Drupal developers and site builders.", + "homepage": "https://www.drupal.org/project/ctools", + "support": { + "source": "https://git.drupalcode.org/project/ctools", + "issues": "https://www.drupal.org/project/issues/ctools" + }, + "install-path": "../../web/modules/contrib/ctools" + }, + { + "name": "drupal/ctools_block", + "version": "3.4.0", + "version_normalized": "3.4.0.0", + "require": { + "drupal/core": "^8 || ^9", + "drupal/ctools": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-3.4", + "datestamp": "1585763383", + "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": "EclipseGc", + "homepage": "https://www.drupal.org/user/61203" + }, + { + "name": "damiankloip", + "homepage": "https://www.drupal.org/user/1037976" + }, + { + "name": "dawehner", + "homepage": "https://www.drupal.org/user/99340" + }, + { + "name": "esmerel", + "homepage": "https://www.drupal.org/user/164022" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "sdboyer", + "homepage": "https://www.drupal.org/user/146719" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Provides improvements to blocks that will one day be added to Drupal core.", + "homepage": "https://www.drupal.org/project/ctools", + "support": { + "source": "https://git.drupalcode.org/project/ctools" + }, + "install-path": null + }, + { + "name": "drupal/devel", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/devel.git", + "reference": "8.x-2.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/devel-8.x-2.1.zip", + "reference": "8.x-2.1", + "shasum": "8f735892922aa5f228e681e645e5f02b1c008f14" + }, + "require": { + "drupal/core": "~8.0", + "symfony/var-dumper": "~2.7|^3|^4" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.1", + "datestamp": "1556799496", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Moshe Weitzman", + "homepage": "https://github.com/weitzman", + "email": "weitzman@tejasa.com", + "role": "Maintainer" + }, + { + "name": "Hans Salvisberg", + "homepage": "https://www.drupal.org/u/salvis", + "email": "drupal@salvisberg.com", + "role": "Maintainer" + }, + { + "name": "Luca Lusso", + "homepage": "https://www.drupal.org/u/lussoluca", + "role": "Maintainer" + }, + { + "name": "Marco (willzyx)", + "homepage": "https://www.drupal.org/u/willzyx", + "role": "Maintainer" + }, + { + "name": "See contributors", + "homepage": "https://www.drupal.org/node/3236/committers" + } + ], + "description": "Various blocks, pages, and functions for developers.", + "homepage": "http://drupal.org/project/devel", + "support": { + "source": "http://cgit.drupalcode.org/devel", + "issues": "http://drupal.org/project/devel", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/devel" + }, + { + "name": "drupal/domain_301_redirect", + "version": "1.0.0-alpha0", + "version_normalized": "1.0.0.0-alpha0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/domain_301_redirect.git", + "reference": "8.x-1.0-alpha0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/domain_301_redirect-8.x-1.0-alpha0.zip", + "reference": "8.x-1.0-alpha0", + "shasum": "7b2756cdba8ecf8af052e9a6105530c1eaa2cfa5" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-alpha0", + "datestamp": "1569004385", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Kevin Hankens", + "homepage": "https://www.drupal.org/user/78090" + }, + { + "name": "jessebeach", + "homepage": "https://www.drupal.org/user/748566" + }, + { + "name": "nagba", + "homepage": "https://www.drupal.org/user/21231" + }, + { + "name": "naveenvalecha", + "homepage": "https://www.drupal.org/user/2665733" + }, + { + "name": "timhilliard", + "homepage": "https://www.drupal.org/user/195493" + } + ], + "description": "Allows you to 301 redirect any domain to the main domain associated with a site.", + "homepage": "http://drupal.org/project/domain_301_redirect", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/domain_301_redirect", + "issues": "http://drupal.org/project/domain_301_redirect" + }, + "install-path": "../../web/modules/contrib/domain_301_redirect" + }, + { + "name": "drupal/ds", + "version": "3.12.0", + "version_normalized": "3.12.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ds.git", + "reference": "8.x-3.12" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ds-8.x-3.12.zip", + "reference": "8.x-3.12", + "shasum": "0df49ccc28af94186a6c08aa4233f435c539b273" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/devel": "3.x-dev", + "drupal/field_group": "3.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.12", + "datestamp": "1615995335", + "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": "Bram Goffings", + "homepage": "https://www.drupal.org/user/172527", + "role": "Maintainer" + }, + { + "name": "Kristof De Jaeger", + "homepage": "http://realize.be/", + "role": "Maintainer" + }, + { + "name": "Brecht Ceyssens", + "homepage": "https://www.drupal.org/user/591438", + "role": "Maintainer" + }, + { + "name": "swentel", + "homepage": "https://www.drupal.org/user/107403" + } + ], + "description": "Extend the display options for every entity type.", + "homepage": "https://www.drupal.org/project/ds", + "keywords": [ + "drupal", + "layout", + "php" + ], + "support": { + "source": "http://git.drupal.org/project/ds.git", + "issues": "https://www.drupal.org/project/issues/ds", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/ds" + }, + { + "name": "drupal/easy_breadcrumb", + "version": "1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/easy_breadcrumb.git", + "reference": "8.x-1.15" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/easy_breadcrumb-8.x-1.15.zip", + "reference": "8.x-1.15", + "shasum": "447c1ae946bdba97da97880aae5980f97baf720b" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.15", + "datestamp": "1615310468", + "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": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + }, + { + "name": "Greg Boggs", + "homepage": "https://www.drupal.org/u/greg-boggs", + "role": "Maintainer" + }, + { + "name": "RenatoG", + "homepage": "https://www.drupal.org/user/3326031" + }, + { + "name": "diamondsea", + "homepage": "https://www.drupal.org/user/430714" + }, + { + "name": "hmartens", + "homepage": "https://www.drupal.org/user/622826" + }, + { + "name": "loopduplicate", + "homepage": "https://www.drupal.org/user/717290" + }, + { + "name": "sonemonu", + "homepage": "https://www.drupal.org/user/1667988" + }, + { + "name": "tatarbj", + "homepage": "https://www.drupal.org/user/649590" + }, + { + "name": "volkswagenchick", + "homepage": "https://www.drupal.org/user/3332522" + } + ], + "description": "Adds configuration to the system breadcrumbs.", + "homepage": "https://www.drupal.org/project/easy_breadcrumb", + "support": { + "source": "https://git.drupalcode.org/project/easy_breadcrumb", + "issues": "https://www.drupal.org/project/issues/easy_breadcrumb" + }, + "install-path": "../../web/modules/contrib/easy_breadcrumb" + }, + { + "name": "drupal/easychart", + "version": "3.4.0", + "version_normalized": "3.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/easychart.git", + "reference": "8.x-3.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/easychart-8.x-3.4.zip", + "reference": "8.x-3.4", + "shasum": "6ec1848fd12b1515c16d841cc87a071883fa476c" + }, + "require": { + "drupal/core": "^8" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.4", + "datestamp": "1475594996", + "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": "Jan-Yves Vanhaverbeke", + "homepage": "https://www.drupal.org/user/1823074", + "role": "Maintainer" + }, + { + "name": "Thomas Daem", + "homepage": "https://www.drupal.org/user/591438", + "role": "Maintainer" + }, + { + "name": "Kristof De Jaeger", + "homepage": "http://realize.be/", + "role": "Maintainer" + }, + { + "name": "thomas_rz", + "homepage": "https://www.drupal.org/user/1142210" + } + ], + "description": "A visual editor for the world's best web charting tool: Highcharts.", + "homepage": "https://www.drupal.org/project/easychart", + "keywords": [ + "Highcharts", + "chart", + "drupal" + ], + "support": { + "source": "http://git.drupal.org/project/easychart.git", + "issues": "https://www.drupal.org/project/issues/easychart", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/easychart" + }, + { + "name": "drupal/entity_browser", + "version": "2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/entity_browser.git", + "reference": "8.x-2.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.5.zip", + "reference": "8.x-2.5", + "shasum": "29456b961f0f90ff064601ab8a382446a8143774" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/embed": "~1.0", + "drupal/entity_embed": "1.x-dev", + "drupal/entity_reference_revisions": "1.x-dev", + "drupal/entityqueue": "1.x-dev", + "drupal/inline_entity_form": "1.x-dev", + "drupal/paragraphs": "1.x-dev", + "drupal/token": "~1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.5", + "datestamp": "1588015429", + "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": "Janez Urevc", + "homepage": "https://github.com/slashrsm", + "role": "Maintainer" + }, + { + "name": "Primoz Hmeljak", + "homepage": "https://github.com/primsi", + "role": "Maintainer" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/1943336/committers", + "role": "contributor" + }, + { + "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": "oknate", + "homepage": "https://www.drupal.org/user/471638" + }, + { + "name": "samuel.mortenson", + "homepage": "https://www.drupal.org/user/2582268" + }, + { + "name": "slashrsm", + "homepage": "https://www.drupal.org/user/744628" + } + ], + "description": "Entity browsing and selecting component.", + "homepage": "http://drupal.org/project/entity_browser", + "support": { + "source": "https://git.drupalcode.org/project/entity_browser", + "issues": "https://www.drupal.org/project/issues/entity_browser", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/entity_browser" + }, + { + "name": "drupal/entity_print", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/entity_print.git", + "reference": "8.x-2.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_print-8.x-2.2.zip", + "reference": "8.x-2.2", + "shasum": "5bd7671e2563a68925ab7f6ecd8dc8e8e396a0ea" + }, + "require": { + "dompdf/dompdf": "~0.8.0", + "drupal/core": "^8 || ^9" + }, + "suggest": { + "mikehaertl/phpwkhtmltopdf": "PhpWkhtmlToPdf provides the PHP library to use Wkhtmltopdf" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.2", + "datestamp": "1592533892", + "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": "Ben Dougherty", + "homepage": "https://www.drupal.org/u/benjy" + }, + { + "name": "benjy", + "homepage": "https://www.drupal.org/user/1852732" + }, + { + "name": "pameeela", + "homepage": "https://www.drupal.org/user/1431110" + } + ], + "description": "PDF print solution for any Drupal entity.", + "homepage": "http://drupal.org/project/entity_print", + "keywords": [ + "PDF", + "drupal", + "print", + "web" + ], + "support": { + "source": "https://git.drupalcode.org/project/entity_print" + }, + "install-path": "../../web/modules/contrib/entity_print" + }, + { + "name": "drupal/entity_reference_revisions", + "version": "1.9.0", + "version_normalized": "1.9.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", + "reference": "8.x-1.9" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "e1c51bdea495eb3b458130d6f0a00c347f5637df" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "require-dev": { + "drupal/diff": "1.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.9", + "datestamp": "1614805871", + "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": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Frans", + "homepage": "https://www.drupal.org/user/514222" + }, + { + "name": "jeroen.b", + "homepage": "https://www.drupal.org/user/1853532" + }, + { + "name": "miro_dietiker", + "homepage": "https://www.drupal.org/user/227761" + } + ], + "description": "Entity Reference Revisions", + "homepage": "https://www.drupal.org/project/entity_reference_revisions", + "support": { + "source": "https://git.drupalcode.org/project/entity_reference_revisions" + }, + "install-path": "../../web/modules/contrib/entity_reference_revisions" + }, + { + "name": "drupal/externalauth", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/externalauth.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/externalauth-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "b1b38e6718fe66bd38fc894dab1f9d7a7d60f10b" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1587629529", + "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": "rgristroph", + "homepage": "https://www.drupal.org/user/516442" + }, + { + "name": "snufkin", + "homepage": "https://www.drupal.org/user/58645" + }, + { + "name": "svendecabooter", + "homepage": "https://www.drupal.org/user/35369" + } + ], + "description": "Helper module to authenticate users using an external site / service and storing identification details", + "homepage": "https://www.drupal.org/project/externalauth", + "support": { + "source": "https://git.drupalcode.org/project/externalauth" + }, + "install-path": "../../web/modules/contrib/externalauth" + }, + { + "name": "drupal/extlink", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/extlink.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/extlink-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "92c2794b1d5ece7978f5f6fa37f719c0b37d470e" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1614961993", + "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": "Nate Lampton", + "homepage": "https://www.drupal.org/u/quicksketch", + "role": "Maintainer" + }, + { + "name": "Lachlan Ennis", + "homepage": "https://www.drupal.org/u/elachlan", + "role": "Maintainer" + }, + { + "name": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + } + ], + "description": "Modify behavior and appearance of external links.", + "homepage": "https://www.drupal.org/project/extlink", + "keywords": [ + "Drupal", + "External Links" + ], + "support": { + "source": "https://git.drupalcode.org/project/extlink", + "issues": "https://www.drupal.org/project/issues/extlink" + }, + "install-path": "../../web/modules/contrib/extlink" + }, + { + "name": "drupal/facets", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/facets.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/facets-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "5a8a1092617c4dde96f691e23300d0d436c5fcb3" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/search_api": "~1.5" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1613751460", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "See all contributors", + "homepage": "https://www.drupal.org/node/2348769/committers" + }, + { + "name": "StryKaizer", + "homepage": "https://www.drupal.org/user/462700" + }, + { + "name": "borisson_", + "homepage": "https://www.drupal.org/user/2393360" + }, + { + "name": "drunken monkey", + "homepage": "https://www.drupal.org/user/205582" + }, + { + "name": "mkalkbrenner", + "homepage": "https://www.drupal.org/user/124705" + } + ], + "description": "The Facet module allows site builders to easily create and manage faceted search interfaces.", + "homepage": "https://www.drupal.org/project/facets", + "support": { + "source": "git://git.drupal.org/project/facets.git", + "issues": "https://www.drupal.org/project/issues/facets", + "irc": "irc://irc.freenode.org/drupal-search-api" + }, + "install-path": "../../web/modules/contrib/facets" + }, + { + "name": "drupal/fast_404", + "version": "2.0.0-alpha5", + "version_normalized": "2.0.0.0-alpha5", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/fast_404.git", + "reference": "8.x-2.0-alpha5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/fast_404-8.x-2.0-alpha5.zip", + "reference": "8.x-2.0-alpha5", + "shasum": "071518c28f73ed011068ec0dbfe07a5904b8f982" + }, + "require": { + "drupal/core": "^8.8" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.0-alpha5", + "datestamp": "1590876049", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "adammalone", + "homepage": "https://www.drupal.org/user/1295980" + }, + { + "name": "bonus", + "homepage": "https://www.drupal.org/user/360002" + }, + { + "name": "naveenvalecha", + "homepage": "https://www.drupal.org/user/2665733" + }, + { + "name": "neetu morwani", + "homepage": "https://www.drupal.org/user/2632025" + }, + { + "name": "soyarma", + "homepage": "https://www.drupal.org/user/286273" + } + ], + "homepage": "https://www.drupal.org/project/fast_404", + "support": { + "source": "https://git.drupalcode.org/project/fast_404" + }, + "install-path": "../../web/modules/contrib/fast_404" + }, + { + "name": "drupal/features", + "version": "3.12.0", + "version_normalized": "3.12.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/features.git", + "reference": "8.x-3.12" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/features-8.x-3.12.zip", + "reference": "8.x-3.12", + "shasum": "f28d6e7d3340e32666a3e8ae515ed746dbe86b98" + }, + "require": { + "drupal/config_update": "^1.4", + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.12", + "datestamp": "1612830531", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "dawehner", + "homepage": "https://www.drupal.org/user/99340" + }, + { + "name": "donquixote", + "homepage": "https://www.drupal.org/user/459338" + }, + { + "name": "e2thex", + "homepage": "https://www.drupal.org/user/189123" + }, + { + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" + }, + { + "name": "flocondetoile", + "homepage": "https://www.drupal.org/user/2006064" + }, + { + "name": "jmiccolis", + "homepage": "https://www.drupal.org/user/31731" + }, + { + "name": "joseph.olstad", + "homepage": "https://www.drupal.org/user/1321830" + }, + { + "name": "mpotter", + "homepage": "https://www.drupal.org/user/616192" + }, + { + "name": "nedjo", + "homepage": "https://www.drupal.org/user/4481" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Enables administrators to package configuration into modules", + "homepage": "https://www.drupal.org/project/features", + "support": { + "source": "https://git.drupalcode.org/project/features" + }, + "install-path": "../../web/modules/contrib/features" + }, + { + "name": "drupal/feeds", + "version": "3.0.0-alpha10", + "version_normalized": "3.0.0.0-alpha10", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/feeds.git", + "reference": "8.x-3.0-alpha10" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/feeds-8.x-3.0-alpha10.zip", + "reference": "8.x-3.0-alpha10", + "shasum": "84691c6258503c8d4afea5009dcd21bbd8292d49" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/pathauto": "^1.8", + "drush/drush": "^9 || ^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.0-alpha10", + "datestamp": "1612455136", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "installation-source": "dist", + "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": "Ian Ward", + "homepage": "https://www.drupal.org/user/4736" + }, + { + "name": "MegaChriz", + "homepage": "https://www.drupal.org/user/654114" + }, + { + "name": "Will White", + "homepage": "https://www.drupal.org/user/32237" + }, + { + "name": "alex_b", + "homepage": "https://www.drupal.org/user/53995" + }, + { + "name": "e2thex", + "homepage": "https://www.drupal.org/user/189123" + }, + { + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" + }, + { + "name": "franz", + "homepage": "https://www.drupal.org/user/581844" + }, + { + "name": "jmiccolis", + "homepage": "https://www.drupal.org/user/31731" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "kking", + "homepage": "https://www.drupal.org/user/24399" + }, + { + "name": "tobby", + "homepage": "https://www.drupal.org/user/154797" + }, + { + "name": "tristanoneil", + "homepage": "https://www.drupal.org/user/340659" + }, + { + "name": "twistor", + "homepage": "https://www.drupal.org/user/473738" + }, + { + "name": "yhahn", + "homepage": "https://www.drupal.org/user/264833" + } + ], + "description": "Aggregates RSS/Atom/RDF feeds, imports CSV files and more.", + "homepage": "https://www.drupal.org/project/feeds", + "keywords": [ + "Drupal" + ], + "support": { + "source": "https://git.drupalcode.org/project/feeds", + "issues": "https://www.drupal.org/project/issues/feeds" + }, + "install-path": "../../web/modules/contrib/feeds" + }, + { + "name": "drupal/fences", + "version": "2.0.0-rc1", + "version_normalized": "2.0.0.0-RC1", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/fences.git", + "reference": "8.x-2.0-rc1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/fences-8.x-2.0-rc1.zip", + "reference": "8.x-2.0-rc1", + "shasum": "0ec3a95dda7bdbdd13401bc834d75a3c7dd1c256" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.0-rc1", + "datestamp": "1590457540", + "security-coverage": { + "status": "not-covered", + "message": "RC releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "CrashTest_", + "homepage": "https://www.drupal.org/user/261457" + }, + { + "name": "JohnAlbin", + "homepage": "https://www.drupal.org/user/32095" + }, + { + "name": "Sam152", + "homepage": "https://www.drupal.org/user/1485048" + }, + { + "name": "gleroux02", + "homepage": "https://www.drupal.org/user/282323" + }, + { + "name": "jensimmons", + "homepage": "https://www.drupal.org/user/140882" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + } + ], + "description": "Alter wrapping markup of fields.", + "homepage": "https://www.drupal.org/project/fences", + "support": { + "source": "https://git.drupalcode.org/project/fences" + }, + "install-path": "../../web/modules/contrib/fences" + }, + { + "name": "drupal/field_formatter_class", + "version": "1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/field_formatter_class.git", + "reference": "8.x-1.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/field_formatter_class-8.x-1.5.zip", + "reference": "8.x-1.5", + "shasum": "a51e0078615791a285250693a4e88775fac87b70" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.5", + "datestamp": "1610334141", + "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": "Andrew Macpherson", + "homepage": "https://www.drupal.org/u/andrewmacpherson", + "role": "maintainer" + }, + { + "name": "Oleksandr Dekhteruk", + "homepage": "https://www.drupal.org/u/pifagor", + "role": "maintainer" + }, + { + "name": "mfer", + "homepage": "https://www.drupal.org/user/25701" + }, + { + "name": "pifagor", + "homepage": "https://www.drupal.org/user/2375692" + } + ], + "description": "Provides custom HTML class settings for field formatters.", + "homepage": "https://www.drupal.org/project/field_formatter_class", + "support": { + "source": "https://git.drupalcode.org/project/field_formatter_class", + "issues": "https://www.drupal.org/project/issues/field_formatter_class" + }, + "install-path": "../../web/modules/contrib/field_formatter_class" + }, + { + "name": "drupal/field_group", + "version": "3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/field_group.git", + "reference": "8.x-3.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/field_group-8.x-3.1.zip", + "reference": "8.x-3.1", + "shasum": "8a719eaea594f0ba874172831cb28da93c66b77a" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/jquery_ui_accordion": "^1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.1", + "datestamp": "1591772567", + "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": "Hydra", + "homepage": "https://www.drupal.org/user/647364" + }, + { + "name": "Stalski", + "homepage": "https://www.drupal.org/user/322618" + }, + { + "name": "jyve", + "homepage": "https://www.drupal.org/user/591438" + }, + { + "name": "nils.destoop", + "homepage": "https://www.drupal.org/user/361625" + }, + { + "name": "swentel", + "homepage": "https://www.drupal.org/user/107403" + } + ], + "description": "Provides the field_group module.", + "homepage": "https://www.drupal.org/project/field_group", + "support": { + "source": "https://git.drupalcode.org/project/field_group", + "issues": "https://www.drupal.org/project/issues/field_group" + }, + "install-path": "../../web/modules/contrib/field_group" + }, + { + "name": "drupal/field_permissions", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/field_permissions.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/field_permissions-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "11e31db94999e6871ad7633455315bc27989a7ea" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1598646882", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "jhedstrom", + "homepage": "https://www.drupal.org/user/208732" + }, + { + "name": "mariacha1", + "homepage": "https://www.drupal.org/user/2210776" + }, + { + "name": "markus_petrux", + "homepage": "https://www.drupal.org/user/39593" + } + ], + "description": "The Field Permissions module allows site administrators to set field-level permissions to edit, view and create fields on any entity.", + "homepage": "https://www.drupal.org/project/field_permissions", + "support": { + "source": "https://git.drupalcode.org/project/field_permissions", + "issues": "https://www.drupal.org/project/issues/field_permissions" + }, + "install-path": "../../web/modules/contrib/field_permissions" + }, + { + "name": "drupal/file_mdm", + "version": "dev-1.x", + "version_normalized": "dev-1.x", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/file_mdm.git", + "reference": "30264f78b6c6f98a614e2da8d1e0c843dce59472" + }, + "require": { + "drupal/core": "~8.0", + "lsolesen/pel": "0.9.6", + "phenx/php-font-lib": "^0.5", + "php": ">=5.6" + }, + "require-dev": { + "drupal/image_effects": "*" + }, + "type": "drupal-module", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "drupal": { + "version": "8.x-1.1+8-dev", + "datestamp": "1576326787", + "security-coverage": { + "status": "not-covered", + "message": "Dev releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "source", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "mondrake", + "homepage": "https://www.drupal.org/user/1307444" + } + ], + "description": "Provides a service to manage file metadata.", + "homepage": "https://www.drupal.org/project/file_mdm", + "support": { + "source": "https://git.drupalcode.org/project/file_mdm" + }, + "install-path": "../../web/modules/contrib/file_mdm" + }, + { + "name": "drupal/file_mdm_exif", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "require": { + "drupal/core": "~8.0", + "drupal/file_mdm": "*" + }, + "require-dev": { + "drupal/image_effects": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1488273785", + "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": "mondrake", + "homepage": "https://www.drupal.org/user/1307444" + } + ], + "description": "Provides a file metadata plugin for EXIF image information.", + "homepage": "https://www.drupal.org/project/file_mdm", + "support": { + "source": "https://git.drupalcode.org/project/file_mdm" + }, + "install-path": null + }, + { + "name": "drupal/filefield_paths", + "version": "1.0.0-beta5", + "version_normalized": "1.0.0.0-beta5", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/filefield_paths.git", + "reference": "8.x-1.0-beta5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/filefield_paths-8.x-1.0-beta5.zip", + "reference": "8.x-1.0-beta5", + "shasum": "06719aaeee87bf5abdfb75e0079fcaf0bbd996a6" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/ctools": "*", + "drupal/pathauto": "*", + "drupal/redirect": "*", + "drupal/token": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta5", + "datestamp": "1606806673", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Deciphered", + "homepage": "https://www.drupal.org/user/103796" + }, + { + "name": "voleger", + "homepage": "https://www.drupal.org/user/3260314" + } + ], + "description": "Adds improved Token based file sorting and renaming functionalities.", + "homepage": "https://www.drupal.org/project/filefield_paths", + "support": { + "source": "https://git.drupalcode.org/project/filefield_paths" + }, + "install-path": "../../web/modules/contrib/filefield_paths" + }, + { + "name": "drupal/honeypot", + "version": "1.30.0", + "version_normalized": "1.30.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/honeypot.git", + "reference": "8.x-1.30" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/honeypot-8.x-1.30.zip", + "reference": "8.x-1.30", + "shasum": "1d7983e8e07feee4f13e4b05c9a10db15ae2097e" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.30", + "datestamp": "1576274288", + "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": "Jeff Geerling", + "homepage": "https://www.drupal.org/user/213194", + "email": "geerlingguy@mac.com" + }, + { + "name": "geerlingguy", + "homepage": "https://www.drupal.org/user/389011" + }, + { + "name": "vijaycs85", + "homepage": "https://www.drupal.org/user/93488" + } + ], + "description": "Mitigates spam form submissions using the honeypot method.", + "homepage": "https://www.drupal.org/project/honeypot", + "keywords": [ + "deterrent", + "form", + "honeypot", + "honeytrap", + "php", + "spam" + ], + "support": { + "source": "https://git.drupalcode.org/project/honeypot" + }, + "install-path": "../../web/modules/contrib/honeypot" + }, + { + "name": "drupal/hook_event_dispatcher", + "version": "1.29.0", + "version_normalized": "1.29.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/hook_event_dispatcher.git", + "reference": "8.x-1.29" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/hook_event_dispatcher-8.x-1.29.zip", + "reference": "8.x-1.29", + "shasum": "81cbc5f27b1e62ee323b27fb826ec75d3762c68f" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/coder": "8.3.1", + "drupal/core": "^8.8", + "drupal/eck": "^1.0@alpha", + "drupal/paragraphs": "^1.10", + "drupal/webform": "*", + "mockery/mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", + "phpmd/phpmd": "2.7.0", + "phpunit/phpunit": "^7", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "drupal/paragraphs": "Enables the creation of paragraphs entities.", + "drupal/token": "Provides additional tokens not supported by core (most notably fields), as well as a UI for browsing tokens." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.29", + "datestamp": "1589110992", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\hook_event_dispatcher\\": "src/", + "Drupal\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/src/" + } + }, + "autoload-dev": { + "psr-4": { + "Drupal\\Tests\\hook_event_dispatcher\\": "tests/src/", + "Drupal\\Tests\\webform_event_dispatcher\\": "modules/webform_event_dispatcher/tests/src/", + "Drupal\\Tests\\": "vendor/drupal/core/tests/Drupal/Tests", + "Drupal\\TestTools\\": "vendor/drupal/core/tests/Drupal/TestTools", + "Drupal\\views\\": "vendor/drupal/core/modules/views/src/" + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "scripts": { + "test": [ + "@phplint", + "@phpunit", + "@phpcs", + "@phpmd" + ], + "phplint": [ + "vendor/bin/parallel-lint --exclude vendor/ --exclude .idea/ -e php,module,inc,install,profile,theme ." + ], + "phpunit": [ + "vendor/bin/phpunit --configuration=phpunit.xml" + ], + "phpcs": [ + "vendor/bin/phpcs --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme --report=full --warning-severity=0 ." + ], + "phpcbf": [ + "vendor/bin/phpcbf --ignore=vendor/,.idea/ --standard=vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml --extensions=php,module,inc,install,profile,theme ." + ], + "phpmd": [ + "vendor/bin/phpmd --exclude vendor/,.idea/ --suffixes php,module,inc,install,profile,theme . text phpmd.xml" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "pdenooijer", + "homepage": "https://www.drupal.org/user/3175437" + }, + { + "name": "robin.ingelbrecht", + "homepage": "https://www.drupal.org/user/2339074" + } + ], + "description": "Dispatches events for several drupal core hooks.", + "homepage": "https://www.drupal.org/project/hook_event_dispatcher", + "support": { + "source": "https://git.drupalcode.org/project/hook_event_dispatcher" + }, + "install-path": "../../web/modules/contrib/hook_event_dispatcher" + }, + { + "name": "drupal/hotjar", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/hotjar.git", + "reference": "8.x-2.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/hotjar-8.x-2.0.zip", + "reference": "8.x-2.0", + "shasum": "a2e21a22bcc7ba5e6f374350220eb00b1167722c" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "ext-json": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.0", + "datestamp": "1605689024", + "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": "csakiistvan", + "homepage": "https://www.drupal.org/user/491514" + }, + { + "name": "tikaszvince", + "homepage": "https://www.drupal.org/user/337178" + } + ], + "description": "Allows your site to be tracked by Hotjar by adding a Javascript tracking code to every page", + "homepage": "https://www.drupal.org/project/hotjar", + "support": { + "source": "https://git.drupalcode.org/project/hotjar" + }, + "install-path": "../../web/modules/contrib/hotjar" + }, + { + "name": "drupal/imagemagick", + "version": "2.7.0", + "version_normalized": "2.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/imagemagick.git", + "reference": "8.x-2.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/imagemagick-8.x-2.7.zip", + "reference": "8.x-2.7", + "shasum": "e70fa0124305d99d5cf3f59d95c3e52657c1c8b4" + }, + "require": { + "drupal/core": "^8.3", + "drupal/file_mdm": "^1.1", + "drupal/file_mdm_exif": "^1.1", + "fileeye/mimemap": "^1.1.1" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.7", + "datestamp": "1581425670", + "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": "Chris Charlton", + "homepage": "https://www.drupal.org/user/17089" + }, + { + "name": "chx", + "homepage": "https://www.drupal.org/user/9446" + }, + { + "name": "claudiu.cristea", + "homepage": "https://www.drupal.org/user/56348" + }, + { + "name": "dman", + "homepage": "https://www.drupal.org/user/33240" + }, + { + "name": "dopry", + "homepage": "https://www.drupal.org/user/22202" + }, + { + "name": "drewish", + "homepage": "https://www.drupal.org/user/34869" + }, + { + "name": "gdl", + "homepage": "https://www.drupal.org/user/507326" + }, + { + "name": "mondrake", + "homepage": "https://www.drupal.org/user/1307444" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "walkah", + "homepage": "https://www.drupal.org/user/1531" + } + ], + "description": "Provides an image toolkit to integrate ImageMagick with the Image API.", + "homepage": "https://www.drupal.org/project/imagemagick", + "support": { + "source": "https://git.drupalcode.org/project/imagemagick" + }, + "install-path": "../../web/modules/contrib/imagemagick" + }, + { + "name": "drupal/imce", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/imce.git", + "reference": "8.x-2.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/imce-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "87548af8f66ef91146b70046755c1700a3847be6" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.3", + "datestamp": "1599926540", + "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": "See contributors", + "homepage": "https://www.drupal.org/node/2841111/committers", + "role": "Developer" + }, + { + "name": "ufku", + "homepage": "https://www.drupal.org/user/9910" + } + ], + "description": "Provides a file manager supporting personal folders.", + "homepage": "https://drupal.org/project/imce", + "support": { + "source": "https://git.drupalcode.org/project/imce", + "issues": "https://www.drupal.org/project/issues/imce?version=8.x" + }, + "install-path": "../../web/modules/contrib/imce" + }, + { + "name": "drupal/jquery_ui", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "64c19ecc8902e2b4b1ab0cc5f5fe28dbc83bfebe" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1582149957", + "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": "RobLoach", + "homepage": "https://www.drupal.org/user/61114" + }, + { + "name": "jjeff", + "homepage": "https://www.drupal.org/user/17190" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "litwol", + "homepage": "https://www.drupal.org/user/78134" + }, + { + "name": "mfb", + "homepage": "https://www.drupal.org/user/12302" + }, + { + "name": "mfer", + "homepage": "https://www.drupal.org/user/25701" + }, + { + "name": "mikelutz", + "homepage": "https://www.drupal.org/user/2972409" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "webchick", + "homepage": "https://www.drupal.org/user/24967" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI library.", + "homepage": "https://www.drupal.org/project/jquery_ui", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui" + }, + "install-path": "../../web/modules/contrib/jquery_ui" + }, + { + "name": "drupal/jquery_ui_draggable", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui_draggable.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui_draggable-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "09e17046e38aebf84ed573822b0d5be6de3f0c94" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/jquery_ui": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1582150027", + "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": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI Draggable library.", + "homepage": "https://www.drupal.org/project/jquery_ui_draggable", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui_draggable" + }, + "install-path": "../../web/modules/contrib/jquery_ui_draggable" + }, + { + "name": "drupal/jquery_ui_droppable", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui_droppable.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui_droppable-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "6e53043f2d3215f211721eea4d4c6ab5d1672b14" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/jquery_ui": "*", + "drupal/jquery_ui_draggable": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1582150071", + "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": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI Droppable library.", + "homepage": "https://www.drupal.org/project/jquery_ui_droppable", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui_droppable" + }, + "install-path": "../../web/modules/contrib/jquery_ui_droppable" + }, + { + "name": "drupal/kint", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "require": { + "drupal/core": "~8.0", + "drupal/devel": "^2" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-2.1", + "datestamp": "1556799496", + "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": "drupalspoons", + "homepage": "https://www.drupal.org/user/3647684" + }, + { + "name": "moshe weitzman", + "homepage": "https://www.drupal.org/user/23" + } + ], + "description": "Wrapper for Kint debugging tool.", + "homepage": "https://www.drupal.org/project/devel", + "support": { + "source": "https://git.drupalcode.org/project/devel" + }, + "install-path": null + }, + { + "name": "drupal/ludwig", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ludwig.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ludwig-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "d951c3b4f76f8b0c2f8877793a392868f3537743" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1613389167", + "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": "bojanz", + "homepage": "https://www.drupal.org/user/86106" + }, + { + "name": "devad", + "homepage": "https://www.drupal.org/user/2268520" + }, + { + "name": "jsacksick", + "homepage": "https://www.drupal.org/user/972218" + }, + { + "name": "mglaman", + "homepage": "https://www.drupal.org/user/2416470" + } + ], + "description": "Provides a manual alternative to Composer.", + "homepage": "https://www.drupal.org/project/ludwig", + "support": { + "source": "https://git.drupalcode.org/project/ludwig" + }, + "install-path": "../../web/modules/contrib/ludwig" + }, + { + "name": "drupal/mailsystem", + "version": "4.3.0", + "version_normalized": "4.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/mailsystem.git", + "reference": "8.x-4.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/mailsystem-8.x-4.3.zip", + "reference": "8.x-4.3", + "shasum": "1a74016e268ff207535be5d5e42ac8f72ac89050" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.3", + "datestamp": "1586203024", + "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": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Les Lim", + "homepage": "https://www.drupal.org/user/84263" + }, + { + "name": "Manuel Garcia", + "homepage": "https://www.drupal.org/user/213194" + }, + { + "name": "Nafes", + "homepage": "https://www.drupal.org/user/2489926" + }, + { + "name": "miro_dietiker", + "homepage": "https://www.drupal.org/user/227761" + }, + { + "name": "pillarsdotnet", + "homepage": "https://www.drupal.org/user/36148" + } + ], + "description": "Mail System", + "homepage": "https://www.drupal.org/project/mailsystem", + "support": { + "source": "https://git.drupalcode.org/project/mailsystem" + }, + "install-path": "../../web/modules/contrib/mailsystem" + }, + { + "name": "drupal/matomo", + "version": "1.11.0", + "version_normalized": "1.11.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/matomo.git", + "reference": "8.x-1.11" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/matomo-8.x-1.11.zip", + "reference": "8.x-1.11", + "shasum": "82be96c20ab15df03d199ab98d047cef6e67d40b" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/php": "*", + "drupal/token": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.11", + "datestamp": "1601651459", + "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": "Carsten Logemann", + "homepage": "https://www.drupal.org/u/C_Logemann" + }, + { + "name": "Shelane French", + "homepage": "https://www.drupal.org/u/shelane" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/247808/committers" + } + ], + "description": "Adds Matomo javascript tracking code to all your site's pages", + "homepage": "https://www.drupal.org/project/matomo", + "support": { + "source": "https://git.drupal.org/project/matomo.git", + "issues": "https://www.drupal.org/project/issues/matomo" + }, + "install-path": "../../web/modules/contrib/matomo" + }, + { + "name": "drupal/memcache", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/memcache.git", + "reference": "8.x-2.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/memcache-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "b2f9715612be74f9ce55daaf838f6f17a9eb2f5a" + }, + "require": { + "drupal/core": "^8.9 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.3", + "datestamp": "1614802365", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-2.x": "2.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Fabianx", + "homepage": "https://www.drupal.org/user/693738" + }, + { + "name": "Jeremy", + "homepage": "https://www.drupal.org/user/409" + }, + { + "name": "bdragon", + "homepage": "https://www.drupal.org/user/53081" + }, + { + "name": "catch", + "homepage": "https://www.drupal.org/user/35733" + }, + { + "name": "damiankloip", + "homepage": "https://www.drupal.org/user/1037976" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "jvandyk", + "homepage": "https://www.drupal.org/user/2375" + }, + { + "name": "robertDouglass", + "homepage": "https://www.drupal.org/user/5449" + } + ], + "description": "High performance integration with memcache.", + "homepage": "http://drupal.org/project/memcache", + "support": { + "source": "https://git.drupalcode.org/project/memcache", + "issues": "https://www.drupal.org/project/issues/memcache" + }, + "install-path": "../../web/modules/contrib/memcache" + }, + { + "name": "drupal/menu_block", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/menu_block.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/menu_block-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "3da96af15c3a5f5f1966e28b6e87b74228617998" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1587721600", + "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": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "JohnAlbin", + "homepage": "https://www.drupal.org/user/32095" + }, + { + "name": "RenatoG", + "homepage": "https://www.drupal.org/user/3326031" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "kim.pepper", + "homepage": "https://www.drupal.org/user/370574" + }, + { + "name": "rrrob", + "homepage": "https://www.drupal.org/user/273533" + } + ], + "description": "Provides configurable blocks of menu links.", + "homepage": "https://www.drupal.org/project/menu_block", + "support": { + "source": "https://git.drupalcode.org/project/menu_block" + }, + "install-path": "../../web/modules/contrib/menu_block" + }, + { + "name": "drupal/menu_breadcrumb", + "version": "1.14.0", + "version_normalized": "1.14.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/menu_breadcrumb.git", + "reference": "8.x-1.14" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/menu_breadcrumb-8.x-1.14.zip", + "reference": "8.x-1.14", + "shasum": "3edeb447410cdb0635d0babbfc641010014bee7f" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.14", + "datestamp": "1598626277", + "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": "RyanPrice", + "homepage": "https://www.drupal.org/user/873848" + }, + { + "name": "aaron", + "homepage": "https://www.drupal.org/user/33420" + }, + { + "name": "gdevlugt", + "homepage": "https://www.drupal.org/user/167273" + }, + { + "name": "rphair", + "homepage": "https://www.drupal.org/user/3196607" + }, + { + "name": "vaibhavjain", + "homepage": "https://www.drupal.org/user/1159692" + }, + { + "name": "xurizaemon", + "homepage": "https://www.drupal.org/user/76026" + } + ], + "description": "Create breadcrumbs from nested menu titles and/or taxonomy membership.", + "homepage": "https://www.drupal.org/project/menu_breadcrumb", + "support": { + "source": "https://git.drupalcode.org/project/menu_breadcrumb" + }, + "install-path": "../../web/modules/contrib/menu_breadcrumb" + }, + { + "name": "drupal/menu_force", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/menu_force.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/menu_force-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "96036cf057002223ee08d1f03e494cbad25439ac" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1593463689", + "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": "BarisW", + "homepage": "https://www.drupal.org/user/107229" + }, + { + "name": "perennial.sky", + "homepage": "https://www.drupal.org/user/2622667" + }, + { + "name": "scuba_fly", + "homepage": "https://www.drupal.org/user/953390" + } + ], + "description": "Makes sure a node gets added to the menu system on specific content types", + "homepage": "https://www.drupal.org/project/menu_force", + "support": { + "source": "https://git.drupalcode.org/project/menu_force" + }, + "install-path": "../../web/modules/contrib/menu_force" + }, + { + "name": "drupal/metatag", + "version": "1.16.0", + "version_normalized": "1.16.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/metatag.git", + "reference": "8.x-1.16" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.16.zip", + "reference": "8.x-1.16", + "shasum": "1c0028f4ff4583dc6601035657dd631c351b290c" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/token": "^1.0" + }, + "require-dev": { + "drupal/devel": "^4.0", + "drupal/metatag_dc": "*", + "drupal/metatag_open_graph": "*", + "drupal/page_manager": "4.x-dev", + "drupal/panelizer": "4.x-dev", + "drupal/redirect": "1.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.16", + "datestamp": "1615820867", + "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": "See contributors", + "homepage": "https://www.drupal.org/node/640498/committers", + "role": "Developer" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + } + ], + "description": "Manage meta tags for all entities.", + "homepage": "https://www.drupal.org/project/metatag", + "keywords": [ + "Drupal", + "seo" + ], + "support": { + "source": "https://git.drupalcode.org/project/metatag", + "issues": "https://www.drupal.org/project/issues/metatag", + "docs": "https://www.drupal.org/docs/8/modules/metatag" + }, + "install-path": "../../web/modules/contrib/metatag" + }, + { + "name": "drupal/migrate_devel", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_devel.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_devel-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "d8b6c8b1c6238a3a1cae241ce5dca759028c9504" + }, + "require": { + "drupal/core": "^8", + "drupal/devel": "*", + "drupal/kint": "*" + }, + "conflict": { + "drupal/core": ">=9", + "drush/drush": ">=9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1592350448", + "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": "Derimagia", + "homepage": "https://www.drupal.org/user/819640" + }, + { + "name": "aczietlow", + "homepage": "https://www.drupal.org/user/1616656" + }, + { + "name": "andrewmacpherson", + "homepage": "https://www.drupal.org/user/265648" + } + ], + "description": "Migrate Development Tools", + "homepage": "https://www.drupal.org/project/migrate_devel", + "support": { + "source": "https://git.drupalcode.org/project/migrate_devel", + "issues": "https://www.drupal.org/project/issues/migrate_devel" + }, + "install-path": "../../web/modules/contrib/migrate_devel" + }, + { + "name": "drupal/migrate_plus", + "version": "4.2.0", + "version_normalized": "4.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_plus.git", + "reference": "8.x-4.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_plus-8.x-4.2.zip", + "reference": "8.x-4.2", + "shasum": "5736a43e39cc5c091d54ceef2849ea35ba979af3" + }, + "require": { + "drupal/core": "^8.3" + }, + "require-dev": { + "drupal/entity": "*", + "drupal/migrate_example_advanced_setup": "*", + "drupal/migrate_example_setup": "*", + "drupal/migrate_tools": "*", + "drupal/profile": "*" + }, + "suggest": { + "ext-soap": "*", + "sainsburys/guzzle-oauth2-plugin": "3.0 required for the OAuth2 authentication plugin" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.2", + "datestamp": "1555683487", + "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": "Mike Ryan", + "homepage": "https://www.drupal.org/u/mikeryan", + "role": "Maintainer" + }, + { + "name": "mikeryan", + "homepage": "https://www.drupal.org/user/4420" + } + ], + "description": "Enhancements to core migration support.", + "homepage": "https://www.drupal.org/project/migrate_plus", + "support": { + "source": "https://cgit.drupalcode.org/migrate_plus", + "issues": "https://www.drupal.org/project/issues/migrate_plus", + "irc": "irc://irc.freenode.org/drupal-migrate" + }, + "install-path": "../../web/modules/contrib/migrate_plus" + }, + { + "name": "drupal/migrate_tools", + "version": "4.5.0", + "version_normalized": "4.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_tools.git", + "reference": "8.x-4.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_tools-8.x-4.5.zip", + "reference": "8.x-4.5", + "shasum": "06390b359bf53c50a30f2d6dc4c7542bfb1fe7ca" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/migrate_plus": "^4 || ^5" + }, + "require-dev": { + "drupal/migrate_plus": "4.x-dev", + "drupal/migrate_source_csv": "^2.2", + "drush/drush": "^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.5", + "datestamp": "1574693285", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "drupalspoons", + "homepage": "https://www.drupal.org/user/3647684" + }, + { + "name": "mikeryan", + "homepage": "https://www.drupal.org/user/4420" + } + ], + "description": "Tools to assist in developing and running migrations.", + "homepage": "http://drupal.org/project/migrate_tools", + "support": { + "source": "http://cgit.drupalcode.org/migrate_tools", + "issues": "http://drupal.org/project/migrate_tools", + "irc": "irc://irc.freenode.org/drupal-migrate" + }, + "install-path": "../../web/modules/contrib/migrate_tools" + }, + { + "name": "drupal/migrate_upgrade", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/migrate_upgrade.git", + "reference": "8.x-3.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/migrate_upgrade-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "f7be28c9fa9e2c56db24fafaf4e9cd6815582aed" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/migrate_plus": "^4 || ^5", + "drush/drush": "^8 || ^9 || ^10", + "php": ">7.1" + }, + "require-dev": { + "drupal/migrate_plus": "^5", + "drush/drush": "^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.2", + "datestamp": "1588260599", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Mike Ryan", + "homepage": "https://www.drupal.org/u/mikeryan", + "role": "Maintainer" + }, + { + "name": "Lucas Hedding", + "homepage": "https://www.drupal.org/u/heddn", + "role": "Maintainer" + } + ], + "description": "Drush support for direct upgrades from older Drupal versions.", + "homepage": "https://www.drupal.org/project/migrate_upgrade", + "support": { + "source": "https://git.drupalcode.org/project/migrate_upgrade", + "issues": "https://www.drupal.org/project/issues/migrate_upgrade", + "slack": "#migrate" + }, + "install-path": "../../web/modules/contrib/migrate_upgrade" + }, + { + "name": "drupal/module_filter", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/module_filter.git", + "reference": "8.x-3.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/module_filter-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "b5c1a5141da392340232a1ad0934b921b862e1f4" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.2", + "datestamp": "1614918371", + "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": "andrey.troeglazov", + "homepage": "https://www.drupal.org/user/3145389" + }, + { + "name": "greenSkin", + "homepage": "https://www.drupal.org/user/173855" + } + ], + "description": "Filter the modules list.", + "homepage": "http://drupal.org/project/module_filter", + "support": { + "source": "https://git.drupalcode.org/project/module_filter", + "issues": "https://www.drupal.org/project/issues/module_filter" + }, + "install-path": "../../web/modules/contrib/module_filter" + }, + { + "name": "drupal/node_view_permissions", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/node_view_permissions.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/node_view_permissions-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "ba113ff1be022517a739dbf16d5caaae6dcccfd9" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1603096039", + "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": "adci_contributor", + "homepage": "https://www.drupal.org/user/1830536" + }, + { + "name": "adcillc", + "homepage": "https://www.drupal.org/user/366450" + }, + { + "name": "hoter", + "homepage": "https://www.drupal.org/user/1677790" + } + ], + "description": "Enables permissions \"View own content\" and \"View any content\" for each content type.", + "homepage": "https://www.drupal.org/project/node_view_permissions", + "support": { + "source": "https://git.drupalcode.org/project/node_view_permissions" + }, + "install-path": "../../web/modules/contrib/node_view_permissions" + }, + { + "name": "drupal/openid_connect", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/openid_connect.git", + "reference": "8.x-1.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/openid_connect-8.x-1.0.zip", + "reference": "8.x-1.0", + "shasum": "62127d6f81950124c41a76f921678ab6f0a651e3" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "ext-json": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0", + "datestamp": "1608316550", + "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": "Mario Steinitz", + "homepage": "https://www.drupal.org/user/2536014" + }, + { + "name": "balintk", + "homepage": "https://www.drupal.org/user/613760" + }, + { + "name": "bojanz", + "homepage": "https://www.drupal.org/user/86106" + }, + { + "name": "jcnventura", + "homepage": "https://www.drupal.org/user/122464" + }, + { + "name": "pfrilling", + "homepage": "https://www.drupal.org/user/169695" + }, + { + "name": "pjcdawkins", + "homepage": "https://www.drupal.org/user/1025236" + }, + { + "name": "robertDouglass", + "homepage": "https://www.drupal.org/user/5449" + }, + { + "name": "sanduhrs", + "homepage": "https://www.drupal.org/user/28074" + } + ], + "description": "A pluggable client implementation for the OpenID Connect protocol.", + "homepage": "https://www.drupal.org/project/openid_connect", + "keywords": [ + "Drupal" + ], + "support": { + "source": "https://git.drupalcode.org/project/openid_connect", + "issues": "https://www.drupal.org/project/issues/openid_connect" + }, + "install-path": "../../web/modules/contrib/openid_connect" + }, + { + "name": "drupal/panelbutton", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/panelbutton.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/panelbutton-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "1d65e6b9d9b1dfbc27364e2b713f63826bc33031" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1592593051", + "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": "Kevin Quillen (kevinquillen)", + "homepage": "https://www.drupal.org/u/kevinquillen", + "role": "Maintainer" + }, + { + "name": "ddrozdik", + "homepage": "https://www.drupal.org/user/574124" + }, + { + "name": "kevinquillen", + "homepage": "https://www.drupal.org/user/317279" + } + ], + "description": "Adds the Panel Button plugin to CKEditor. This plugin is a utility plugin that is required by certain user-facing CKEditor plugins.", + "homepage": "http://drupal.org/project/panelbutton", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/panelbutton", + "issues": "http://drupal.org/project/issues/panelbutton" + }, + "install-path": "../../web/modules/contrib/panelbutton" + }, + { + "name": "drupal/panelizer", + "version": "4.4.0", + "version_normalized": "4.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/panelizer.git", + "reference": "8.x-4.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/panelizer-8.x-4.4.zip", + "reference": "8.x-4.4", + "shasum": "2d19f0be1ad05a0882a276befabf746041b1b5d8" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/ctools": ">=3.1.0", + "drupal/ctools_block": "*", + "drupal/panels": ">=4.4.0", + "drupal/panels_ipe": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.4", + "datestamp": "1588097387", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-4.x": "4.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Damien McKenna", + "homepage": "https://www.drupal.org/u/damienmckenna" + }, + { + "name": "Kris Vanderwater", + "homepage": "https://www.drupal.org/u/eclipsegc" + }, + { + "name": "David Snopek", + "homepage": "https://www.drupal.org/u/dsnopek" + }, + { + "name": "Jakob Perry", + "homepage": "https://www.drupal.org/u/japerry" + }, + { + "name": "Earl Miles", + "homepage": "https://www.drupal.org/u/merlinofchaos" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/1072922/committers" + }, + { + "name": "phenaproxima", + "homepage": "https://www.drupal.org/user/205645" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Allow any entity view mode to be rendered using a Panels display.", + "homepage": "https://www.drupal.org/project/panelizer", + "support": { + "source": "http://git.drupal.org/project/panelizer.git", + "issues": "https://www.drupal.org/project/issues/panelizer", + "irc": "irc://irc.freenode.org/drupal-scotch" + }, + "install-path": "../../web/modules/contrib/panelizer" + }, + { + "name": "drupal/panels", + "version": "4.6.0", + "version_normalized": "4.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/panels.git", + "reference": "8.x-4.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/panels-8.x-4.6.zip", + "reference": "8.x-4.6", + "shasum": "6430436a4d8fb64f8c113729dd92505a1e46b794" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/ctools": ">=3.0.0", + "drupal/jquery_ui_droppable": "^1.2" + }, + "require-dev": { + "drupal/jquery_ui_droppable": "*", + "drupal/page_manager": "^4" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.6", + "datestamp": "1585870866", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "branch-alias": { + "dev-8.x-4.x": "4.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Jakob Perry", + "homepage": "https://www.drupal.org/u/japerry" + }, + { + "name": "Samuel Mortenson", + "homepage": "https://www.drupal.org/u/samuel.mortenson" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/74958/committers" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "phenaproxima", + "homepage": "https://www.drupal.org/user/205645" + }, + { + "name": "samuel.mortenson", + "homepage": "https://www.drupal.org/user/2582268" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Core Panels display functions; provides no external UI, at least one other Panels module should be enabled.", + "homepage": "https://www.drupal.org/project/panels", + "support": { + "source": "http://git.drupal.org/project/panels.git", + "issues": "https://www.drupal.org/project/issues/panels", + "irc": "irc://irc.freenode.org/drupal-scotch" + }, + "install-path": "../../web/modules/contrib/panels" + }, + { + "name": "drupal/panels_ipe", + "version": "4.6.0", + "version_normalized": "4.6.0.0", + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/jquery_ui_droppable": "*", + "drupal/panels": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-4.6", + "datestamp": "1585870866", + "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": "EclipseGc", + "homepage": "https://www.drupal.org/user/61203" + }, + { + "name": "Letharion", + "homepage": "https://www.drupal.org/user/373603" + }, + { + "name": "esmerel", + "homepage": "https://www.drupal.org/user/164022" + }, + { + "name": "japerry", + "homepage": "https://www.drupal.org/user/45640" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + }, + { + "name": "merlinofchaos", + "homepage": "https://www.drupal.org/user/26979" + }, + { + "name": "neclimdul", + "homepage": "https://www.drupal.org/user/48673" + }, + { + "name": "phenaproxima", + "homepage": "https://www.drupal.org/user/205645" + }, + { + "name": "samuel.mortenson", + "homepage": "https://www.drupal.org/user/2582268" + }, + { + "name": "tim.plunkett", + "homepage": "https://www.drupal.org/user/241634" + } + ], + "description": "Panels In-place editor.", + "homepage": "https://www.drupal.org/project/panels", + "support": { + "source": "https://git.drupalcode.org/project/panels" + }, + "install-path": null + }, + { + "name": "drupal/paragraphs", + "version": "1.12.0", + "version_normalized": "1.12.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/paragraphs.git", + "reference": "8.x-1.12" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.12.zip", + "reference": "8.x-1.12", + "shasum": "3b67d8af1160af42d93a4610be1e02869e428965" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/entity_reference_revisions": "~1.3" + }, + "require-dev": { + "drupal/block_field": "~1.0", + "drupal/ctools": "3.x-dev", + "drupal/diff": "~1.0", + "drupal/entity_browser": "2.x-dev", + "drupal/entity_usage": "2.x-dev", + "drupal/field_group": "3.x-dev", + "drupal/inline_entity_form": "~1.0", + "drupal/paragraphs-paragraphs_library": "*", + "drupal/replicate": "~1.0", + "drupal/search_api": "~1.0", + "drupal/search_api_db": "*" + }, + "suggest": { + "drupal/entity_browser": "Recommended for an improved user experience when using the Paragraphs library module" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.12", + "datestamp": "1590140081", + "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": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Frans", + "homepage": "https://www.drupal.org/user/514222" + }, + { + "name": "Primsi", + "homepage": "https://www.drupal.org/user/282629" + }, + { + "name": "jeroen.b", + "homepage": "https://www.drupal.org/user/1853532" + }, + { + "name": "jstoller", + "homepage": "https://www.drupal.org/user/99012" + }, + { + "name": "miro_dietiker", + "homepage": "https://www.drupal.org/user/227761" + } + ], + "description": "Enables the creation of Paragraphs entities.", + "homepage": "https://www.drupal.org/project/paragraphs", + "support": { + "source": "https://git.drupalcode.org/project/paragraphs" + }, + "install-path": "../../web/modules/contrib/paragraphs" + }, + { + "name": "drupal/pathauto", + "version": "1.8.0", + "version_normalized": "1.8.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/pathauto.git", + "reference": "8.x-1.8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/pathauto-8.x-1.8.zip", + "reference": "8.x-1.8", + "shasum": "ede3216abb9c4f77709338d9147334c595046329" + }, + "require": { + "drupal/core": "^8.8 || ^9", + "drupal/ctools": "*", + "drupal/token": "*" + }, + "suggest": { + "drupal/redirect": "When installed Pathauto will provide a new \"Update Action\" in case your URLs change. This is the recommended update action and is considered the best practice for SEO and usability." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.8", + "datestamp": "1588103046", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "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": "Freso", + "homepage": "https://www.drupal.org/user/27504" + }, + { + "name": "greggles", + "homepage": "https://www.drupal.org/user/36762" + } + ], + "description": "Provides a mechanism for modules to automatically generate aliases for the content they manage.", + "homepage": "https://www.drupal.org/project/pathauto", + "support": { + "source": "https://cgit.drupalcode.org/pathauto", + "issues": "https://www.drupal.org/project/issues/pathauto", + "documentation": "https://www.drupal.org/docs/8/modules/pathauto" + }, + "install-path": "../../web/modules/contrib/pathauto" + }, + { + "name": "drupal/permissions_by_term", + "version": "2.31.0", + "version_normalized": "2.31.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/permissions_by_term.git", + "reference": "8.x-2.31" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/permissions_by_term-8.x-2.31.zip", + "reference": "8.x-2.31", + "shasum": "b92e303e579937a6985d21751e72ad67a1d4404b" + }, + "require": { + "drupal/core": "^8.0", + "php": ">=7.1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.31", + "datestamp": "1614602591", + "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": "Peter Majmesku", + "homepage": "https://www.drupal.org/user/786132", + "email": "majmesku@publicplan.de" + }, + { + "name": "SaschaHannes", + "homepage": "https://www.drupal.org/user/3536189" + }, + { + "name": "marcoliver", + "homepage": "https://www.drupal.org/user/1529744" + } + ], + "description": "Restricts access to nodes by taxonomy terms in relation to users and their roles.", + "homepage": "https://www.drupal.org/project/permissions_by_term", + "support": { + "source": "https://git.drupalcode.org/project/permissions_by_term" + }, + "install-path": "../../web/modules/contrib/permissions_by_term" + }, + { + "name": "drupal/piwik", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/piwik.git", + "reference": "8.x-1.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/piwik-8.x-1.4.zip", + "reference": "8.x-1.4", + "shasum": "3692831f4b3de636e90679fb052ba8f30e49ac97" + }, + "require": { + "drupal/core": "~8.0", + "drupal/matomo": "^1.0" + }, + "require-dev": { + "drupal/php": "*", + "drupal/token": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.4", + "datestamp": "1530437786", + "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": "hass", + "homepage": "https://www.drupal.org/u/hass" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/247808/committers" + } + ], + "description": "Adds Piwik javascript tracking code to all your site's pages", + "homepage": "https://www.drupal.org/project/piwik", + "support": { + "source": "http://git.drupal.org/project/piwik.git", + "issues": "https://www.drupal.org/project/issues/piwik" + }, + "install-path": "../../web/modules/contrib/piwik" + }, + { + "name": "drupal/recaptcha", + "version": "2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/recaptcha.git", + "reference": "8.x-2.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/recaptcha-8.x-2.5.zip", + "reference": "8.x-2.5", + "shasum": "ffc4e334c2b09cb04b75fa9e0df3f63d1ebde0bc" + }, + "require": { + "drupal/captcha": "^1.0.0-alpha1", + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.5", + "datestamp": "1580340616", + "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": "hass", + "homepage": "https://www.drupal.org/u/hass" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/147903/committers" + }, + { + "name": "amykhailova", + "homepage": "https://www.drupal.org/user/2892725" + }, + { + "name": "diolan", + "homepage": "https://www.drupal.org/user/2336786" + }, + { + "name": "hass", + "homepage": "https://www.drupal.org/user/85918" + }, + { + "name": "id.medion", + "homepage": "https://www.drupal.org/user/2542592" + }, + { + "name": "kim.pepper", + "homepage": "https://www.drupal.org/user/370574" + }, + { + "name": "rfay", + "homepage": "https://www.drupal.org/user/30906" + }, + { + "name": "soxofaan", + "homepage": "https://www.drupal.org/user/41478" + }, + { + "name": "wundo", + "homepage": "https://www.drupal.org/user/25523" + } + ], + "description": "Protect your website from spam and abuse while letting real people pass through with ease.", + "homepage": "https://www.drupal.org/project/recaptcha", + "support": { + "source": "https://git.drupal.org/project/recaptcha.git", + "issues": "https://www.drupal.org/project/issues/recaptcha" + }, + "install-path": "../../web/modules/contrib/recaptcha" + }, + { + "name": "drupal/redirect", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/redirect.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/redirect-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "f848e001deac8425ae57d4b9397087c491d37294" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1589312204", + "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": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "pifagor", + "homepage": "https://www.drupal.org/user/2375692" + } + ], + "description": "Allows users to redirect from old URLs to new URLs.", + "homepage": "https://www.drupal.org/project/redirect", + "support": { + "source": "https://git.drupalcode.org/project/redirect" + }, + "install-path": "../../web/modules/contrib/redirect" + }, + { + "name": "drupal/require_login", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/require_login.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/require_login-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "b47b0bde6925d83fe48b835bfd95ed35296b5897" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.4", + "datestamp": "1615474748", + "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": "robphillips", + "homepage": "https://www.drupal.org/user/459772" + } + ], + "description": "Provides catch-all solution to require user authentication on pages.", + "homepage": "https://www.drupal.org/project/require_login", + "support": { + "source": "https://git.drupalcode.org/project/require_login" + }, + "install-path": "../../web/modules/contrib/require_login" + }, + { + "name": "drupal/rules", + "version": "3.0.0-alpha6", + "version_normalized": "3.0.0.0-alpha6", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/rules.git", + "reference": "8.x-3.0-alpha6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/rules-8.x-3.0-alpha6.zip", + "reference": "8.x-3.0-alpha6", + "shasum": "073bf5c23f0ef8f1aebf56538249d50d631d5a24" + }, + "require": { + "drupal/core": "^8.7", + "drupal/typed_data": "1.x-dev" + }, + "require-dev": { + "drupal/typed_data": "1.x-dev" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.0-alpha6", + "datestamp": "1595975406", + "security-coverage": { + "status": "not-covered", + "message": "Alpha releases are not covered by Drupal security advisories." + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TR", + "homepage": "https://www.drupal.org/user/202830" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "klausi", + "homepage": "https://www.drupal.org/user/262198" + } + ], + "description": "React on events and conditionally evaluate actions.", + "homepage": "https://www.drupal.org/project/rules", + "support": { + "source": "https://git.drupalcode.org/project/rules", + "issues": "https://www.drupal.org/project/issues/rules" + }, + "install-path": "../../web/modules/contrib/rules" + }, + { + "name": "drupal/scheduler", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/scheduler.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/scheduler-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "704f9e289c7a42ddfb65297beb0be02e324f02c6" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/devel_generate": "^2.0 || 3.x-dev", + "drupal/rules": "^3", + "drush/drush": "^9.0 || ^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1591436219", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Eric Schaefer (Eric Schaefer)", + "homepage": "https://www.drupal.org/u/eric-schaefer", + "role": "Maintainer" + }, + { + "name": "Jonathan Smith (jonathan1055)", + "homepage": "https://www.drupal.org/u/jonathan1055", + "role": "Maintainer" + }, + { + "name": "Pieter Frenssen (pfrenssen)", + "homepage": "https://www.drupal.org/u/pfrenssen", + "role": "Maintainer" + }, + { + "name": "Rick Manelius (rickmanelius)", + "homepage": "https://www.drupal.org/u/rickmanelius", + "role": "Maintainer" + } + ], + "description": "Automatically publish and unpublish content at specified dates and times.", + "homepage": "https://drupal.org/project/scheduler", + "support": { + "source": "https://git.drupalcode.org/project/scheduler", + "issues": "https://www.drupal.org/project/issues/scheduler" + }, + "install-path": "../../web/modules/contrib/scheduler" + }, + { + "name": "drupal/search_api", + "version": "1.19.0", + "version_normalized": "1.19.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/search_api.git", + "reference": "8.x-1.19" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/search_api-8.x-1.19.zip", + "reference": "8.x-1.19", + "shasum": "5654e9d02117e28c585d89a25ea3cc40d20c5019" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "conflict": { + "drupal/search_api_solr": "2.* || 3.0 || 3.1" + }, + "require-dev": { + "drupal/language_fallback_fix": "@dev", + "drupal/search_api_autocomplete": "@dev", + "drupal/search_api_db": "*" + }, + "suggest": { + "drupal/facets": "Adds the ability to create faceted searches.", + "drupal/search_api_autocomplete": "Allows adding autocomplete suggestions to search fields.", + "drupal/search_api_solr": "Adds support for using Apache Solr as a backend." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.19", + "datestamp": "1612192040", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Thomas Seidl", + "homepage": "https://www.drupal.org/u/drunken-monkey" + }, + { + "name": "Nick Veenhof", + "homepage": "https://www.drupal.org/u/nick_vh" + }, + { + "name": "See other contributors", + "homepage": "https://www.drupal.org/node/790418/committers" + } + ], + "description": "Provides a generic framework for modules offering search capabilities.", + "homepage": "https://www.drupal.org/project/search_api", + "support": { + "source": "https://git.drupalcode.org/project/search_api", + "issues": "https://www.drupal.org/project/issues/search_api", + "irc": "irc://irc.freenode.org/drupal-search-api" + }, + "install-path": "../../web/modules/contrib/search_api" + }, + { + "name": "drupal/simplesamlphp_auth", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/simplesamlphp_auth.git", + "reference": "8.x-3.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "a5a2b10fc873eb8669929ad1a6d9599e47a2ca99" + }, + "require": { + "drupal/core": "^8.7|^9.0", + "drupal/externalauth": "^1.1", + "simplesamlphp/simplesamlphp": "^1.18.2" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-3.2", + "datestamp": "1580423953", + "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": "Berdir", + "homepage": "https://www.drupal.org/user/214652" + }, + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "dakku", + "homepage": "https://www.drupal.org/user/97634" + }, + { + "name": "geekwisdom", + "homepage": "https://www.drupal.org/user/1662" + }, + { + "name": "snufkin", + "homepage": "https://www.drupal.org/user/58645" + }, + { + "name": "svendecabooter", + "homepage": "https://www.drupal.org/user/35369" + } + ], + "description": "Allows users to authenticate to a remote SAML identity provider (IdP) via a locally configured SimpleSAMLphp service point (SP).", + "homepage": "https://www.drupal.org/project/simplesamlphp_auth", + "support": { + "source": "https://git.drupalcode.org/project/simplesamlphp_auth" + }, + "install-path": "../../web/modules/contrib/simplesamlphp_auth" + }, + { + "name": "drupal/smart_trim", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/smart_trim.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/smart_trim-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "5894aa067fba19a3452ed8ce749f33bd9ae91907" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1589766531", + "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": "Mark Casias (markie)", + "homepage": "https://www.drupal.org/u/markie", + "role": "Maintainer" + }, + { + "name": "newsignature", + "homepage": "https://www.drupal.org/user/765518" + }, + { + "name": "ultimike", + "homepage": "https://www.drupal.org/user/51132" + }, + { + "name": "volkswagenchick", + "homepage": "https://www.drupal.org/user/3332522" + } + ], + "description": "Provides a more robust alternative to 'summary or trimmed' textfield format.", + "homepage": "https://drupal.org/project/smart_trim", + "support": { + "source": "https://cgit.drupalcode.org/smart_trim", + "issues": "https://drupal.org/project/issues/smart_trim" + }, + "install-path": "../../web/modules/contrib/smart_trim" + }, + { + "name": "drupal/sticky", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/sticky.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/sticky-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "98735598ba94c5ef2c0ae2ee77717174994724a4" + }, + "require": { + "drupal/core": "~8.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1491909243", + "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": "f0ns", + "homepage": "https://www.drupal.org/user/723426" + } + ], + "description": "Sticky is a module that gives you the ability to make any element on your website to always stay visible.", + "homepage": "https://www.drupal.org/project/sticky", + "support": { + "source": "https://git.drupalcode.org/project/sticky" + }, + "install-path": "../../web/modules/contrib/sticky" + }, + { + "name": "drupal/token", + "version": "1.9.0", + "version_normalized": "1.9.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/token.git", + "reference": "8.x-1.9" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/token-8.x-1.9.zip", + "reference": "8.x-1.9", + "shasum": "a5d234382a1a0e4ba61d4c7a2fa10671ca656be4" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.9", + "datestamp": "1608284866", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "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": "eaton", + "homepage": "https://www.drupal.org/user/16496" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + }, + { + "name": "greggles", + "homepage": "https://www.drupal.org/user/36762" + }, + { + "name": "mikeryan", + "homepage": "https://www.drupal.org/user/4420" + } + ], + "description": "Provides a user interface for the Token API, some missing core tokens.", + "homepage": "https://www.drupal.org/project/token", + "support": { + "source": "https://git.drupalcode.org/project/token" + }, + "install-path": "../../web/modules/contrib/token" + }, + { + "name": "drupal/twig_tweak", + "version": "2.9.0", + "version_normalized": "2.9.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/twig_tweak.git", + "reference": "8.x-2.9" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/twig_tweak-8.x-2.9.zip", + "reference": "8.x-2.9", + "shasum": "c45ba1a41e323a432d1ff36d0a72344b88595a39" + }, + "require": { + "drupal/core": "^8.7 || ^9.0", + "twig/twig": "^1.41 || ^2.12" + }, + "suggest": { + "symfony/var-dumper": "Better dump() function for debugging Twig variables" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.9", + "datestamp": "1608093728", + "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": "Chi", + "homepage": "https://www.drupal.org/user/556138" + } + ], + "description": "A Twig extension with some useful functions and filters for Drupal development.", + "homepage": "https://www.drupal.org/project/twig_tweak", + "keywords": [ + "Drupal", + "Twig" + ], + "support": { + "source": "https://git.drupalcode.org/project/twig_tweak", + "issues": "https://www.drupal.org/project/issues/twig_tweak" + }, + "install-path": "../../web/modules/contrib/twig_tweak" + }, + { + "name": "drupal/typed_data", + "version": "dev-1.x", + "version_normalized": "dev-1.x", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/typed_data.git", + "reference": "27555f47b522730d04f3b33c9a46c0acbcb3146e" + }, + "require": { + "drupal/core": "^8.8.2 || ^9" + }, + "type": "drupal-module", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "drupal": { + "version": "8.x-1.0-alpha5+21-dev", + "datestamp": "1600719315", + "security-coverage": { + "status": "not-covered", + "message": "Dev releases are not covered by Drupal security advisories." + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "source", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TR", + "homepage": "https://www.drupal.org/user/202830" + }, + { + "name": "fago", + "homepage": "https://www.drupal.org/user/16747" + } + ], + "description": "Extends the core Typed Data API with new APIs and features.", + "homepage": "https://www.drupal.org/project/typed_data", + "support": { + "source": "https://git.drupalcode.org/project/typed_data", + "issues": "https://www.drupal.org/project/issues/typed_data" + }, + "install-path": "../../web/modules/contrib/typed_data" + }, + { + "name": "drupal/ui_patterns", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/ui_patterns.git", + "reference": "8.x-1.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/ui_patterns-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "c792d38a1511e1c24386af5a8da8181d0394b824" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "composer/installers": "^1.2", + "cweagans/composer-patches": "~1.4", + "drupal/config_devel": "~1", + "drupal/core-composer-scaffold": "^8.0", + "drupal/core-dev": "^8.0", + "drupal/core-recommended": "~9.0", + "drupal/ds": "~3", + "drupal/field_group": "~3", + "drupal/page_manager": "*", + "drupal/panels": "~4", + "drupal/paragraphs": "~1", + "drupal/token": "~1", + "drush/drush": "~10", + "openeuropa/task-runner": "~1.0-beta3", + "phpro/grumphp": "~0.14" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.2", + "datestamp": "1591882155", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "composer-exit-on-patch-failure": true, + "enable-patching": true, + "drupal-scaffold": { + "locations": { + "web-root": "build/" + } + }, + "installer-paths": { + "build/core": [ + "type:drupal-core" + ], + "build/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "build/profiles/contrib/{$name}": [ + "type:drupal-profile" + ], + "build/themes/contrib/{$name}": [ + "type:drupal-theme" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\ui_patterns\\": "./src" + } + }, + "autoload-dev": { + "psr-4": { + "Drupal\\Tests\\ui_patterns\\": "./tests/src" + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "scripts": { + "post-install-cmd": [ + "./vendor/bin/run drupal:site-setup" + ], + "post-update-cmd": [ + "./vendor/bin/run drupal:site-setup" + ] + }, + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Nuvole Web", + "homepage": "https://www.drupal.org/user/186696", + "email": "info@nuvole.org" + }, + { + "name": "bircher", + "homepage": "https://www.drupal.org/user/1344166" + }, + { + "name": "pescetti", + "homepage": "https://www.drupal.org/user/436244" + } + ], + "description": "UI Patterns.", + "homepage": "https://www.drupal.org/project/ui_patterns", + "keywords": [ + "drupal", + "ui", + "web" + ], + "support": { + "source": "https://git.drupalcode.org/project/ui_patterns" + }, + "install-path": "../../web/modules/contrib/ui_patterns" + }, + { + "name": "drupal/userprotect", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/userprotect.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/userprotect-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "485e240317a7fc1c0523b082f333c983ea3ca639" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "require-dev": { + "drupal/role_delegation": "^1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1578341583", + "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": "MegaChriz", + "homepage": "https://www.drupal.org/user/654114" + }, + { + "name": "karschsp", + "homepage": "https://www.drupal.org/user/138216" + } + ], + "description": "Allows admins to protect users from being edited or cancelled, on a per-user basis.", + "homepage": "https://www.drupal.org/project/userprotect", + "keywords": [ + "Drupal", + "User Management" + ], + "support": { + "source": "http://cgit.drupalcode.org/userprotect", + "issues": "https://www.drupal.org/project/issues/userprotect" + }, + "install-path": "../../web/modules/contrib/userprotect" + }, + { + "name": "drupal/views_bulk_operations", + "version": "2.6.0", + "version_normalized": "2.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/views_bulk_operations.git", + "reference": "8.x-2.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-8.x-2.6.zip", + "reference": "8.x-2.6", + "shasum": "517b671adb55c3ad023032607d360dab77db9f22" + }, + "require": { + "drupal/core": "~8.5" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-2.6", + "datestamp": "1580924749", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Marcin Grabias", + "homepage": "https://www.drupal.org/u/graber" + }, + { + "name": "Jon Pugh", + "homepage": "https://www.drupal.org/user/17028" + }, + { + "name": "bojanz", + "homepage": "https://www.drupal.org/user/86106" + }, + { + "name": "infojunkie", + "homepage": "https://www.drupal.org/user/48424" + }, + { + "name": "joelpittet", + "homepage": "https://www.drupal.org/user/160302" + } + ], + "description": "Adds an ability to perform bulk operations on selected entities from view results. Provides an API to create such operations.", + "homepage": "https://www.drupal.org/project/views_bulk_operations", + "support": { + "source": "https://git.drupalcode.org/project/views_bulk_operations", + "issues": "https://www.drupal.org/project/issues/views_bulk_operations?version=8.x", + "docs": "https://www.drupal.org/docs/8/modules/views-bulk-operations-vbo" + }, + "install-path": "../../web/modules/contrib/views_bulk_operations" + }, + { + "name": "drupal/views_slideshow", + "version": "4.8.0", + "version_normalized": "4.8.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/views_slideshow.git", + "reference": "8.x-4.8" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/views_slideshow-8.x-4.8.zip", + "reference": "8.x-4.8", + "shasum": "88104843df5e2eaa7e70b796a80573d844583e42" + }, + "require": { + "drupal/core": "^8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.8", + "datestamp": "1601309225", + "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": "Neslee Canil Pinto", + "homepage": "https://www.drupal.org/u/neslee-canil-pinto", + "role": "Maintainer" + }, + { + "name": "NickDickinsonWilde", + "homepage": "https://www.drupal.org/user/3094661" + }, + { + "name": "aaron", + "homepage": "https://www.drupal.org/user/33420" + }, + { + "name": "redndahead", + "homepage": "https://www.drupal.org/user/160320" + }, + { + "name": "vbouchet", + "homepage": "https://www.drupal.org/user/1671428" + } + ], + "description": "Describes relationships between entities.", + "homepage": "https://www.drupal.org/project/views_slideshow", + "support": { + "source": "https://git.drupalcode.org/project/views_slideshow", + "issues": "https://www.drupal.org/project/issues/views_slideshow", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/views_slideshow" + }, + { + "name": "drupal/viewsreference", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/viewsreference.git", + "reference": "8.x-1.7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/viewsreference-8.x-1.7.zip", + "reference": "8.x-1.7", + "shasum": "6656c717cd78bee180fcc075d28db016fa7775d9" + }, + "require": { + "drupal/core": "^8.6|^9.0", + "php": "^5.5|^7.0", + "squizlabs/php_codesniffer": "*" + }, + "conflict": { + "drupal/viewsreferennce": "*" + }, + "require-dev": { + "composer/installers": "^1.2", + "drupal-composer/drupal-scaffold": "^2.5", + "drupal/coder": "^8.2", + "webflo/drupal-core-require-dev": "~8.5" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.7", + "datestamp": "1610571201", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "installer-paths": { + "../build/core": [ + "type:drupal-core" + ], + "../build/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "../build/themes/contrib/{$name}": [ + "type:drupal-theme" + ] + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "New Zeal", + "homepage": "https://www.drupal.org/user/93571" + }, + { + "name": "jasonawant", + "homepage": "https://www.drupal.org/user/589890" + }, + { + "name": "joekers", + "homepage": "https://www.drupal.org/user/2229066" + }, + { + "name": "seanB", + "homepage": "https://www.drupal.org/user/545912" + } + ], + "description": "Views Reference", + "homepage": "http://drupal.org/project/viewsreference", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/viewsreference", + "issues": "http://drupal.org/project/issues/viewsreference" + }, + "install-path": "../../web/modules/contrib/viewsreference" + }, + { + "name": "drupal/webform", + "version": "5.25.0", + "version_normalized": "5.25.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/webform.git", + "reference": "8.x-5.25" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.25.zip", + "reference": "8.x-5.25", + "shasum": "115f8bc21549abc080543eb772166eb4fd2a162e" + }, + "require": { + "drupal/core": "^8.8" + }, + "require-dev": { + "drupal/address": "~1.0", + "drupal/bootstrap": "~3.0", + "drupal/captcha": "~1.0", + "drupal/chosen": "~2.0", + "drupal/clientside_validation": "~3.0", + "drupal/clientside_validation_jquery": "*", + "drupal/devel": "~3.0", + "drupal/entity": "~1.0", + "drupal/entity_print": "~2.0", + "drupal/gnode": "*", + "drupal/group": "1.0", + "drupal/lingotek": "~3.0", + "drupal/mailsystem": "~4.0", + "drupal/paragraphs": "~1.0", + "drupal/select2": "~1.0", + "drupal/smtp": "~1.0", + "drupal/styleguide": "~1.0", + "drupal/telephone_validation": "~2.0", + "drupal/token": "~1.0", + "drupal/variationcache": "~1.0", + "drupal/webform_access": "*", + "drupal/webform_attachment": "*", + "drupal/webform_clientside_validation": "*", + "drupal/webform_devel": "*", + "drupal/webform_entity_print": "*", + "drupal/webform_group": "*", + "drupal/webform_node": "*", + "drupal/webform_options_limit": "*", + "drupal/webform_scheduled_email": "*", + "drupal/webform_share": "*", + "drupal/webform_ui": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-5.25", + "datestamp": "1614873338", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Jacob Rockowitz (jrockowitz)", + "homepage": "https://www.drupal.org/u/jrockowitz", + "role": "Maintainer" + }, + { + "name": "Alexander Trotsenko (bucefal91)", + "homepage": "https://www.drupal.org/u/bucefal91", + "role": "Co-maintainer" + }, + { + "name": "Contributors", + "homepage": "https://www.drupal.org/node/7404/committers", + "role": "Contributor" + }, + { + "name": "fenstrat", + "homepage": "https://www.drupal.org/user/362649" + }, + { + "name": "jrockowitz", + "homepage": "https://www.drupal.org/user/371407" + }, + { + "name": "podarok", + "homepage": "https://www.drupal.org/user/116002" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "sanchiz", + "homepage": "https://www.drupal.org/user/1671246" + }, + { + "name": "tedbow", + "homepage": "https://www.drupal.org/user/240860" + }, + { + "name": "torotil", + "homepage": "https://www.drupal.org/user/865256" + } + ], + "description": "Enables the creation of webforms and questionnaires.", + "homepage": "https://drupal.org/project/webform", + "support": { + "source": "https://git.drupalcode.org/project/webform", + "issues": "https://www.drupal.org/project/issues/webform?version=8.x", + "docs": "https://www.drupal.org/docs/8/modules/webform", + "forum": "https://drupal.stackexchange.com/questions/tagged/webform" + }, + "install-path": "../../web/modules/contrib/webform" + }, + { + "name": "drupal/webform_analysis", + "version": "1.0.0-beta7", + "version_normalized": "1.0.0.0-beta7", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/webform_analysis.git", + "reference": "8.x-1.0-beta7" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/webform_analysis-8.x-1.0-beta7.zip", + "reference": "8.x-1.0-beta7", + "shasum": "218ee42c0d3d5c62bb29e0e68134188dc2a16c85" + }, + "require": { + "drupal/core": "~8.0", + "drupal/webform": "*" + }, + "require-dev": { + "drupal/webform_node": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta7", + "datestamp": "1540735084", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "lbaran", + "homepage": "https://www.drupal.org/user/3368098" + } + ], + "description": "Enables to obtain statistics on the results of form submissions.", + "homepage": "https://www.drupal.org/project/webform_analysis", + "support": { + "source": "https://git.drupalcode.org/project/webform_analysis" + }, + "install-path": "../../web/modules/contrib/webform_analysis" + }, + { + "name": "drupal/webform_invitation", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/webform_invitation.git", + "reference": "8.x-1.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/webform_invitation-8.x-1.1.zip", + "reference": "8.x-1.1", + "shasum": "56d01bef036ee6b0503060167e36d49b07278027" + }, + "require": { + "drupal/core": "^8 || ^9", + "drupal/token": "~1.0", + "drupal/webform": "~5.0", + "drupal/webform_ui": "^5.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.1", + "datestamp": "1573305184", + "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": "Christian Paul Bruhn (paul-broon)", + "homepage": "https://www.drupal.org/u/paul-broon", + "role": "Maintainer" + }, + { + "name": "Vit Hovezak (kyberman)", + "homepage": "https://www.drupal.org/u/kyberman", + "role": "Co-maintainer" + } + ], + "description": "Provides random strings that can be used as codes for accessing a specific webform.", + "homepage": "https://www.drupal.org/project/webform_invitation", + "support": { + "source": "http://cgit.drupalcode.org/webform_invitation", + "issues": "https://www.drupal.org/project/issues/webform_invitation", + "irc": "irc://irc.freenode.org/drupal-contribute" + }, + "install-path": "../../web/modules/contrib/webform_invitation" + }, + { + "name": "drupal/webform_ui", + "version": "5.25.0", + "version_normalized": "5.25.0.0", + "require": { + "drupal/core": "^8.8", + "drupal/webform": "*" + }, + "type": "metapackage", + "extra": { + "drupal": { + "version": "8.x-5.25", + "datestamp": "1614873338", + "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": "DanChadwick", + "homepage": "https://www.drupal.org/user/504278" + }, + { + "name": "Liam Morland", + "homepage": "https://www.drupal.org/user/493050" + }, + { + "name": "bucefal91", + "homepage": "https://www.drupal.org/user/504128" + }, + { + "name": "fenstrat", + "homepage": "https://www.drupal.org/user/362649" + }, + { + "name": "jrockowitz", + "homepage": "https://www.drupal.org/user/371407" + }, + { + "name": "podarok", + "homepage": "https://www.drupal.org/user/116002" + }, + { + "name": "quicksketch", + "homepage": "https://www.drupal.org/user/35821" + }, + { + "name": "sanchiz", + "homepage": "https://www.drupal.org/user/1671246" + }, + { + "name": "tedbow", + "homepage": "https://www.drupal.org/user/240860" + }, + { + "name": "torotil", + "homepage": "https://www.drupal.org/user/865256" + } + ], + "description": "Provides a user interface for building and maintaining webforms.", + "homepage": "https://www.drupal.org/project/webform", + "support": { + "source": "https://git.drupalcode.org/project/webform" + }, + "install-path": null + }, + { + "name": "drupal/workbench", + "version": "1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/workbench.git", + "reference": "8.x-1.3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/workbench-8.x-1.3.zip", + "reference": "8.x-1.3", + "shasum": "643d5f27503d7fceda8673812ca9a3bc25ed53e5" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.3", + "datestamp": "1590419810", + "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": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "agentrickard", + "homepage": "https://www.drupal.org/user/20975" + }, + { + "name": "bbinkovitz", + "homepage": "https://www.drupal.org/user/161263" + }, + { + "name": "becw", + "homepage": "https://www.drupal.org/user/81067" + }, + { + "name": "caroltron", + "homepage": "https://www.drupal.org/user/171342" + }, + { + "name": "robeano", + "homepage": "https://www.drupal.org/user/67660" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + } + ], + "description": "Provides convenient dashboards and shortcuts for editors.", + "homepage": "https://www.drupal.org/project/workbench", + "support": { + "source": "https://git.drupalcode.org/project/workbench" + }, + "install-path": "../../web/modules/contrib/workbench" + }, + { + "name": "drupal/workbench_access", + "version": "1.0.0-beta4", + "version_normalized": "1.0.0.0-beta4", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/workbench_access.git", + "reference": "8.x-1.0-beta4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/workbench_access-8.x-1.0-beta4.zip", + "reference": "8.x-1.0-beta4", + "shasum": "8d81c3daef91d89ecb3c0e3823ee0144b37889a8" + }, + "require": { + "drupal/core": "^8.7.7 || ^9" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0-beta4", + "datestamp": "1591119383", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "agentrickard", + "homepage": "https://www.drupal.org/user/20975" + }, + { + "name": "becw", + "homepage": "https://www.drupal.org/user/81067" + }, + { + "name": "robeano", + "homepage": "https://www.drupal.org/user/67660" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + } + ], + "description": "Hierarchical access control for content.", + "homepage": "https://www.drupal.org/project/workbench_access", + "support": { + "source": "https://git.drupalcode.org/project/workbench_access" + }, + "install-path": "../../web/modules/contrib/workbench_access" + }, + { + "name": "drupal/workbench_moderation", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/workbench_moderation.git", + "reference": "8.x-1.6" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/workbench_moderation-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "4321fb474e6fe23a8c737e8df8337cb1baccf0d0" + }, + "require": { + "drupal/core": "^8.8 || ^9" + }, + "require-dev": { + "drupal/publishing_dropbutton": "~1.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.6", + "datestamp": "1591862577", + "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": "Crell", + "homepage": "https://www.drupal.org/user/26398" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + }, + { + "name": "agentrickard", + "homepage": "https://www.drupal.org/user/20975" + }, + { + "name": "becw", + "homepage": "https://www.drupal.org/user/81067" + }, + { + "name": "caroltron", + "homepage": "https://www.drupal.org/user/171342" + }, + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "das-peter", + "homepage": "https://www.drupal.org/user/762870" + }, + { + "name": "josephdpurcell", + "homepage": "https://www.drupal.org/user/2944035" + }, + { + "name": "larowlan", + "homepage": "https://www.drupal.org/user/395439" + }, + { + "name": "robeano", + "homepage": "https://www.drupal.org/user/67660" + }, + { + "name": "srjosh", + "homepage": "https://www.drupal.org/user/165878" + }, + { + "name": "stevector", + "homepage": "https://www.drupal.org/user/179805" + }, + { + "name": "tedbow", + "homepage": "https://www.drupal.org/user/240860" + }, + { + "name": "timmillwood", + "homepage": "https://www.drupal.org/user/227849" + } + ], + "description": "Provides moderation states for content", + "homepage": "http://drupal.org/project/workbench_moderation", + "keywords": [ + "Drupal" + ], + "support": { + "source": "http://cgit.drupalcode.org/workbench_moderation", + "issues": "http://drupal.org/project/issues/workbench_moderation" + }, + "install-path": "../../web/modules/contrib/workbench_moderation" + }, + { + "name": "drush/drush", + "version": "8.4.8", + "version_normalized": "8.4.8.0", + "source": { + "type": "git", + "url": "https://github.com/drush-ops/drush.git", + "reference": "b377b1896e344085d06bdbf671a465950a164d1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/b377b1896e344085d06bdbf671a465950a164d1e", + "reference": "b377b1896e344085d06bdbf671a465950a164d1e", + "shasum": "" + }, + "require": { + "consolidation/annotated-command": "^2.12.0", + "consolidation/output-formatters": "~3", + "pear/console_table": "~1.3.1", + "php": ">=5.4.5", + "psr/log": "~1.0", + "psy/psysh": "~0.6", + "symfony/console": "~2.7|^3|^4.4", + "symfony/event-dispatcher": "~2.7|^3|^4.4", + "symfony/finder": "~2.7|^3|^4.4", + "symfony/process": "~2.7|^3|^4.4", + "symfony/var-dumper": "~2.7|^3|^4.4|^5", + "symfony/yaml": "~2.3|^3|^4.4", + "webflo/drupal-finder": "^1.1.0", + "webmozart/path-util": "~2" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "symfony/console": "~2.7", + "symfony/event-dispatcher": "~2.7", + "symfony/finder": "~2.7", + "symfony/process": "2.7.*", + "symfony/var-dumper": "~2.7", + "symfony/yaml": "~2.3" + }, + "suggest": { + "drush/config-extra": "Provides configuration workflow commands, such as config-merge.", + "ext-pcntl": "*" + }, + "time": "2021-03-22T15:27:55+00:00", + "bin": [ + "drush", + "drush.launcher", + "drush.php", + "drush.complete.sh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Drush\\": "lib/", + "Consolidation\\": "lib/" + }, + "psr-4": { + "Drush\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Moshe Weitzman", + "email": "weitzman@tejasa.com" + }, + { + "name": "Owen Barton", + "email": "drupal@owenbarton.com" + }, + { + "name": "Mark Sonnabaum", + "email": "marksonnabaum@gmail.com" + }, + { + "name": "Antoine Beaupré", + "email": "anarcat@koumbit.org" + }, + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + }, + { + "name": "Jonathan Araña Cruz", + "email": "jonhattan@faita.net" + }, + { + "name": "Jonathan Hedstrom", + "email": "jhedstrom@gmail.com" + }, + { + "name": "Christopher Gervais", + "email": "chris@ergonlogic.com" + }, + { + "name": "Dave Reid", + "email": "dave@davereid.net" + }, + { + "name": "Damian Lee", + "email": "damiankloip@googlemail.com" + } + ], + "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.", + "homepage": "http://www.drush.org", + "support": { + "forum": "http://drupal.stackexchange.com/questions/tagged/drush", + "irc": "irc://irc.freenode.org/drush", + "issues": "https://github.com/drush-ops/drush/issues", + "source": "https://github.com/drush-ops/drush/tree/8.4.8" + }, + "funding": [ + { + "url": "https://github.com/weitzman", + "type": "github" + } + ], + "install-path": "../drush/drush" + }, + { + "name": "easyrdf/easyrdf", + "version": "0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/easyrdf/easyrdf.git", + "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566", + "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-pcre": "*", + "php": ">=5.2.8" + }, + "require-dev": { + "phpunit/phpunit": "~3.5", + "sami/sami": "~1.4", + "squizlabs/php_codesniffer": "~1.4.3" + }, + "suggest": { + "ml/json-ld": "~1.0" + }, + "time": "2015-02-27T09:45:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "EasyRdf_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nicholas Humfrey", + "email": "njh@aelius.com", + "homepage": "http://www.aelius.com/njh/", + "role": "Developer" + }, + { + "name": "Alexey Zakhlestin", + "email": "indeyets@gmail.com", + "role": "Developer" + } + ], + "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", + "homepage": "http://www.easyrdf.org/", + "keywords": [ + "Linked Data", + "RDF", + "Semantic Web", + "Turtle", + "rdfa", + "sparql" + ], + "install-path": "../easyrdf/easyrdf" + }, + { + "name": "egulias/email-validator", + "version": "2.1.17", + "version_normalized": "2.1.17.0", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "time": "2020-02-13T22:36:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "install-path": "../egulias/email-validator" + }, + { + "name": "fileeye/mimemap", + "version": "1.1.4", + "version_normalized": "1.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/FileEye/MimeMap.git", + "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", + "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "<10", + "sebastian/comparator": "*", + "sebastian/diff": "*", + "squizlabs/php_codesniffer": "*", + "symfony/console": "*", + "symfony/filesystem": "*", + "symfony/var-dumper": "*", + "symfony/yaml": "*" + }, + "time": "2020-05-16T10:19:16+00:00", + "bin": [ + "bin/fileeye-mimemap" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "FileEye\\MimeMap\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "A PHP library to handle MIME Content-Type fields and their related file extensions.", + "homepage": "https://github.com/FileEye/MimeMap", + "keywords": [ + "mime", + "mime-database", + "mime-parser", + "mime-type" + ], + "support": { + "issues": "https://github.com/FileEye/MimeMap/issues", + "source": "https://github.com/FileEye/MimeMap/tree/master" + }, + "install-path": "../fileeye/mimemap" + }, + { + "name": "gettext/gettext", + "version": "v4.8.4", + "version_normalized": "4.8.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-gettext/Gettext.git", + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", + "reference": "58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1", + "shasum": "" + }, + "require": { + "gettext/languages": "^2.3", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/view": "*", + "phpunit/phpunit": "^4.8|^5.7|^6.5", + "squizlabs/php_codesniffer": "^3.0", + "symfony/yaml": "~2", + "twig/extensions": "*", + "twig/twig": "^1.31|^2.0" + }, + "suggest": { + "illuminate/view": "Is necessary if you want to use the Blade extractor", + "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", + "twig/extensions": "Is necessary if you want to use the Twig extractor", + "twig/twig": "Is necessary if you want to use the Twig extractor" + }, + "time": "2021-03-10T19:35:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oscar Otero", + "email": "oom@oscarotero.com", + "homepage": "http://oscarotero.com", + "role": "Developer" + } + ], + "description": "PHP gettext manager", + "homepage": "https://github.com/oscarotero/Gettext", + "keywords": [ + "JS", + "gettext", + "i18n", + "mo", + "po", + "translation" + ], + "support": { + "email": "oom@oscarotero.com", + "issues": "https://github.com/oscarotero/Gettext/issues", + "source": "https://github.com/php-gettext/Gettext/tree/v4.8.4" + }, + "funding": [ + { + "url": "https://paypal.me/oscarotero", + "type": "custom" + }, + { + "url": "https://github.com/oscarotero", + "type": "github" + }, + { + "url": "https://www.patreon.com/misteroom", + "type": "patreon" + } + ], + "install-path": "../gettext/gettext" + }, + { + "name": "gettext/languages", + "version": "2.6.0", + "version_normalized": "2.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-gettext/Languages.git", + "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-gettext/Languages/zipball/38ea0482f649e0802e475f0ed19fa993bcb7a618", + "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16.0", + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4" + }, + "time": "2019-11-13T10:30:21+00:00", + "bin": [ + "bin/export-plural-rules" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\Languages\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michele Locati", + "email": "mlocati@gmail.com", + "role": "Developer" + } + ], + "description": "gettext languages with plural rules", + "homepage": "https://github.com/php-gettext/Languages", + "keywords": [ + "cldr", + "i18n", + "internationalization", + "l10n", + "language", + "languages", + "localization", + "php", + "plural", + "plural rules", + "plurals", + "translate", + "translations", + "unicode" + ], + "support": { + "issues": "https://github.com/php-gettext/Languages/issues", + "source": "https://github.com/php-gettext/Languages/tree/2.6.0" + }, + "install-path": "../gettext/languages" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.4", + "version_normalized": "6.5.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "time": "2020-05-25T19:35:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "install-path": "../guzzlehttp/guzzle" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "version_normalized": "1.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "time": "2016-12-20T10:07:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "install-path": "../guzzlehttp/promises" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "version_normalized": "1.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2019-07-01T23:21:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "install-path": "../guzzlehttp/psr7" + }, + { + "name": "laminas/laminas-diactoros", + "version": "1.8.7p2", + "version_normalized": "1.8.7.0-patch2", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa", + "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "replace": { + "zendframework/zend-diactoros": "~1.8.7.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "laminas/laminas-coding-standard": "~1.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7" + }, + "time": "2020-03-23T15:28:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-release-1.8": "1.8.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-7" + ], + "install-path": "../laminas/laminas-diactoros" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.6.1", + "version_normalized": "2.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70", + "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-escaper": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "time": "2019-12-31T16:43:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "install-path": "../laminas/laminas-escaper" + }, + { + "name": "laminas/laminas-feed", + "version": "2.12.2", + "version_normalized": "2.12.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-feed.git", + "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/8a193ac96ebcb3e16b6ee754ac2a889eefacb654", + "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "laminas/laminas-escaper": "^2.5.2", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-feed": "^2.12.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.7.2", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-db": "^2.8.2", + "laminas/laminas-http": "^2.7", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", + "laminas/laminas-validator": "^2.10.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20", + "psr/http-message": "^1.0.1" + }, + "suggest": { + "laminas/laminas-cache": "Laminas\\Cache component, for optionally caching feeds between requests", + "laminas/laminas-db": "Laminas\\Db component, for use with PubSubHubbub", + "laminas/laminas-http": "Laminas\\Http for PubSubHubbub, and optionally for use with Laminas\\Feed\\Reader", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for easily extending ExtensionManager implementations", + "laminas/laminas-validator": "Laminas\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent", + "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Laminas\\Feed\\Reader\\Http\\Psr7ResponseDecorator" + }, + "time": "2020-03-29T12:36:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.12.x-dev", + "dev-develop": "2.13.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Feed\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides functionality for consuming RSS and Atom feeds", + "homepage": "https://laminas.dev", + "keywords": [ + "feed", + "laminas" + ], + "install-path": "../laminas/laminas-feed" + }, + { + "name": "laminas/laminas-stdlib", + "version": "3.2.1", + "version_normalized": "3.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-stdlib.git", + "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/2b18347625a2f06a1a485acfbc870f699dbe51c6", + "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-stdlib": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpbench/phpbench": "^0.13", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "time": "2019-12-31T17:51:15+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev", + "dev-develop": "3.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laminas\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "SPL extensions, array utilities, error handlers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "stdlib" + ], + "install-path": "../laminas/laminas-stdlib" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.0.4", + "version_normalized": "1.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "fcd87520e4943d968557803919523772475e8ea3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", + "reference": "fcd87520e4943d968557803919523772475e8ea3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "time": "2020-05-20T16:45:56+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev", + "dev-develop": "1.1.x-dev" + }, + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "install-path": "../laminas/laminas-zendframework-bridge" + }, + { + "name": "lsolesen/pel", + "version": "0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/lsolesen/pel.git", + "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lsolesen/pel/zipball/c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", + "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "ext-gd": "*", + "phpunit/phpunit": "5.7.*", + "satooshi/php-coveralls": "1.0.*", + "squizlabs/php_codesniffer": "3.0.0RC3" + }, + "time": "2017-02-03T11:58:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "lsolesen\\pel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0" + ], + "authors": [ + { + "name": "Lars Olesen", + "email": "lars@intraface.dk", + "homepage": "http://intraface.dk", + "role": "Developer" + }, + { + "name": "Martin Geisler", + "email": "martin@geisler.net", + "homepage": "http://geisler.net", + "role": "Developer" + } + ], + "description": "PHP Exif Library. A library for reading and writing Exif headers in JPEG and TIFF images using PHP.", + "homepage": "http://lsolesen.github.com/pel/", + "keywords": [ + "exif", + "image" + ], + "support": { + "issues": "https://github.com/lsolesen/pel/issues", + "source": "https://github.com/lsolesen/pel/tree/master" + }, + "install-path": "../lsolesen/pel" + }, + { + "name": "masterminds/html5", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "2c37c6c520b995b761674de3be8455a381679067" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", + "reference": "2c37c6c520b995b761674de3be8455a381679067", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "sami/sami": "~2.0", + "satooshi/php-coveralls": "1.0.*" + }, + "time": "2017-09-04T12:26:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "install-path": "../masterminds/html5" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.4", + "version_normalized": "4.10.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "time": "2020-12-20T10:01:03+00:00", + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "installation-source": "dist", + "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" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "install-path": "../nikic/php-parser" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "version_normalized": "9.99.99.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "time": "2018-07-02T15:55:56+00:00", + "type": "library", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "install-path": "../paragonie/random_compat" + }, + { + "name": "pear/archive_tar", + "version": "1.4.12", + "version_normalized": "1.4.12.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Archive_Tar.git", + "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/19bb8e95490d3e3ad92fcac95500ca80bdcc7495", + "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495", + "shasum": "" + }, + "require": { + "pear/pear-core-minimal": "^1.10.0alpha2", + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", + "ext-zlib": "Gzip compression support." + }, + "time": "2021-01-18T19:32:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Archive_Tar": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Vincent Blavet", + "email": "vincent@phpconcept.net" + }, + { + "name": "Greg Beaver", + "email": "greg@chiaraquartet.net" + }, + { + "name": "Michiel Rook", + "email": "mrook@php.net" + } + ], + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", + "homepage": "https://github.com/pear/Archive_Tar", + "keywords": [ + "archive", + "tar" + ], + "funding": [ + { + "url": "https://github.com/mrook", + "type": "github" + }, + { + "url": "https://www.patreon.com/michielrook", + "type": "patreon" + } + ], + "install-path": "../pear/archive_tar" + }, + { + "name": "pear/console_getopt", + "version": "v1.4.3", + "version_normalized": "1.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0", + "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0", + "shasum": "" + }, + "time": "2019-11-20T18:27:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + } + ], + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "install-path": "../pear/console_getopt" + }, + { + "name": "pear/console_table", + "version": "v1.3.1", + "version_normalized": "1.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Table.git", + "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea", + "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "suggest": { + "pear/Console_Color2": ">=0.1.2" + }, + "time": "2018-01-25T20:47:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "Table.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jan Schneider", + "homepage": "http://pear.php.net/user/yunosh" + }, + { + "name": "Tal Peer", + "homepage": "http://pear.php.net/user/tal" + }, + { + "name": "Xavier Noguer", + "homepage": "http://pear.php.net/user/xnoguer" + }, + { + "name": "Richard Heyes", + "homepage": "http://pear.php.net/user/richard" + } + ], + "description": "Library that makes it easy to build console style tables.", + "homepage": "http://pear.php.net/package/Console_Table/", + "keywords": [ + "console" + ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Table", + "source": "https://github.com/pear/Console_Table" + }, + "install-path": "../pear/console_table" + }, + { + "name": "pear/pear-core-minimal", + "version": "v1.10.10", + "version_normalized": "1.10.10.0", + "source": { + "type": "git", + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "625a3c429d9b2c1546438679074cac1b089116a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", + "reference": "625a3c429d9b2c1546438679074cac1b089116a7", + "shasum": "" + }, + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "time": "2019-11-19T19:00:24+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency", + "install-path": "../pear/pear-core-minimal" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "time": "2019-12-10T10:24:42+00:00", + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "PEAR/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "install-path": "../pear/pear_exception" + }, + { + "name": "phenx/php-font-lib", + "version": "0.5.2", + "version_normalized": "0.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + }, + "time": "2020-03-08T15:31:32+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/PhenX/php-font-lib/issues", + "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" + }, + "install-path": "../phenx/php-font-lib" + }, + { + "name": "phenx/php-svg-lib", + "version": "v0.3.3", + "version_normalized": "0.3.3.0", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "shasum": "" + }, + "require": { + "sabberworm/php-css-parser": "^8.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.5|^6.5" + }, + "time": "2019-09-11T20:02:13+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/PhenX/php-svg-lib/issues", + "source": "https://github.com/PhenX/php-svg-lib/tree/master" + }, + "install-path": "../phenx/php-svg-lib" + }, + { + "name": "phpfastcache/riak-client", + "version": "3.4.3", + "version_normalized": "3.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHPSocialNetwork/riak-php-client.git", + "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9", + "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.4" + }, + "conflict": { + "basho/riak": "*" + }, + "require-dev": { + "apigen/apigen": "4.1.*", + "phpunit/phpunit": "4.8.*" + }, + "time": "2017-11-23T21:33:15+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Basho\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Georges.L", + "email": "contact@geolim4.com", + "homepage": "https://github.com/Geolim4", + "role": "Maintainer" + }, + { + "name": "Christopher Mancini", + "email": "cmancini@basho.com", + "homepage": "https://github.com/christophermancini", + "role": "Former Lead Developer" + }, + { + "name": "Alex Moore", + "email": "amoore@basho.com", + "homepage": "https://github.com/alexmoore", + "role": "Former Developer" + } + ], + "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)", + "homepage": "https://github.com/PHPSocialNetwork/riak-php-client", + "keywords": [ + "basho", + "client", + "crdt", + "data", + "database", + "datatype", + "driver", + "kv", + "nosql", + "riak" + ], + "support": { + "issues": "https://github.com/PHPSocialNetwork/riak-php-client/issues", + "source": "https://github.com/PHPSocialNetwork/riak-php-client/tree/develop" + }, + "install-path": "../phpfastcache/riak-client" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", + "reference": "4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.5.6", + "yoast/phpunit-polyfills": "^0.2.0" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "time": "2021-02-19T15:28:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "install-path": "../phpmailer/phpmailer" + }, + { + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-02-14T16:28:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "install-path": "../psr/container" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "install-path": "../psr/http-message" + }, + { + "name": "psr/log", + "version": "1.1.3", + "version_normalized": "1.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2020-03-23T09:12:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../psr/log" + }, + { + "name": "psy/psysh", + "version": "v0.10.7", + "version_normalized": "0.10.7.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "a395af46999a12006213c0c8346c9445eb31640c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c", + "reference": "a395af46999a12006213c0c8346c9445eb31640c", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1.*", + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.*" + }, + "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." + }, + "time": "2021-03-14T02:14:56+00:00", + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.10.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions.php" ], - "build/modules/contrib/{$name}": [ - "type:drupal-module" + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.10.7" + }, + "install-path": "../psy/psysh" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "install-path": "../ralouphie/getallheaders" + }, + { + "name": "robrichards/xmlseclibs", + "version": "3.1.1", + "version_normalized": "3.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/robrichards/xmlseclibs.git", + "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df", + "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">= 5.4" + }, + "time": "2020-09-05T13:00:25+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "RobRichards\\XMLSecLibs\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A PHP library for XML Security", + "homepage": "https://github.com/robrichards/xmlseclibs", + "keywords": [ + "security", + "signature", + "xml", + "xmldsig" + ], + "support": { + "issues": "https://github.com/robrichards/xmlseclibs/issues", + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1" + }, + "install-path": "../robrichards/xmlseclibs" + }, + { + "name": "sabberworm/php-css-parser", + "version": "8.3.1", + "version_normalized": "8.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" + }, + "time": "2020-06-01T09:10:00+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + }, + "install-path": "../sabberworm/php-css-parser" + }, + { + "name": "simplesamlphp/composer-module-installer", + "version": "v1.1.8", + "version_normalized": "1.1.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/composer-module-installer.git", + "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa", + "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1|^2.0", + "simplesamlphp/simplesamlphp": "*" + }, + "time": "2020-08-25T19:04:33+00:00", + "type": "composer-plugin", + "extra": { + "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin" + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "SimpleSamlPhp\\Composer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", + "support": { + "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", + "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.1.8" + }, + "install-path": "../simplesamlphp/composer-module-installer" + }, + { + "name": "simplesamlphp/saml2", + "version": "v4.2.0", + "version_normalized": "4.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/saml2.git", + "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", + "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-openssl": "*", + "ext-zlib": "*", + "php": ">=7.1", + "psr/log": "~1.1", + "robrichards/xmlseclibs": "^3.1.0", + "webmozart/assert": "^1.5" + }, + "require-dev": { + "mockery/mockery": "~1.2", + "phpunit/phpunit": "^7.5", + "sebastian/phpcpd": "~4.1", + "sensiolabs/security-checker": "~6.0", + "simplesamlphp/simplesamlphp-test-framework": "~0.1.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "time": "2021-01-28T21:35:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v4.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SAML2\\": "src/SAML2" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "SAML2 PHP library from SimpleSAMLphp", + "support": { + "issues": "https://github.com/simplesamlphp/saml2/issues", + "source": "https://github.com/simplesamlphp/saml2/tree/v4.2.0" + }, + "install-path": "../simplesamlphp/saml2" + }, + { + "name": "simplesamlphp/simplesamlphp", + "version": "v1.18.8", + "version_normalized": "1.18.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp.git", + "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", + "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", + "shasum": "" + }, + "require": { + "ext-date": "*", + "ext-dom": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-spl": "*", + "ext-zlib": "*", + "gettext/gettext": "^4.6", + "php": ">=5.6", + "phpmailer/phpmailer": "^6.0", + "robrichards/xmlseclibs": "^3.0.4", + "simplesamlphp/saml2": "^3.4 || ^4.0", + "simplesamlphp/simplesamlphp-module-adfs": "^0.9", + "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9", + "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9", + "simplesamlphp/simplesamlphp-module-authorize": "^0.9", + "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9", + "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9", + "simplesamlphp/simplesamlphp-module-authx509": "^0.9", + "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9", + "simplesamlphp/simplesamlphp-module-cas": "^0.9", + "simplesamlphp/simplesamlphp-module-cdc": "^0.9", + "simplesamlphp/simplesamlphp-module-consent": "^0.9", + "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9", + "simplesamlphp/simplesamlphp-module-discopower": "^0.9", + "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0", + "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9", + "simplesamlphp/simplesamlphp-module-memcookie": "^1.2", + "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9", + "simplesamlphp/simplesamlphp-module-negotiate": "^0.9", + "simplesamlphp/simplesamlphp-module-oauth": "^0.9", + "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9", + "simplesamlphp/simplesamlphp-module-radius": "^0.9", + "simplesamlphp/simplesamlphp-module-riak": "^0.9", + "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9", + "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9", + "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9", + "simplesamlphp/simplesamlphp-module-statistics": "^0.9", + "simplesamlphp/twig-configurable-i18n": "^2.2", + "symfony/config": "^3.4 || ^4.0", + "symfony/dependency-injection": "^3.4 || ^4.0", + "symfony/http-foundation": "^3.4 || ^4.0", + "symfony/http-kernel": "^3.4 || ^4.0", + "symfony/routing": "^3.4 || ^4.0", + "symfony/yaml": "^3.4 || ^4.0", + "twig/twig": "~1.0 || ~2.0" + }, + "require-dev": { + "ext-curl": "*", + "mikey179/vfsstream": "~1.6", + "phpunit/phpunit": "~5.7", + "sensiolabs/security-checker": "^5.0.3", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "~1.1.9" + }, + "suggest": { + "ext-curl": "Needed in order to check for updates automatically", + "ext-ldap": "Needed if an LDAP backend is used", + "ext-memcache": "Needed if a Memcache server is used to store session information", + "ext-mysql": "Needed if a MySQL backend is used, either for authentication or to store session information", + "ext-pdo": "Needed if a database backend is used, either for authentication or to store session information", + "ext-pgsql": "Needed if a PostgreSQL backend is used, either for authentication or to store session information", + "ext-radius": "Needed if a Radius backend is used", + "predis/predis": "Needed if a Redis server is used to store session information" + }, + "time": "2020-09-02T12:07:28+00:00", + "type": "project", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\": "lib/SimpleSAML" + }, + "files": [ + "lib/_autoload_modules.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + }, + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A PHP implementation of a SAML 2.0 service provider and identity provider, also compatible with Shibboleth 1.3 and 2.0.", + "homepage": "http://simplesamlphp.org", + "keywords": [ + "SAML2", + "idp", + "oauth", + "shibboleth", + "sp", + "ws-federation" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp" + }, + "install-path": "../simplesamlphp/simplesamlphp" + }, + { + "name": "simplesamlphp/simplesamlphp-module-adfs", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git", + "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237", + "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "<1.7" + }, + "time": "2020-03-31T14:29:24+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\adfs\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that implements the WS-federation IDP", + "keywords": [ + "adfs", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-adfs/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-adfs" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/adfs" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authcrypt", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git", + "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/9a2c1a761e2d94394a4f2d3499fd6f0853899530", + "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4", + "whitehat101/apr1-md5": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2021-01-08T09:09:33+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authcrypt\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "This module provides authentication against password hashes or .htpasswd files", + "keywords": [ + "authcrypt", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authcrypt/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authcrypt" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authcrypt" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authfacebook", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git", + "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c", + "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" + }, + "time": "2020-03-13T11:29:21+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authfacebook\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andjelko Horvat", + "email": "comel@vingd.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to authenticate against Facebook", + "keywords": [ + "facebook", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authfacebook" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authorize", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git", + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/0593bfcb84fca9d9133f415246ab8ca51b412c92", + "reference": "0593bfcb84fca9d9133f415246ab8ca51b412c92", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2021-03-24T10:37:17+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authorize\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Ernesto Revilla", + "email": "erny@yaco.es" + } + ], + "description": "This module provides a user authorization filter based on attribute matching", + "keywords": [ + "authorize", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authorize" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authorize" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authtwitter", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git", + "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a", + "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "simplesamlphp/composer-module-installer": "~1.0", + "simplesamlphp/simplesamlphp-module-oauth": "^0.9" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:00:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authtwitter\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to perform authentication against Twitter", + "keywords": [ + "simplesamlphp", + "twitter" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authtwitter/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authtwitter" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authtwitter" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authwindowslive", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git", + "reference": "f40aecec6c0adaedb6693309840c98cec783876e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e", + "reference": "f40aecec6c0adaedb6693309840c98cec783876e", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:01:13+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authwindowslive\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to perform authentication against Windows Live", + "keywords": [ + "live", + "simplesamlphp", + "windows", + "windowslive" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authwindowslive" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authx509", + "version": "v0.9.8", + "version_normalized": "0.9.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git", + "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", + "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.15" + }, + "time": "2020-12-15T23:06:47+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "authX509" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\authX509\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Joost van Dijk", + "email": "Joost.vanDijk@surfnet.nl" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to authenticate users based on X509 client certificates", + "keywords": [ + "simplesamlphp", + "x509" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authx509/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authx509" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authX509" + }, + { + "name": "simplesamlphp/simplesamlphp-module-authyubikey", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git", + "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", + "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T08:52:49+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "authYubikey" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\modules\\yubikey\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to authenticate against YubiKey", + "keywords": [ + "authyubikey", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-authyubikey/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-authyubikey" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/authYubikey" + }, + { + "name": "simplesamlphp/simplesamlphp-module-cas", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git", + "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e", + "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:03:06+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\cas\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "A module that provides CAS authentication", + "keywords": [ + "cas", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-cas/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-cas" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/cas" + }, + { + "name": "simplesamlphp/simplesamlphp-module-cdc", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git", + "reference": "16a5bfac7299e04e5feb472af328e07598708166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166", + "reference": "16a5bfac7299e04e5feb472af328e07598708166", + "shasum": "" + }, + "require": { + "simplesamlphp/composer-module-installer": ">=1.1.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:04:11+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\cdc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A SimpleSAMLphp module that allows integration with CDC", + "homepage": "https://simplesamlphp.org/", + "keywords": [ + "cdc", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/cdc" + }, + { + "name": "simplesamlphp/simplesamlphp-module-consent", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git", + "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d", + "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "<1.7" + }, + "time": "2020-06-15T14:26:23+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\consent\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "lavmrk@gmail.com" + } + ], + "description": "A module that will ask for user consent before releasing attributes", + "keywords": [ + "consent", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-consent/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-consent" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/consent" + }, + { + "name": "simplesamlphp/simplesamlphp-module-consentadmin", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git", + "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1", + "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-consent": "^0.9", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:06:40+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "consentAdmin" + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jacob Christiansen", + "email": "jach@wayf.dk" + }, + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + } + ], + "description": "A module that allows users to manage their consent", + "keywords": [ + "consentadmin", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/consentAdmin" + }, + { + "name": "simplesamlphp/simplesamlphp-module-discopower", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git", + "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb", + "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4 <1.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-13T07:51:43+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\modules\\discopower\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed", + "keywords": [ + "discopower", + "discovery", + "simplesamlphp" + ], + "install-path": "../simplesamlphp/simplesamlphp/modules/discopower" + }, + { + "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git", + "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708", + "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-05-28T12:37:15+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\exampleattributeserver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "An example for SAML attributes queries", + "keywords": [ + "exampleattributeserver", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/exampleattributeserver" + }, + { + "name": "simplesamlphp/simplesamlphp-module-expirycheck", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git", + "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20", + "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" + }, + "time": "2019-12-14T13:20:46+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\expirycheck\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Alex Mihičinac", + "email": "alexm@arnes.si" + } + ], + "description": "The expirycheck module validates user's expiry date", + "keywords": [ + "expirycheck", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/expirycheck" + }, + { + "name": "simplesamlphp/simplesamlphp-module-ldap", + "version": "v0.9.10", + "version_normalized": "0.9.10.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git", + "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", + "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "suggest": { + "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp" + }, + "time": "2020-09-16T21:09:07+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\ldap\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that provides authentication against LDAP stores", + "keywords": [ + "ldap", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-ldap/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-ldap" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/ldap" + }, + { + "name": "simplesamlphp/simplesamlphp-module-memcachemonitor", + "version": "v0.9.2", + "version_normalized": "0.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git", + "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/900b5c6b59913d9013b8dae090841a127ae55ae5", + "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "~0.0.6" + }, + "time": "2021-01-25T15:44:44+00:00", + "type": "simplesamlphp-module", + "extra": { + "ssp-mixedcase-module-name": "memcacheMonitor" + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + }, + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able display usage statistics of a memcache(d) store", + "keywords": [ + "memcachemonitor", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/memcacheMonitor" + }, + { + "name": "simplesamlphp/simplesamlphp-module-memcookie", + "version": "v1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git", + "reference": "39535304e8d464b7baa1e82cb441fa432947ff57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57", + "reference": "39535304e8d464b7baa1e82cb441fa432947ff57", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": ">=1.1.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.6" + }, + "time": "2019-08-08T18:33:47+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.", + "homepage": "https://simplesamlphp.org/", + "keywords": [ + "Auth MemCookie", + "apache", + "cookies", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/memcookie" + }, + { + "name": "simplesamlphp/simplesamlphp-module-metarefresh", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git", + "reference": "e284306a7097297765b5b78a4e28f19f18d4e001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001", + "reference": "e284306a7097297765b5b78a4e28f19f18d4e001", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.18" + }, + "time": "2020-07-31T14:43:37+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\metarefresh\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "The metarefresh module will download and parse metadata documents and store them locally", + "keywords": [ + "metarefresh", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-metarefresh/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-metarefresh" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/metarefresh" + }, + { + "name": "simplesamlphp/simplesamlphp-module-negotiate", + "version": "v0.9.10", + "version_normalized": "0.9.10.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git", + "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/db05ff40399c66e3f14697a8162da6b2fbdab47d", + "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "sensiolabs/security-checker": "^5.0.3", + "simplesamlphp/simplesamlphp": "dev-testing-1.18", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used" + }, + "time": "2021-01-22T13:36:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\negotiate\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism", + "keywords": [ + "negotiate", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-negotiate/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-negotiate" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/negotiate" + }, + { + "name": "simplesamlphp/simplesamlphp-module-oauth", + "version": "v0.9.2", + "version_normalized": "0.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git", + "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", + "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", + "shasum": "" + }, + "require": { + "simplesamlphp/composer-module-installer": ">=1.1.6" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2020-04-29T19:37:43+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no" + } + ], + "description": "A SimpleSAMLphp module that allows integration with OAuth1,", + "homepage": "https://simplesamlphp.org/", + "keywords": [ + "oauth1", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/oauth" + }, + { + "name": "simplesamlphp/simplesamlphp-module-preprodwarning", + "version": "v0.9.2", + "version_normalized": "0.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git", + "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638", + "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "^1.4" + }, + "time": "2020-04-09T13:05:27+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\preprodwarning\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "Display a warning when using a pre-production environment", + "keywords": [ + "preprodwarning", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/preprodwarning" + }, + { + "name": "simplesamlphp/simplesamlphp-module-radius", + "version": "v0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git", + "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", + "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.7" + }, + "time": "2019-10-03T18:13:07+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\radius\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "A module that is able perform authentication against a RADIUS server", + "keywords": [ + "radius", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-radius/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-radius" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/radius" + }, + { + "name": "simplesamlphp/simplesamlphp-module-riak", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git", + "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991", + "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "phpfastcache/riak-client": "^3.4", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T08:28:45+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\riak\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" + } + ], + "description": "A module that is able to store key/value pairs in a Riak store", + "keywords": [ + "riak", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-riak/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-riak" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/riak" + }, + { + "name": "simplesamlphp/simplesamlphp-module-sanitycheck", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git", + "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", + "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "~1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2020-05-07T11:34:29+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\sanitycheck\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "Perform sanity checks on configuration", + "keywords": [ + "sanitycheck", + "simplesamlphp" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/sanitycheck" + }, + { + "name": "simplesamlphp/simplesamlphp-module-smartattributes", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git", + "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", + "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17" + }, + "time": "2019-12-03T09:24:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\smartattributes\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.", + "keywords": [ + "simplesamlphp", + "smartattributes" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-smartattributes/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-smartattributes" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/smartattributes" + }, + { + "name": "simplesamlphp/simplesamlphp-module-sqlauth", + "version": "v0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git", + "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", + "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "webmozart/assert": "^1.4" + }, + "time": "2019-12-03T09:07:09+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\sqlauth\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Olav Morken", + "email": "olavmrk@gmail.com" + } + ], + "description": "This is a authentication module for authenticating a user against a SQL database", + "keywords": [ + "simplesamlphp", + "sqlauth" + ], + "support": { + "issues": "https://github.com/tvdijen/simplesamlphp-module-sqlauth/issues", + "source": "https://github.com/tvdijen/simplesamlphp-module-sqlauth" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/sqlauth" + }, + { + "name": "simplesamlphp/simplesamlphp-module-statistics", + "version": "v0.9.6", + "version_normalized": "0.9.6.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git", + "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/03fb6bdbbf5ce0a0cb257208db79aacac227ac10", + "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "simplesamlphp/composer-module-installer": "~1.1", + "webmozart/assert": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "simplesamlphp/simplesamlphp": "^1.17", + "simplesamlphp/simplesamlphp-test-framework": "^0.0.12" + }, + "time": "2021-01-25T15:15:26+00:00", + "type": "simplesamlphp-module", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\Module\\statistics\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" + } + ], + "description": "The SimpleSAMLphp statistics module", + "keywords": [ + "simplesamlphp", + "statistics" + ], + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-statistics/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-statistics" + }, + "install-path": "../simplesamlphp/simplesamlphp/modules/statistics" + }, + { + "name": "simplesamlphp/twig-configurable-i18n", + "version": "v2.3.4", + "version_normalized": "2.3.4.0", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git", + "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", + "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "twig/extensions": "@dev" + }, + "require-dev": { + "phpunit/phpunit": "^7.5", + "sensiolabs/security-checker": "~6.0.3", + "simplesamlphp/simplesamlphp-test-framework": "~0.1.2", + "squizlabs/php_codesniffer": "^3.5", + "twig/twig": "^2.13" + }, + "time": "2020-08-27T12:51:10+00:00", + "type": "project", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SimpleSAML\\TwigConfigurableI18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Jaime Perez", + "email": "jaime.perez@uninett.no" + } + ], + "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.", + "keywords": [ + "extension", + "gettext", + "i18n", + "internationalization", + "translation", + "twig" + ], + "support": { + "issues": "https://github.com/simplesamlphp/twig-configurable-i18n/issues", + "source": "https://github.com/simplesamlphp/twig-configurable-i18n" + }, + "install-path": "../simplesamlphp/twig-configurable-i18n" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.5.8", + "version_normalized": "3.5.8.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", + "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "time": "2020-10-23T02:01:07+00:00", + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "install-path": "../squizlabs/php_codesniffer" + }, + { + "name": "stack/builder", + "version": "v1.0.5", + "version_normalized": "1.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/stackphp/builder.git", + "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a", + "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a", + "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" + }, + "time": "2017-11-18T14:57:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Stack": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Builder for stack middlewares based on HttpKernelInterface.", + "keywords": [ + "stack" + ], + "install-path": "../stack/builder" + }, + { + "name": "symfony-cmf/routing", + "version": "1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony-cmf/routing.git", + "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", + "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", + "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)" + }, + "time": "2017-05-09T08:10:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Cmf\\Component\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/Routing/contributors" + } + ], + "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ], + "install-path": "../symfony-cmf/routing" + }, + { + "name": "symfony/class-loader", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/class-loader.git", + "reference": "e4636a4f23f157278a19e5db160c63de0da297d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8", + "reference": "e4636a4f23f157278a19e5db160c63de0da297d8", + "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" + }, + "time": "2020-03-15T09:38:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\ClassLoader\\": "" + }, + "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 ClassLoader Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/class-loader" + }, + { + "name": "symfony/config", + "version": "v4.4.20", + "version_normalized": "4.4.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", + "reference": "98606c6fa1a8f55ff964ccdd704275bf5b9f71b3", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "time": "2021-02-22T15:36:50+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v4.4.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/config" + }, + { + "name": "symfony/console", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", + "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "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": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "time": "2020-05-30T18:58:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/console" + }, + { + "name": "symfony/debug", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", + "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", + "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" + }, + "time": "2020-05-22T18:25:20+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/debug" + }, + { + "name": "symfony/dependency-injection", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e39380b7104b0ec538a075ae919f00c7e5267bac", + "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac", + "shasum": "" + }, + "require": { + "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": { + "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": "" + }, + "time": "2020-05-30T21:06:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "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 DependencyInjection Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/dependency-injection" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081", + "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "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" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2020-05-05T15:06:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "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 EventDispatcher Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/event-dispatcher" + }, + { + "name": "symfony/filesystem", + "version": "v5.2.4", + "version_normalized": "5.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/710d364200997a5afde34d9fe57bd52f3cc1e108", + "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "time": "2021-02-12T10:38:38+00:00", + "type": "library", + "installation-source": "dist", + "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": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.2.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/filesystem" + }, + { + "name": "symfony/finder", + "version": "v4.4.20", + "version_normalized": "4.4.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2543795ab1570df588b9bbd31e1a2bd7037b94f6", + "reference": "2543795ab1570df588b9bbd31e1a2bd7037b94f6", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "time": "2021-02-12T10:48:09+00:00", + "type": "library", + "installation-source": "dist", + "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": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, + { + "name": "symfony/http-foundation", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fbd216d2304b1a3fe38d6392b04729c8dd356359", + "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359", + "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" + }, + "time": "2020-05-16T13:15:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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 HttpFoundation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/http-foundation" + }, + { + "name": "symfony/http-kernel", + "version": "v3.4.44", + "version_normalized": "3.4.44.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", + "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0", + "symfony/debug": "^3.3.3|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php56": "~1.8" + }, + "conflict": { + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.10|<4.0.10,>=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.10|^4.0.10", + "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": "" + }, + "time": "2020-08-31T05:53:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "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 HttpKernel Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/http-kernel" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2020-05-12T16:14:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "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 Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-iconv" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-idn" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "e3c8c138280cdfe4b81488441555583aa1984e23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/e3c8c138280cdfe4b81488441555583aa1984e23", + "reference": "e3c8c138280cdfe4b81488441555583aa1984e23", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "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 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php56" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "82225c2d7d23d7e70515496d249c0152679b468e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/82225c2d7d23d7e70515496d249c0152679b468e", + "reference": "82225c2d7d23d7e70515496d249c0152679b468e", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" ], - "build/profiles/contrib/{$name}": [ - "type:drupal-profile" + "classmap": [ + "Resources/stubs" + ] + }, + "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.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php70" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php72" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "version_normalized": "1.22.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-01-07T16:49:33+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" ], - "build/themes/contrib/{$name}": [ - "type:drupal-theme" + "classmap": [ + "Resources/stubs" ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Drupal\\ui_patterns\\": "./src" - } - }, - "autoload-dev": { - "psr-4": { - "Drupal\\Tests\\ui_patterns\\": "./tests/src" - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "scripts": { - "post-install-cmd": [ - "./vendor/bin/run drupal:site-setup" - ], - "post-update-cmd": [ - "./vendor/bin/run drupal:site-setup" - ] - }, - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Nuvole Web", - "homepage": "https://www.drupal.org/user/186696", - "email": "info@nuvole.org" - }, - { - "name": "bircher", - "homepage": "https://www.drupal.org/user/1344166" - }, - { - "name": "pescetti", - "homepage": "https://www.drupal.org/user/436244" - } - ], - "description": "UI Patterns.", - "homepage": "https://www.drupal.org/project/ui_patterns", - "keywords": [ - "drupal", - "ui", - "web" - ], - "support": { - "source": "https://git.drupalcode.org/project/ui_patterns" - } - }, - { - "name": "drupal/userprotect", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/userprotect.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/userprotect-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "485e240317a7fc1c0523b082f333c983ea3ca639" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "require-dev": { - "drupal/role_delegation": "^1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1578341583", - "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": "MegaChriz", - "homepage": "https://www.drupal.org/user/654114" - }, - { - "name": "karschsp", - "homepage": "https://www.drupal.org/user/138216" - } - ], - "description": "Allows admins to protect users from being edited or cancelled, on a per-user basis.", - "homepage": "https://www.drupal.org/project/userprotect", - "keywords": [ - "Drupal", - "User Management" - ], - "support": { - "source": "http://cgit.drupalcode.org/userprotect", - "issues": "https://www.drupal.org/project/issues/userprotect" - } - }, - { - "name": "drupal/views_bulk_operations", - "version": "2.6.0", - "version_normalized": "2.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "8.x-2.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-8.x-2.6.zip", - "reference": "8.x-2.6", - "shasum": "517b671adb55c3ad023032607d360dab77db9f22" - }, - "require": { - "drupal/core": "~8.5" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-2.6", - "datestamp": "1580924749", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Marcin Grabias", - "homepage": "https://www.drupal.org/u/graber" - }, - { - "name": "Jon Pugh", - "homepage": "https://www.drupal.org/user/17028" - }, - { - "name": "bojanz", - "homepage": "https://www.drupal.org/user/86106" - }, - { - "name": "infojunkie", - "homepage": "https://www.drupal.org/user/48424" - }, - { - "name": "joelpittet", - "homepage": "https://www.drupal.org/user/160302" - } - ], - "description": "Adds an ability to perform bulk operations on selected entities from view results. Provides an API to create such operations.", - "homepage": "https://www.drupal.org/project/views_bulk_operations", - "support": { - "source": "https://git.drupalcode.org/project/views_bulk_operations", - "issues": "https://www.drupal.org/project/issues/views_bulk_operations?version=8.x", - "docs": "https://www.drupal.org/docs/8/modules/views-bulk-operations-vbo" - } - }, - { - "name": "drupal/views_slideshow", - "version": "4.8.0", - "version_normalized": "4.8.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/views_slideshow.git", - "reference": "8.x-4.8" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_slideshow-8.x-4.8.zip", - "reference": "8.x-4.8", - "shasum": "88104843df5e2eaa7e70b796a80573d844583e42" - }, - "require": { - "drupal/core": "^8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-4.8", - "datestamp": "1601309225", - "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": "Neslee Canil Pinto", - "homepage": "https://www.drupal.org/u/neslee-canil-pinto", - "role": "Maintainer" - }, - { - "name": "NickDickinsonWilde", - "homepage": "https://www.drupal.org/user/3094661" - }, - { - "name": "aaron", - "homepage": "https://www.drupal.org/user/33420" - }, - { - "name": "redndahead", - "homepage": "https://www.drupal.org/user/160320" - }, - { - "name": "vbouchet", - "homepage": "https://www.drupal.org/user/1671428" - } - ], - "description": "Describes relationships between entities.", - "homepage": "https://www.drupal.org/project/views_slideshow", - "support": { - "source": "https://git.drupalcode.org/project/views_slideshow", - "issues": "https://www.drupal.org/project/issues/views_slideshow", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/viewsreference", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/viewsreference.git", - "reference": "8.x-1.7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/viewsreference-8.x-1.7.zip", - "reference": "8.x-1.7", - "shasum": "6656c717cd78bee180fcc075d28db016fa7775d9" - }, - "require": { - "drupal/core": "^8.6|^9.0", - "php": "^5.5|^7.0", - "squizlabs/php_codesniffer": "*" - }, - "conflict": { - "drupal/viewsreferennce": "*" - }, - "require-dev": { - "composer/installers": "^1.2", - "drupal-composer/drupal-scaffold": "^2.5", - "drupal/coder": "^8.2", - "webflo/drupal-core-require-dev": "~8.5" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.7", - "datestamp": "1610571201", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "installer-paths": { - "../build/core": [ - "type:drupal-core" - ], - "../build/modules/contrib/{$name}": [ - "type:drupal-module" + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4afb4110fc037752cf0ce9869f9ab8162c4e20d7", + "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:14:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "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 utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-util" + }, + { + "name": "symfony/process", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/8a895f0c92a7c4b10db95139bcff71bdf66d4d21", + "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2020-05-23T17:05:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/process" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v1.1.2", + "version_normalized": "1.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "a33352af16f78a5ff4f9d90811536abf210df12b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a33352af16f78a5ff4f9d90811536abf210df12b", + "reference": "a33352af16f78a5ff4f9d90811536abf210df12b", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^2.3.42 || ^3.4 || ^4.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.4 || ^4.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "time": "2019-04-03T17:09:40+00:00", + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "install-path": "../symfony/psr-http-message-bridge" + }, + { + "name": "symfony/routing", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e0d43b6f9417ad59ecaa8e2f799b79eef417387f", + "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/config": "<3.3.1", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "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/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "time": "2020-05-30T19:50:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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 Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/routing" + }, + { + "name": "symfony/serializer", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0db90db012b1b0a04fbb2d64ae9160871cad9d4f", + "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f", + "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" + }, + "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.4.13|~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": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "time": "2020-05-30T18:58:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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 Serializer Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/serializer" + }, + { + "name": "symfony/translation", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", + "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", + "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" + }, + "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/http-kernel": "~3.4|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/var-dumper": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2020-05-30T18:58:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "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 Translation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/translation" + }, + { + "name": "symfony/validator", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "5fb88120a11a75e17b602103a893dd8b27804529" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/5fb88120a11a75e17b602103a893dd8b27804529", + "reference": "5fb88120a11a75e17b602103a893dd8b27804529", + "shasum": "" + }, + "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": { + "doctrine/lexer": "<1.0.2", + "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.7", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^2.1.10", + "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": "" + }, + "time": "2020-05-30T18:43:38+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "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 Validator Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/validator" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.20", + "version_normalized": "4.4.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f", + "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "time": "2021-01-27T09:09:26+00:00", + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "Resources/functions/dump.php" ], - "../build/themes/contrib/{$name}": [ - "type:drupal-theme" + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "New Zeal", - "homepage": "https://www.drupal.org/user/93571" - }, - { - "name": "jasonawant", - "homepage": "https://www.drupal.org/user/589890" - }, - { - "name": "joekers", - "homepage": "https://www.drupal.org/user/2229066" - }, - { - "name": "seanB", - "homepage": "https://www.drupal.org/user/545912" - } - ], - "description": "Views Reference", - "homepage": "http://drupal.org/project/viewsreference", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/viewsreference", - "issues": "http://drupal.org/project/issues/viewsreference" - } - }, - { - "name": "drupal/webform", - "version": "5.24.0", - "version_normalized": "5.24.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/webform.git", - "reference": "8.x-5.24" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip", - "reference": "8.x-5.24", - "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b" - }, - "require": { - "drupal/core": "^8.8" - }, - "require-dev": { - "drupal/address": "~1.0", - "drupal/bootstrap": "~3.0", - "drupal/captcha": "~1.0", - "drupal/chosen": "~2.0", - "drupal/clientside_validation": "~3.0", - "drupal/clientside_validation_jquery": "*", - "drupal/devel": "~3.0", - "drupal/entity": "~1.0", - "drupal/entity_print": "~2.0", - "drupal/gnode": "*", - "drupal/group": "1.0", - "drupal/lingotek": "~3.0", - "drupal/mailsystem": "~4.0", - "drupal/paragraphs": "~1.0", - "drupal/select2": "~1.0", - "drupal/smtp": "~1.0", - "drupal/styleguide": "~1.0", - "drupal/telephone_validation": "~2.0", - "drupal/token": "~1.0", - "drupal/variationcache": "~1.0", - "drupal/webform_access": "*", - "drupal/webform_attachment": "*", - "drupal/webform_clientside_validation": "*", - "drupal/webform_devel": "*", - "drupal/webform_entity_print": "*", - "drupal/webform_group": "*", - "drupal/webform_node": "*", - "drupal/webform_options_limit": "*", - "drupal/webform_scheduled_email": "*", - "drupal/webform_share": "*", - "drupal/webform_ui": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - }, - "drush": { - "services": { - "drush.services.yml": "^9" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Jacob Rockowitz (jrockowitz)", - "homepage": "https://www.drupal.org/u/jrockowitz", - "role": "Maintainer" - }, - { - "name": "Alexander Trotsenko (bucefal91)", - "homepage": "https://www.drupal.org/u/bucefal91", - "role": "Co-maintainer" - }, - { - "name": "Contributors", - "homepage": "https://www.drupal.org/node/7404/committers", - "role": "Contributor" - }, - { - "name": "fenstrat", - "homepage": "https://www.drupal.org/user/362649" - }, - { - "name": "jrockowitz", - "homepage": "https://www.drupal.org/user/371407" - }, - { - "name": "podarok", - "homepage": "https://www.drupal.org/user/116002" - }, - { - "name": "quicksketch", - "homepage": "https://www.drupal.org/user/35821" - }, - { - "name": "sanchiz", - "homepage": "https://www.drupal.org/user/1671246" - }, - { - "name": "tedbow", - "homepage": "https://www.drupal.org/user/240860" - }, - { - "name": "torotil", - "homepage": "https://www.drupal.org/user/865256" - } - ], - "description": "Enables the creation of webforms and questionnaires.", - "homepage": "https://drupal.org/project/webform", - "support": { - "source": "https://git.drupalcode.org/project/webform", - "issues": "https://www.drupal.org/project/issues/webform?version=8.x", - "docs": "https://www.drupal.org/docs/8/modules/webform", - "forum": "https://drupal.stackexchange.com/questions/tagged/webform" - } - }, - { - "name": "drupal/webform_analysis", - "version": "1.0.0-beta7", - "version_normalized": "1.0.0.0-beta7", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/webform_analysis.git", - "reference": "8.x-1.0-beta7" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform_analysis-8.x-1.0-beta7.zip", - "reference": "8.x-1.0-beta7", - "shasum": "218ee42c0d3d5c62bb29e0e68134188dc2a16c85" - }, - "require": { - "drupal/core": "~8.0", - "drupal/webform": "*" - }, - "require-dev": { - "drupal/webform_node": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta7", - "datestamp": "1540735084", - "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "lbaran", - "homepage": "https://www.drupal.org/user/3368098" - } - ], - "description": "Enables to obtain statistics on the results of form submissions.", - "homepage": "https://www.drupal.org/project/webform_analysis", - "support": { - "source": "https://git.drupalcode.org/project/webform_analysis" - } - }, - { - "name": "drupal/webform_invitation", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/webform_invitation.git", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform_invitation-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "56d01bef036ee6b0503060167e36d49b07278027" - }, - "require": { - "drupal/core": "^8 || ^9", - "drupal/token": "~1.0", - "drupal/webform": "~5.0", - "drupal/webform_ui": "^5.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.1", - "datestamp": "1573305184", - "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": "Christian Paul Bruhn (paul-broon)", - "homepage": "https://www.drupal.org/u/paul-broon", - "role": "Maintainer" - }, - { - "name": "Vit Hovezak (kyberman)", - "homepage": "https://www.drupal.org/u/kyberman", - "role": "Co-maintainer" - } - ], - "description": "Provides random strings that can be used as codes for accessing a specific webform.", - "homepage": "https://www.drupal.org/project/webform_invitation", - "support": { - "source": "http://cgit.drupalcode.org/webform_invitation", - "issues": "https://www.drupal.org/project/issues/webform_invitation", - "irc": "irc://irc.freenode.org/drupal-contribute" - } - }, - { - "name": "drupal/webform_ui", - "version": "5.24.0", - "version_normalized": "5.24.0.0", - "require": { - "drupal/core": "^8.8", - "drupal/webform": "*" - }, - "type": "metapackage", - "extra": { - "drupal": { - "version": "8.x-5.24", - "datestamp": "1612453175", - "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": "DanChadwick", - "homepage": "https://www.drupal.org/user/504278" - }, - { - "name": "Liam Morland", - "homepage": "https://www.drupal.org/user/493050" - }, - { - "name": "bucefal91", - "homepage": "https://www.drupal.org/user/504128" - }, - { - "name": "fenstrat", - "homepage": "https://www.drupal.org/user/362649" - }, - { - "name": "jrockowitz", - "homepage": "https://www.drupal.org/user/371407" - }, - { - "name": "podarok", - "homepage": "https://www.drupal.org/user/116002" - }, - { - "name": "quicksketch", - "homepage": "https://www.drupal.org/user/35821" - }, - { - "name": "sanchiz", - "homepage": "https://www.drupal.org/user/1671246" - }, - { - "name": "tedbow", - "homepage": "https://www.drupal.org/user/240860" - }, - { - "name": "torotil", - "homepage": "https://www.drupal.org/user/865256" - } - ], - "description": "Provides a user interface for building and maintaining webforms.", - "homepage": "https://www.drupal.org/project/webform", - "support": { - "source": "https://git.drupalcode.org/project/webform" - } - }, - { - "name": "drupal/workbench", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/workbench.git", - "reference": "8.x-1.3" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/workbench-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "643d5f27503d7fceda8673812ca9a3bc25ed53e5" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.3", - "datestamp": "1590419810", - "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": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "agentrickard", - "homepage": "https://www.drupal.org/user/20975" - }, - { - "name": "bbinkovitz", - "homepage": "https://www.drupal.org/user/161263" - }, - { - "name": "becw", - "homepage": "https://www.drupal.org/user/81067" - }, - { - "name": "caroltron", - "homepage": "https://www.drupal.org/user/171342" - }, - { - "name": "robeano", - "homepage": "https://www.drupal.org/user/67660" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - } - ], - "description": "Provides convenient dashboards and shortcuts for editors.", - "homepage": "https://www.drupal.org/project/workbench", - "support": { - "source": "https://git.drupalcode.org/project/workbench" - } - }, - { - "name": "drupal/workbench_access", - "version": "1.0.0-beta4", - "version_normalized": "1.0.0.0-beta4", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/workbench_access.git", - "reference": "8.x-1.0-beta4" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/workbench_access-8.x-1.0-beta4.zip", - "reference": "8.x-1.0-beta4", - "shasum": "8d81c3daef91d89ecb3c0e3823ee0144b37889a8" - }, - "require": { - "drupal/core": "^8.7.7 || ^9" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.0-beta4", - "datestamp": "1591119383", - "security-coverage": { - "status": "not-covered", - "message": "Beta releases are not covered by Drupal security advisories." - } - }, - "drush": { - "services": { - "drush.services.yml": "^9 || ^10" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "agentrickard", - "homepage": "https://www.drupal.org/user/20975" - }, - { - "name": "becw", - "homepage": "https://www.drupal.org/user/81067" - }, - { - "name": "robeano", - "homepage": "https://www.drupal.org/user/67660" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - } - ], - "description": "Hierarchical access control for content.", - "homepage": "https://www.drupal.org/project/workbench_access", - "support": { - "source": "https://git.drupalcode.org/project/workbench_access" - } - }, - { - "name": "drupal/workbench_moderation", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/workbench_moderation.git", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/workbench_moderation-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "4321fb474e6fe23a8c737e8df8337cb1baccf0d0" - }, - "require": { - "drupal/core": "^8.8 || ^9" - }, - "require-dev": { - "drupal/publishing_dropbutton": "~1.0" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.6", - "datestamp": "1591862577", - "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": "Crell", - "homepage": "https://www.drupal.org/user/26398" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - }, - { - "name": "agentrickard", - "homepage": "https://www.drupal.org/user/20975" - }, - { - "name": "becw", - "homepage": "https://www.drupal.org/user/81067" - }, - { - "name": "caroltron", - "homepage": "https://www.drupal.org/user/171342" - }, - { - "name": "colan", - "homepage": "https://www.drupal.org/user/58704" - }, - { - "name": "das-peter", - "homepage": "https://www.drupal.org/user/762870" - }, - { - "name": "josephdpurcell", - "homepage": "https://www.drupal.org/user/2944035" - }, - { - "name": "larowlan", - "homepage": "https://www.drupal.org/user/395439" - }, - { - "name": "robeano", - "homepage": "https://www.drupal.org/user/67660" - }, - { - "name": "srjosh", - "homepage": "https://www.drupal.org/user/165878" - }, - { - "name": "stevector", - "homepage": "https://www.drupal.org/user/179805" - }, - { - "name": "tedbow", - "homepage": "https://www.drupal.org/user/240860" - }, - { - "name": "timmillwood", - "homepage": "https://www.drupal.org/user/227849" - } - ], - "description": "Provides moderation states for content", - "homepage": "http://drupal.org/project/workbench_moderation", - "keywords": [ - "Drupal" - ], - "support": { - "source": "http://cgit.drupalcode.org/workbench_moderation", - "issues": "http://drupal.org/project/issues/workbench_moderation" - } - }, - { - "name": "drush/drush", - "version": "8.4.6", - "version_normalized": "8.4.6.0", - "source": { - "type": "git", - "url": "https://github.com/drush-ops/drush.git", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/4e48e11d7fe858eebe6c2fad71650c977d3f8900", - "reference": "4e48e11d7fe858eebe6c2fad71650c977d3f8900", - "shasum": "" - }, - "require": { - "consolidation/annotated-command": "^2.12.0", - "consolidation/output-formatters": "~3", - "pear/console_table": "~1.3.1", - "php": ">=5.4.5", - "psr/log": "~1.0", - "psy/psysh": "~0.6", - "symfony/console": "~2.7|^3|^4.4", - "symfony/event-dispatcher": "~2.7|^3|^4.4", - "symfony/finder": "~2.7|^3|^4.4", - "symfony/process": "~2.7|^3|^4.4", - "symfony/var-dumper": "~2.7|^3|^4.4|^5", - "symfony/yaml": "~2.3|^3|^4.4", - "webflo/drupal-finder": "^1.1.0", - "webmozart/path-util": "~2" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "symfony/console": "~2.7", - "symfony/event-dispatcher": "~2.7", - "symfony/finder": "~2.7", - "symfony/process": "2.7.*", - "symfony/var-dumper": "~2.7", - "symfony/yaml": "~2.3" - }, - "suggest": { - "drush/config-extra": "Provides configuration workflow commands, such as config-merge.", - "ext-pcntl": "*" - }, - "time": "2021-02-01T15:34:47+00:00", - "bin": [ - "drush", - "drush.launcher", - "drush.php", - "drush.complete.sh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Drush\\": "lib/", - "Consolidation\\": "lib/" - }, - "psr-4": { - "Drush\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Moshe Weitzman", - "email": "weitzman@tejasa.com" - }, - { - "name": "Owen Barton", - "email": "drupal@owenbarton.com" - }, - { - "name": "Mark Sonnabaum", - "email": "marksonnabaum@gmail.com" - }, - { - "name": "Antoine Beaupré", - "email": "anarcat@koumbit.org" - }, - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - }, - { - "name": "Jonathan Araña Cruz", - "email": "jonhattan@faita.net" - }, - { - "name": "Jonathan Hedstrom", - "email": "jhedstrom@gmail.com" - }, - { - "name": "Christopher Gervais", - "email": "chris@ergonlogic.com" - }, - { - "name": "Dave Reid", - "email": "dave@davereid.net" - }, - { - "name": "Damian Lee", - "email": "damiankloip@googlemail.com" - } - ], - "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.", - "homepage": "http://www.drush.org", - "support": { - "forum": "http://drupal.stackexchange.com/questions/tagged/drush", - "irc": "irc://irc.freenode.org/drush", - "issues": "https://github.com/drush-ops/drush/issues", - "source": "https://github.com/drush-ops/drush/tree/8.4.6" - }, - "funding": [ - { - "url": "https://github.com/weitzman", - "type": "github" - } - ] - }, - { - "name": "easyrdf/easyrdf", - "version": "0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/easyrdf/easyrdf.git", - "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566", - "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-pcre": "*", - "php": ">=5.2.8" - }, - "require-dev": { - "phpunit/phpunit": "~3.5", - "sami/sami": "~1.4", - "squizlabs/php_codesniffer": "~1.4.3" - }, - "suggest": { - "ml/json-ld": "~1.0" - }, - "time": "2015-02-27T09:45:49+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "EasyRdf_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nicholas Humfrey", - "email": "njh@aelius.com", - "homepage": "http://www.aelius.com/njh/", - "role": "Developer" - }, - { - "name": "Alexey Zakhlestin", - "email": "indeyets@gmail.com", - "role": "Developer" - } - ], - "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", - "homepage": "http://www.easyrdf.org/", - "keywords": [ - "Linked Data", - "RDF", - "Semantic Web", - "Turtle", - "rdfa", - "sparql" - ] - }, - { - "name": "egulias/email-validator", - "version": "2.1.17", - "version_normalized": "2.1.17.0", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "time": "2020-02-13T22:36:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ] - }, - { - "name": "fileeye/mimemap", - "version": "1.1.4", - "version_normalized": "1.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/FileEye/MimeMap.git", - "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", - "reference": "3a0ddb71f06d8fb3f84f0a3c45348af81803b16d", - "shasum": "" - }, - "require": { - "php": ">=5.4" - }, - "require-dev": { - "phpunit/phpunit": "<10", - "sebastian/comparator": "*", - "sebastian/diff": "*", - "squizlabs/php_codesniffer": "*", - "symfony/console": "*", - "symfony/filesystem": "*", - "symfony/var-dumper": "*", - "symfony/yaml": "*" - }, - "time": "2020-05-16T10:19:16+00:00", - "bin": [ - "bin/fileeye-mimemap" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "FileEye\\MimeMap\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "description": "A PHP library to handle MIME Content-Type fields and their related file extensions.", - "homepage": "https://github.com/FileEye/MimeMap", - "keywords": [ - "mime", - "mime-database", - "mime-parser", - "mime-type" - ], - "support": { - "issues": "https://github.com/FileEye/MimeMap/issues", - "source": "https://github.com/FileEye/MimeMap/tree/master" - } - }, - { - "name": "gettext/gettext", - "version": "v4.8.3", - "version_normalized": "4.8.3.0", - "source": { - "type": "git", - "url": "https://github.com/php-gettext/Gettext.git", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/57ff4fb16647e78e80a5909fe3c190f1c3110321", - "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321", - "shasum": "" - }, - "require": { - "gettext/languages": "^2.3", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/view": "*", - "phpunit/phpunit": "^4.8|^5.7|^6.5", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~2", - "twig/extensions": "*", - "twig/twig": "^1.31|^2.0" - }, - "suggest": { - "illuminate/view": "Is necessary if you want to use the Blade extractor", - "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", - "twig/extensions": "Is necessary if you want to use the Twig extractor", - "twig/twig": "Is necessary if you want to use the Twig extractor" - }, - "time": "2020-11-18T22:35:49+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gettext\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oscar Otero", - "email": "oom@oscarotero.com", - "homepage": "http://oscarotero.com", - "role": "Developer" - } - ], - "description": "PHP gettext manager", - "homepage": "https://github.com/oscarotero/Gettext", - "keywords": [ - "JS", - "gettext", - "i18n", - "mo", - "po", - "translation" - ], - "support": { - "email": "oom@oscarotero.com", - "issues": "https://github.com/oscarotero/Gettext/issues", - "source": "https://github.com/php-gettext/Gettext/tree/v4.8.3" - } - }, - { - "name": "gettext/languages", - "version": "2.6.0", - "version_normalized": "2.6.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-gettext/Languages.git", - "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Languages/zipball/38ea0482f649e0802e475f0ed19fa993bcb7a618", - "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16.0", - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4" - }, - "time": "2019-11-13T10:30:21+00:00", - "bin": [ - "bin/export-plural-rules" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gettext\\Languages\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michele Locati", - "email": "mlocati@gmail.com", - "role": "Developer" - } - ], - "description": "gettext languages with plural rules", - "homepage": "https://github.com/php-gettext/Languages", - "keywords": [ - "cldr", - "i18n", - "internationalization", - "l10n", - "language", - "languages", - "localization", - "php", - "plural", - "plural rules", - "plurals", - "translate", - "translations", - "unicode" - ], - "support": { - "issues": "https://github.com/php-gettext/Languages/issues", - "source": "https://github.com/php-gettext/Languages/tree/2.6.0" - } - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.4", - "version_normalized": "6.5.4.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "time": "2020-05-25T19:35:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ] - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "time": "2016-12-20T10:07:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "version_normalized": "1.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "time": "2019-07-01T23:21:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ] - }, - { - "name": "laminas/laminas-diactoros", - "version": "1.8.7p2", - "version_normalized": "1.8.7.0-patch2", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa", - "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "replace": { - "zendframework/zend-diactoros": "~1.8.7.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "laminas/laminas-coding-standard": "~1.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7" - }, - "time": "2020-03-23T15:28:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-release-1.8": "1.8.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php", - "src/functions/create_uploaded_file.legacy.php", - "src/functions/marshal_headers_from_sapi.legacy.php", - "src/functions/marshal_method_from_sapi.legacy.php", - "src/functions/marshal_protocol_version_from_sapi.legacy.php", - "src/functions/marshal_uri_from_sapi.legacy.php", - "src/functions/normalize_server.legacy.php", - "src/functions/normalize_uploaded_files.legacy.php", - "src/functions/parse_cookie_header.legacy.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-7" - ] - }, - { - "name": "laminas/laminas-escaper", - "version": "2.6.1", - "version_normalized": "2.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/25f2a053eadfa92ddacb609dcbbc39362610da70", - "reference": "25f2a053eadfa92ddacb609dcbbc39362610da70", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-escaper": "self.version" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" - }, - "time": "2019-12-31T16:43:30+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev", - "dev-develop": "2.7.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ] - }, - { - "name": "laminas/laminas-feed", - "version": "2.12.2", - "version_normalized": "2.12.2.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-feed.git", - "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/8a193ac96ebcb3e16b6ee754ac2a889eefacb654", - "reference": "8a193ac96ebcb3e16b6ee754ac2a889eefacb654", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "laminas/laminas-escaper": "^2.5.2", - "laminas/laminas-stdlib": "^3.2.1", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-feed": "^2.12.0" - }, - "require-dev": { - "laminas/laminas-cache": "^2.7.2", - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-db": "^2.8.2", - "laminas/laminas-http": "^2.7", - "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", - "laminas/laminas-validator": "^2.10.1", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20", - "psr/http-message": "^1.0.1" - }, - "suggest": { - "laminas/laminas-cache": "Laminas\\Cache component, for optionally caching feeds between requests", - "laminas/laminas-db": "Laminas\\Db component, for use with PubSubHubbub", - "laminas/laminas-http": "Laminas\\Http for PubSubHubbub, and optionally for use with Laminas\\Feed\\Reader", - "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for easily extending ExtensionManager implementations", - "laminas/laminas-validator": "Laminas\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent", - "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Laminas\\Feed\\Reader\\Http\\Psr7ResponseDecorator" - }, - "time": "2020-03-29T12:36:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.12.x-dev", - "dev-develop": "2.13.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Feed\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides functionality for consuming RSS and Atom feeds", - "homepage": "https://laminas.dev", - "keywords": [ - "feed", - "laminas" - ] - }, - { - "name": "laminas/laminas-stdlib", - "version": "3.2.1", - "version_normalized": "3.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/2b18347625a2f06a1a485acfbc870f699dbe51c6", - "reference": "2b18347625a2f06a1a485acfbc870f699dbe51c6", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpbench/phpbench": "^0.13", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" - }, - "time": "2019-12-31T17:51:15+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev", - "dev-develop": "3.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Stdlib\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "SPL extensions, array utilities, error handlers, and more", - "homepage": "https://laminas.dev", - "keywords": [ - "laminas", - "stdlib" - ] - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.0.4", - "version_normalized": "1.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "fcd87520e4943d968557803919523772475e8ea3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", - "reference": "fcd87520e4943d968557803919523772475e8ea3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", - "squizlabs/php_codesniffer": "^3.5" - }, - "time": "2020-05-20T16:45:56+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev", - "dev-develop": "1.1.x-dev" - }, - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ] - }, - { - "name": "lsolesen/pel", - "version": "0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/lsolesen/pel.git", - "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lsolesen/pel/zipball/c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", - "reference": "c9e3919f5db3b85c3c422d4f8d448dbcb2a87a23", - "shasum": "" - }, - "require": { - "php": ">=5.0.0" - }, - "require-dev": { - "ext-gd": "*", - "phpunit/phpunit": "5.7.*", - "satooshi/php-coveralls": "1.0.*", - "squizlabs/php_codesniffer": "3.0.0RC3" - }, - "time": "2017-02-03T11:58:58+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "lsolesen\\pel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Lars Olesen", - "email": "lars@intraface.dk", - "homepage": "http://intraface.dk", - "role": "Developer" - }, - { - "name": "Martin Geisler", - "email": "martin@geisler.net", - "homepage": "http://geisler.net", - "role": "Developer" - } - ], - "description": "PHP Exif Library. A library for reading and writing Exif headers in JPEG and TIFF images using PHP.", - "homepage": "http://lsolesen.github.com/pel/", - "keywords": [ - "exif", - "image" - ], - "support": { - "issues": "https://github.com/lsolesen/pel/issues", - "source": "https://github.com/lsolesen/pel/tree/master" - } - }, - { - "name": "masterminds/html5", - "version": "2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "2c37c6c520b995b761674de3be8455a381679067" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", - "reference": "2c37c6c520b995b761674de3be8455a381679067", - "shasum": "" - }, - "require": { - "ext-libxml": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "sami/sami": "~2.0", - "satooshi/php-coveralls": "1.0.*" - }, - "time": "2017-09-04T12:26:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ] - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "version_normalized": "4.10.4.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-12-20T10:01:03+00:00", - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "installation-source": "dist", - "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" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" - } - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "version_normalized": "9.99.99.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "time": "2018-07-02T15:55:56+00:00", - "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ] - }, - { - "name": "pear/archive_tar", - "version": "1.4.12", - "version_normalized": "1.4.12.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Archive_Tar.git", - "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/19bb8e95490d3e3ad92fcac95500ca80bdcc7495", - "reference": "19bb8e95490d3e3ad92fcac95500ca80bdcc7495", - "shasum": "" - }, - "require": { - "pear/pear-core-minimal": "^1.10.0alpha2", - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-bz2": "Bz2 compression support.", - "ext-xz": "Lzma2 compression support.", - "ext-zlib": "Gzip compression support." - }, - "time": "2021-01-18T19:32:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Archive_Tar": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "./" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Vincent Blavet", - "email": "vincent@phpconcept.net" - }, - { - "name": "Greg Beaver", - "email": "greg@chiaraquartet.net" - }, - { - "name": "Michiel Rook", - "email": "mrook@php.net" - } - ], - "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", - "homepage": "https://github.com/pear/Archive_Tar", - "keywords": [ - "archive", - "tar" - ], - "funding": [ - { - "url": "https://github.com/mrook", - "type": "github" - }, - { - "url": "https://www.patreon.com/michielrook", - "type": "patreon" - } - ] - }, - { - "name": "pear/console_getopt", - "version": "v1.4.3", - "version_normalized": "1.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Console_Getopt.git", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0", - "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0", - "shasum": "" - }, - "time": "2019-11-20T18:27:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Console": "./" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "./" - ], - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Andrei Zmievski", - "email": "andrei@php.net", - "role": "Lead" - }, - { - "name": "Stig Bakken", - "email": "stig@php.net", - "role": "Developer" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net", - "role": "Helper" - } - ], - "description": "More info available on: http://pear.php.net/package/Console_Getopt" - }, - { - "name": "pear/console_table", - "version": "v1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/pear/Console_Table.git", - "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea", - "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "suggest": { - "pear/Console_Color2": ">=0.1.2" - }, - "time": "2018-01-25T20:47:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "Table.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jan Schneider", - "homepage": "http://pear.php.net/user/yunosh" - }, - { - "name": "Tal Peer", - "homepage": "http://pear.php.net/user/tal" - }, - { - "name": "Xavier Noguer", - "homepage": "http://pear.php.net/user/xnoguer" - }, - { - "name": "Richard Heyes", - "homepage": "http://pear.php.net/user/richard" - } - ], - "description": "Library that makes it easy to build console style tables.", - "homepage": "http://pear.php.net/package/Console_Table/", - "keywords": [ - "console" - ], - "support": { - "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Table", - "source": "https://github.com/pear/Console_Table" - } - }, - { - "name": "pear/pear-core-minimal", - "version": "v1.10.10", - "version_normalized": "1.10.10.0", - "source": { - "type": "git", - "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7", - "shasum": "" - }, - "require": { - "pear/console_getopt": "~1.4", - "pear/pear_exception": "~1.0" - }, - "replace": { - "rsky/pear-core-min": "self.version" - }, - "time": "2019-11-19T19:00:24+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "src/" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@php.net", - "role": "Lead" - } - ], - "description": "Minimal set of PEAR core files to be used as composer dependency" - }, - { - "name": "pear/pear_exception", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/pear/PEAR_Exception.git", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", - "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", - "shasum": "" - }, - "require": { - "php": ">=4.4.0" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "time": "2019-12-10T10:24:42+00:00", - "type": "class", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "PEAR/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "." - ], - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Helgi Thormar", - "email": "dufuz@php.net" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net" - } - ], - "description": "The PEAR Exception base class.", - "homepage": "https://github.com/pear/PEAR_Exception", - "keywords": [ - "exception" - ] - }, - { - "name": "phenx/php-font-lib", - "version": "0.5.2", - "version_normalized": "0.5.2.0", - "source": { - "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" - }, - "time": "2020-03-08T15:31:32+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "FontLib\\": "src/FontLib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse, export and make subsets of different types of font files.", - "homepage": "https://github.com/PhenX/php-font-lib", - "support": { - "issues": "https://github.com/PhenX/php-font-lib/issues", - "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" - } - }, - { - "name": "phenx/php-svg-lib", - "version": "v0.3.3", - "version_normalized": "0.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", - "shasum": "" - }, - "require": { - "sabberworm/php-css-parser": "^8.3" - }, - "require-dev": { - "phpunit/phpunit": "^5.5|^6.5" - }, - "time": "2019-09-11T20:02:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Svg\\": "src/Svg" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse and export to PDF SVG files.", - "homepage": "https://github.com/PhenX/php-svg-lib", - "support": { - "issues": "https://github.com/PhenX/php-svg-lib/issues", - "source": "https://github.com/PhenX/php-svg-lib/tree/master" - } - }, - { - "name": "phpfastcache/riak-client", - "version": "3.4.3", - "version_normalized": "3.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/PHPSocialNetwork/riak-php-client.git", - "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9", - "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "php": ">=5.4" - }, - "conflict": { - "basho/riak": "*" - }, - "require-dev": { - "apigen/apigen": "4.1.*", - "phpunit/phpunit": "4.8.*" - }, - "time": "2017-11-23T21:33:15+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Basho\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Georges.L", - "email": "contact@geolim4.com", - "homepage": "https://github.com/Geolim4", - "role": "Maintainer" - }, - { - "name": "Christopher Mancini", - "email": "cmancini@basho.com", - "homepage": "https://github.com/christophermancini", - "role": "Former Lead Developer" - }, - { - "name": "Alex Moore", - "email": "amoore@basho.com", - "homepage": "https://github.com/alexmoore", - "role": "Former Developer" - } - ], - "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)", - "homepage": "https://github.com/PHPSocialNetwork/riak-php-client", - "keywords": [ - "basho", - "client", - "crdt", - "data", - "database", - "datatype", - "driver", - "kv", - "nosql", - "riak" - ], - "support": { - "issues": "https://github.com/PHPSocialNetwork/riak-php-client/issues", - "source": "https://github.com/PHPSocialNetwork/riak-php-client/tree/develop" - } - }, - { - "name": "phpmailer/phpmailer", - "version": "v6.2.0", - "version_normalized": "6.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f", - "reference": "e38888a75c070304ca5514197d4847a59a5c853f", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.2", - "phpcompatibility/php-compatibility": "^9.3.5", - "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" - }, - "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset", - "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", - "league/oauth2-google": "Needed for Google XOAUTH2 authentication", - "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" - }, - "time": "2020-11-25T15:24:57+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PHPMailer\\PHPMailer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" - ], - "authors": [ - { - "name": "Marcus Bointon", - "email": "phpmailer@synchromedia.co.uk" - }, - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, - { - "name": "Andy Prevost", - "email": "codeworxtech@users.sourceforge.net" - }, - { - "name": "Brent R. Matzelle" - } - ], - "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "support": { - "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0" - }, - "funding": [ - { - "url": "https://github.com/Synchro", - "type": "github" - } - ] - }, - { - "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-02-14T16:28:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ] - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T14:39:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ] - }, - { - "name": "psr/log", - "version": "1.1.3", - "version_normalized": "1.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2020-03-23T09:12:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "psy/psysh", - "version": "v0.10.6", - "version_normalized": "0.10.6.0", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6f990c19f91729de8b31e639d6e204ea59f19cf3", - "reference": "6f990c19f91729de8b31e639d6e204ea59f19cf3", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", - "php": "^8.0 || ^7.0 || ^5.5.9", - "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", - "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" - }, - "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." - }, - "time": "2021-01-18T15:53:43+00:00", - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.10.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.6" - } - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "time": "2019-03-08T08:55:37+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders." - }, - { - "name": "robrichards/xmlseclibs", - "version": "3.1.1", - "version_normalized": "3.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df", - "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "php": ">= 5.4" - }, - "time": "2020-09-05T13:00:25+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "RobRichards\\XMLSecLibs\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "A PHP library for XML Security", - "homepage": "https://github.com/robrichards/xmlseclibs", - "keywords": [ - "security", - "signature", - "xml", - "xmldsig" - ], - "support": { - "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1" - } - }, - { - "name": "sabberworm/php-css-parser", - "version": "8.3.1", - "version_normalized": "8.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "codacy/coverage": "^1.4", - "phpunit/phpunit": "~4.8" - }, - "time": "2020-06-01T09:10:00+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Sabberworm\\CSS": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Raphael Schweikert" - } - ], - "description": "Parser for CSS Files written in PHP", - "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", - "keywords": [ - "css", - "parser", - "stylesheet" - ], - "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" - } - }, - { - "name": "simplesamlphp/composer-module-installer", - "version": "v1.1.8", - "version_normalized": "1.1.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/composer-module-installer.git", - "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa", - "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1|^2.0", - "simplesamlphp/simplesamlphp": "*" - }, - "time": "2020-08-25T19:04:33+00:00", - "type": "composer-plugin", - "extra": { - "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "SimpleSamlPhp\\Composer": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" - ], - "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", - "support": { - "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", - "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.1.8" - } - }, - { - "name": "simplesamlphp/saml2", - "version": "v4.2.0", - "version_normalized": "4.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/saml2.git", - "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", - "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-openssl": "*", - "ext-zlib": "*", - "php": ">=7.1", - "psr/log": "~1.1", - "robrichards/xmlseclibs": "^3.1.0", - "webmozart/assert": "^1.5" - }, - "require-dev": { - "mockery/mockery": "~1.2", - "phpunit/phpunit": "^7.5", - "sebastian/phpcpd": "~4.1", - "sensiolabs/security-checker": "~6.0", - "simplesamlphp/simplesamlphp-test-framework": "~0.1.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "time": "2021-01-28T21:35:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v4.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "SAML2\\": "src/SAML2" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "SAML2 PHP library from SimpleSAMLphp", - "support": { - "issues": "https://github.com/simplesamlphp/saml2/issues", - "source": "https://github.com/simplesamlphp/saml2/tree/v4.2.0" - } - }, - { - "name": "simplesamlphp/simplesamlphp", - "version": "v1.18.8", - "version_normalized": "1.18.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp.git", - "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", - "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b", - "shasum": "" - }, - "require": { - "ext-date": "*", - "ext-dom": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pcre": "*", - "ext-spl": "*", - "ext-zlib": "*", - "gettext/gettext": "^4.6", - "php": ">=5.6", - "phpmailer/phpmailer": "^6.0", - "robrichards/xmlseclibs": "^3.0.4", - "simplesamlphp/saml2": "^3.4 || ^4.0", - "simplesamlphp/simplesamlphp-module-adfs": "^0.9", - "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9", - "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9", - "simplesamlphp/simplesamlphp-module-authorize": "^0.9", - "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9", - "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9", - "simplesamlphp/simplesamlphp-module-authx509": "^0.9", - "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9", - "simplesamlphp/simplesamlphp-module-cas": "^0.9", - "simplesamlphp/simplesamlphp-module-cdc": "^0.9", - "simplesamlphp/simplesamlphp-module-consent": "^0.9", - "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9", - "simplesamlphp/simplesamlphp-module-discopower": "^0.9", - "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0", - "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", - "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9", - "simplesamlphp/simplesamlphp-module-memcookie": "^1.2", - "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9", - "simplesamlphp/simplesamlphp-module-negotiate": "^0.9", - "simplesamlphp/simplesamlphp-module-oauth": "^0.9", - "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9", - "simplesamlphp/simplesamlphp-module-radius": "^0.9", - "simplesamlphp/simplesamlphp-module-riak": "^0.9", - "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9", - "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9", - "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9", - "simplesamlphp/simplesamlphp-module-statistics": "^0.9", - "simplesamlphp/twig-configurable-i18n": "^2.2", - "symfony/config": "^3.4 || ^4.0", - "symfony/dependency-injection": "^3.4 || ^4.0", - "symfony/http-foundation": "^3.4 || ^4.0", - "symfony/http-kernel": "^3.4 || ^4.0", - "symfony/routing": "^3.4 || ^4.0", - "symfony/yaml": "^3.4 || ^4.0", - "twig/twig": "~1.0 || ~2.0" - }, - "require-dev": { - "ext-curl": "*", - "mikey179/vfsstream": "~1.6", - "phpunit/phpunit": "~5.7", - "sensiolabs/security-checker": "^5.0.3", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "~1.1.9" - }, - "suggest": { - "ext-curl": "Needed in order to check for updates automatically", - "ext-ldap": "Needed if an LDAP backend is used", - "ext-memcache": "Needed if a Memcache server is used to store session information", - "ext-mysql": "Needed if a MySQL backend is used, either for authentication or to store session information", - "ext-pdo": "Needed if a database backend is used, either for authentication or to store session information", - "ext-pgsql": "Needed if a PostgreSQL backend is used, either for authentication or to store session information", - "ext-radius": "Needed if a Radius backend is used", - "predis/predis": "Needed if a Redis server is used to store session information" - }, - "time": "2020-09-02T12:07:28+00:00", - "type": "project", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\": "lib/SimpleSAML" - }, - "files": [ - "lib/_autoload_modules.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - }, - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A PHP implementation of a SAML 2.0 service provider and identity provider, also compatible with Shibboleth 1.3 and 2.0.", - "homepage": "http://simplesamlphp.org", - "keywords": [ - "SAML2", - "idp", - "oauth", - "shibboleth", - "sp", - "ws-federation" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-adfs", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git", - "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237", - "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "<1.7" - }, - "time": "2020-03-31T14:29:24+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\adfs\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that implements the WS-federation IDP", - "keywords": [ - "adfs", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-adfs/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-adfs" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authcrypt", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git", - "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/9a2c1a761e2d94394a4f2d3499fd6f0853899530", - "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4", - "whitehat101/apr1-md5": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2021-01-08T09:09:33+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authcrypt\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "This module provides authentication against password hashes or .htpasswd files", - "keywords": [ - "authcrypt", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authcrypt/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authcrypt" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authfacebook", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git", - "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c", - "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" - }, - "time": "2020-03-13T11:29:21+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authfacebook\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Andjelko Horvat", - "email": "comel@vingd.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to authenticate against Facebook", - "keywords": [ - "facebook", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authorize", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4", - "reference": "c2607a5252ee1256b50ce7795e35513b116998d4", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2020-02-25T15:16:57+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authorize\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Ernesto Revilla", - "email": "erny@yaco.es" - } - ], - "description": "This module provides a user authorization filter based on attribute matching", - "keywords": [ - "authorize", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authorize" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authtwitter", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git", - "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a", - "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "simplesamlphp/composer-module-installer": "~1.0", - "simplesamlphp/simplesamlphp-module-oauth": "^0.9" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:00:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authtwitter\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to perform authentication against Twitter", - "keywords": [ - "simplesamlphp", - "twitter" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authtwitter/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authtwitter" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authwindowslive", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git", - "reference": "f40aecec6c0adaedb6693309840c98cec783876e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e", - "reference": "f40aecec6c0adaedb6693309840c98cec783876e", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:01:13+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authwindowslive\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to perform authentication against Windows Live", - "keywords": [ - "live", - "simplesamlphp", - "windows", - "windowslive" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authx509", - "version": "v0.9.8", - "version_normalized": "0.9.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git", - "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", - "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.15" - }, - "time": "2020-12-15T23:06:47+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "authX509" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\authX509\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Joost van Dijk", - "email": "Joost.vanDijk@surfnet.nl" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to authenticate users based on X509 client certificates", - "keywords": [ - "simplesamlphp", - "x509" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authx509/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authx509" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-authyubikey", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git", - "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", - "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T08:52:49+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "authYubikey" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\modules\\yubikey\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to authenticate against YubiKey", - "keywords": [ - "authyubikey", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-authyubikey/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-authyubikey" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-cas", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git", - "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e", - "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:03:06+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\cas\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "A module that provides CAS authentication", - "keywords": [ - "cas", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-cas/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-cas" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-cdc", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git", - "reference": "16a5bfac7299e04e5feb472af328e07598708166" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166", - "reference": "16a5bfac7299e04e5feb472af328e07598708166", - "shasum": "" - }, - "require": { - "simplesamlphp/composer-module-installer": ">=1.1.6" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:04:11+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\cdc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A SimpleSAMLphp module that allows integration with CDC", - "homepage": "https://simplesamlphp.org/", - "keywords": [ - "cdc", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-consent", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git", - "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d", - "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "<1.7" - }, - "time": "2020-06-15T14:26:23+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\consent\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "lavmrk@gmail.com" - } - ], - "description": "A module that will ask for user consent before releasing attributes", - "keywords": [ - "consent", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-consent/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-consent" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-consentadmin", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git", - "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1", - "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-consent": "^0.9", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:06:40+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "consentAdmin" - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Jacob Christiansen", - "email": "jach@wayf.dk" - }, - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - } - ], - "description": "A module that allows users to manage their consent", - "keywords": [ - "consentadmin", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-discopower", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git", - "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb", - "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4 <1.6" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-13T07:51:43+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\modules\\discopower\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed", - "keywords": [ - "discopower", - "discovery", - "simplesamlphp" - ] - }, - { - "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git", - "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708", - "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-05-28T12:37:15+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\exampleattributeserver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "An example for SAML attributes queries", - "keywords": [ - "exampleattributeserver", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-expirycheck", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git", - "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20", - "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.10" - }, - "time": "2019-12-14T13:20:46+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\expirycheck\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Alex Mihičinac", - "email": "alexm@arnes.si" - } - ], - "description": "The expirycheck module validates user's expiry date", - "keywords": [ - "expirycheck", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-ldap", - "version": "v0.9.10", - "version_normalized": "0.9.10.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git", - "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", - "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "suggest": { - "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp" - }, - "time": "2020-09-16T21:09:07+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\ldap\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that provides authentication against LDAP stores", - "keywords": [ - "ldap", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-ldap/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-ldap" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-memcachemonitor", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git", - "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/900b5c6b59913d9013b8dae090841a127ae55ae5", - "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "~0.0.6" - }, - "time": "2021-01-25T15:44:44+00:00", - "type": "simplesamlphp-module", - "extra": { - "ssp-mixedcase-module-name": "memcacheMonitor" - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able display usage statistics of a memcache(d) store", - "keywords": [ - "memcachemonitor", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-memcookie", - "version": "v1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git", - "reference": "39535304e8d464b7baa1e82cb441fa432947ff57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57", - "reference": "39535304e8d464b7baa1e82cb441fa432947ff57", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": ">=1.1.6" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.6" - }, - "time": "2019-08-08T18:33:47+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.", - "homepage": "https://simplesamlphp.org/", - "keywords": [ - "Auth MemCookie", - "apache", - "cookies", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-metarefresh", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git", - "reference": "e284306a7097297765b5b78a4e28f19f18d4e001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001", - "reference": "e284306a7097297765b5b78a4e28f19f18d4e001", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.18" - }, - "time": "2020-07-31T14:43:37+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\metarefresh\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "The metarefresh module will download and parse metadata documents and store them locally", - "keywords": [ - "metarefresh", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-metarefresh/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-metarefresh" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-negotiate", - "version": "v0.9.10", - "version_normalized": "0.9.10.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git", - "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/db05ff40399c66e3f14697a8162da6b2fbdab47d", - "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "sensiolabs/security-checker": "^5.0.3", - "simplesamlphp/simplesamlphp": "dev-testing-1.18", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used" - }, - "time": "2021-01-22T13:36:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\negotiate\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism", - "keywords": [ - "negotiate", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-negotiate/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-negotiate" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-oauth", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git", - "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", - "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61", - "shasum": "" - }, - "require": { - "simplesamlphp/composer-module-installer": ">=1.1.6" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2020-04-29T19:37:43+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no" - } - ], - "description": "A SimpleSAMLphp module that allows integration with OAuth1,", - "homepage": "https://simplesamlphp.org/", - "keywords": [ - "oauth1", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-preprodwarning", - "version": "v0.9.2", - "version_normalized": "0.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git", - "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638", - "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "^1.4" - }, - "time": "2020-04-09T13:05:27+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\preprodwarning\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "Display a warning when using a pre-production environment", - "keywords": [ - "preprodwarning", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-radius", - "version": "v0.9.3", - "version_normalized": "0.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git", - "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", - "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.7" - }, - "time": "2019-10-03T18:13:07+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\radius\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "A module that is able perform authentication against a RADIUS server", - "keywords": [ - "radius", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-radius/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-radius" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-riak", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git", - "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991", - "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "phpfastcache/riak-client": "^3.4", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T08:28:45+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\riak\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - } - ], - "description": "A module that is able to store key/value pairs in a Riak store", - "keywords": [ - "riak", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-riak/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-riak" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-sanitycheck", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git", - "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", - "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2020-05-07T11:34:29+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\sanitycheck\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "Perform sanity checks on configuration", - "keywords": [ - "sanitycheck", - "simplesamlphp" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-smartattributes", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git", - "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", - "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" - }, - "time": "2019-12-03T09:24:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\smartattributes\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.", - "keywords": [ - "simplesamlphp", - "smartattributes" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-smartattributes/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-smartattributes" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-sqlauth", - "version": "v0.9.1", - "version_normalized": "0.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git", - "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", - "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "webmozart/assert": "^1.4" - }, - "time": "2019-12-03T09:07:09+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\sqlauth\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Olav Morken", - "email": "olavmrk@gmail.com" - } - ], - "description": "This is a authentication module for authenticating a user against a SQL database", - "keywords": [ - "simplesamlphp", - "sqlauth" - ], - "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-sqlauth/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-sqlauth" - } - }, - { - "name": "simplesamlphp/simplesamlphp-module-statistics", - "version": "v0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git", - "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/03fb6bdbbf5ce0a0cb257208db79aacac227ac10", - "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "^1.4" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.12" - }, - "time": "2021-01-25T15:15:26+00:00", - "type": "simplesamlphp-module", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\Module\\statistics\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - } - ], - "description": "The SimpleSAMLphp statistics module", - "keywords": [ - "simplesamlphp", - "statistics" - ], - "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-module-statistics/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-module-statistics" - } - }, - { - "name": "simplesamlphp/twig-configurable-i18n", - "version": "v2.3.4", - "version_normalized": "2.3.4.0", - "source": { - "type": "git", - "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git", - "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", - "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "twig/extensions": "@dev" - }, - "require-dev": { - "phpunit/phpunit": "^7.5", - "sensiolabs/security-checker": "~6.0.3", - "simplesamlphp/simplesamlphp-test-framework": "~0.1.2", - "squizlabs/php_codesniffer": "^3.5", - "twig/twig": "^2.13" - }, - "time": "2020-08-27T12:51:10+00:00", - "type": "project", - "installation-source": "dist", - "autoload": { - "psr-4": { - "SimpleSAML\\TwigConfigurableI18n\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Jaime Perez", - "email": "jaime.perez@uninett.no" - } - ], - "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.", - "keywords": [ - "extension", - "gettext", - "i18n", - "internationalization", - "translation", - "twig" - ], - "support": { - "issues": "https://github.com/simplesamlphp/twig-configurable-i18n/issues", - "source": "https://github.com/simplesamlphp/twig-configurable-i18n" - } - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.5.8", - "version_normalized": "3.5.8.0", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "time": "2020-10-23T02:01:07+00:00", - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - } - }, - { - "name": "stack/builder", - "version": "v1.0.5", - "version_normalized": "1.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/stackphp/builder.git", - "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a", - "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a", - "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" - }, - "time": "2017-11-18T14:57:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Stack": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Builder for stack middlewares based on HttpKernelInterface.", - "keywords": [ - "stack" - ] - }, - { - "name": "symfony-cmf/routing", - "version": "1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony-cmf/routing.git", - "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", - "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", - "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)" - }, - "time": "2017-05-09T08:10:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Cmf\\Component\\Routing\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony CMF Community", - "homepage": "https://github.com/symfony-cmf/Routing/contributors" - } - ], - "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers", - "homepage": "http://cmf.symfony.com", - "keywords": [ - "database", - "routing" - ] - }, - { - "name": "symfony/class-loader", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/class-loader.git", - "reference": "e4636a4f23f157278a19e5db160c63de0da297d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8", - "reference": "e4636a4f23f157278a19e5db160c63de0da297d8", - "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" - }, - "time": "2020-03-15T09:38:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\ClassLoader\\": "" - }, - "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 ClassLoader Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/config", - "version": "v4.4.19", - "version_normalized": "4.4.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2c4c7827a7e143f5cf375666641b0f448eab8802", - "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/filesystem": "^3.4|^4.0|^5.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<3.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/messenger": "^4.1|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "time": "2021-01-27T09:09:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v4.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/console", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", - "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "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": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2020-05-30T18:58:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/debug", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", - "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d", - "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" - }, - "time": "2020-05-22T18:25:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/dependency-injection", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e39380b7104b0ec538a075ae919f00c7e5267bac", - "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac", - "shasum": "" - }, - "require": { - "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": { - "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": "" - }, - "time": "2020-05-30T21:06:01+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "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 DependencyInjection Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/event-dispatcher", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081", - "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" - }, - "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" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2020-05-05T15:06:23+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "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 EventDispatcher Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/filesystem", - "version": "v5.2.3", - "version_normalized": "5.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "time": "2021-01-27T10:01:46+00:00", - "type": "library", - "installation-source": "dist", - "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": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/finder", - "version": "v4.4.19", - "version_normalized": "4.4.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/25d79cfccfc12e84e7a63a248c3f0720fdd92db6", - "reference": "25d79cfccfc12e84e7a63a248c3f0720fdd92db6", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "time": "2021-01-27T09:09:26+00:00", - "type": "library", - "installation-source": "dist", - "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": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/http-foundation", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fbd216d2304b1a3fe38d6392b04729c8dd356359", - "reference": "fbd216d2304b1a3fe38d6392b04729c8dd356359", - "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" - }, - "time": "2020-05-16T13:15:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "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 HttpFoundation Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/http-kernel", - "version": "v3.4.44", - "version_normalized": "3.4.44.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", - "reference": "27dcaa8c6b18c75df9f37badeb4d3564ffaa1326", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" - }, - "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=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.10|^4.0.10", - "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": "" - }, - "time": "2020-08-31T05:53:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "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 HttpKernel Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2020-05-12T16:14:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", - "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "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 Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "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" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "e3c8c138280cdfe4b81488441555583aa1984e23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/e3c8c138280cdfe4b81488441555583aa1984e23", - "reference": "e3c8c138280cdfe4b81488441555583aa1984e23", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, - "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 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "82225c2d7d23d7e70515496d249c0152679b468e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/82225c2d7d23d7e70515496d249c0152679b468e", - "reference": "82225c2d7d23d7e70515496d249c0152679b468e", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "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.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "f048e612a3905f34931127360bdd2def19a5e582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", - "reference": "f048e612a3905f34931127360bdd2def19a5e582", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "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" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.22.0", - "version_normalized": "1.22.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2021-01-07T16:49:33+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-util", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4afb4110fc037752cf0ce9869f9ab8162c4e20d7", - "reference": "4afb4110fc037752cf0ce9869f9ab8162c4e20d7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:14:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "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 utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/process", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8a895f0c92a7c4b10db95139bcff71bdf66d4d21", - "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "time": "2020-05-23T17:05:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "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", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/psr-http-message-bridge", - "version": "v1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "a33352af16f78a5ff4f9d90811536abf210df12b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a33352af16f78a5ff4f9d90811536abf210df12b", - "reference": "a33352af16f78a5ff4f9d90811536abf210df12b", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^2.3.42 || ^3.4 || ^4.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4 || ^4.0" - }, - "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" - }, - "time": "2019-04-03T17:09:40+00:00", - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ] - }, - { - "name": "symfony/routing", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e0d43b6f9417ad59ecaa8e2f799b79eef417387f", - "reference": "e0d43b6f9417ad59ecaa8e2f799b79eef417387f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "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/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "time": "2020-05-30T19:50:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "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 Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/serializer", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/0db90db012b1b0a04fbb2d64ae9160871cad9d4f", - "reference": "0db90db012b1b0a04fbb2d64ae9160871cad9d4f", - "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" - }, - "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.4.13|~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": "For using a MIME type guesser within the DataUriNormalizer.", - "symfony/property-access": "For using the ObjectNormalizer.", - "symfony/property-info": "To deserialize relations.", - "symfony/yaml": "For using the default YAML mapping loader." - }, - "time": "2020-05-30T18:58:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "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 Serializer Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/translation", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", - "reference": "b0cd62ef0ff7ec31b67d78d7fc818e2bda4e844f", - "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" - }, - "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/http-kernel": "~3.4|~4.0", - "symfony/intl": "^2.8.18|^3.2.5|~4.0", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "time": "2020-05-30T18:58:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "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 Translation Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/validator", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "5fb88120a11a75e17b602103a893dd8b27804529" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/5fb88120a11a75e17b602103a893dd8b27804529", - "reference": "5fb88120a11a75e17b602103a893dd8b27804529", - "shasum": "" - }, - "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": { - "doctrine/lexer": "<1.0.2", - "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.7", - "doctrine/cache": "~1.0", - "egulias/email-validator": "^2.1.10", - "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": "" - }, - "time": "2020-05-30T18:43:38+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Validator\\": "" - }, - "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 Validator Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/var-dumper", - "version": "v4.4.19", - "version_normalized": "4.4.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f", - "reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^1.43|^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "time": "2021-01-27T09:09:26+00:00", - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "installation-source": "dist", - "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": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/yaml", - "version": "v3.4.41", - "version_normalized": "3.4.41.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", - "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "time": "2020-05-11T07:51:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "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 Yaml Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "twig/extensions", - "version": "v1.5.4", - "version_normalized": "1.5.4.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig-extensions.git", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202", - "shasum": "" - }, - "require": { - "twig/twig": "^1.27|^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4", - "symfony/translation": "^2.7|^3.4" - }, - "suggest": { - "symfony/translation": "Allow the time_diff output to be translated" - }, - "time": "2018-12-05T18:34:18+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Twig_Extensions_": "lib/" - }, - "psr-4": { - "Twig\\Extensions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Common additional features for Twig that do not directly belong in core", - "keywords": [ - "i18n", - "text" - ], - "support": { - "issues": "https://github.com/twigphp/Twig-extensions/issues", - "source": "https://github.com/twigphp/Twig-extensions/tree/master" - }, - "abandoned": true - }, - { - "name": "twig/twig", - "version": "v1.42.5", - "version_normalized": "1.42.5.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "time": "2020-02-11T05:59:23+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.42-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Twig_": "lib/" - }, - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ] - }, - { - "name": "typo3/phar-stream-wrapper", - "version": "v3.1.4", - "version_normalized": "3.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/TYPO3/phar-stream-wrapper.git", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", - "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.0" - }, - "require-dev": { - "ext-xdebug": "*", - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "ext-fileinfo": "For PHP builtin file type guessing, otherwise uses internal processing" - }, - "time": "2019-12-10T11:53:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "TYPO3\\PharStreamWrapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Interceptors for PHP's native phar:// stream handling", - "homepage": "https://typo3.org/", - "keywords": [ - "phar", - "php", - "security", - "stream-wrapper" - ] - }, - { - "name": "webflo/drupal-finder", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/webflo/drupal-finder.git", - "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee", - "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee", - "shasum": "" - }, - "require": { - "ext-json": "*" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^4.8" - }, - "time": "2020-10-27T09:42:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/DrupalFinder.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Florian Weber", - "email": "florian@webflo.org" - } - ], - "description": "Helper class to locate a Drupal installation from a given path.", - "support": { - "issues": "https://github.com/webflo/drupal-finder/issues", - "source": "https://github.com/webflo/drupal-finder/tree/1.2.2" - } - }, - { - "name": "webmozart/assert", - "version": "1.5.0", - "version_normalized": "1.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "time": "2019-08-24T08:43:50+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "version_normalized": "2.3.0.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" - }, - "time": "2015-12-17T08:42:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "installation-source": "dist", - "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.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - } - }, - { - "name": "whitehat101/apr1-md5", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/whitehat101/apr1-md5.git", - "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/whitehat101/apr1-md5/zipball/8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", - "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.0.*" - }, - "time": "2015-02-11T11:06:42+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "WhiteHat101\\Crypt\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Ebler", - "email": "jebler@gmail.com" - } - ], - "description": "Apache's APR1-MD5 algorithm in pure PHP", - "homepage": "https://github.com/whitehat101/apr1-md5", - "keywords": [ - "MD5", - "apr1" - ], - "support": { - "issues": "https://github.com/whitehat101/apr1-md5/issues", - "source": "https://github.com/whitehat101/apr1-md5/tree/master" + }, + "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": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v4.4.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/var-dumper" + }, + { + "name": "symfony/yaml", + "version": "v3.4.41", + "version_normalized": "3.4.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", + "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2020-05-11T07:51:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "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 Yaml Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/yaml" + }, + { + "name": "twig/extensions", + "version": "v1.5.4", + "version_normalized": "1.5.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig-extensions.git", + "reference": "57873c8b0c1be51caa47df2cdb824490beb16202" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202", + "reference": "57873c8b0c1be51caa47df2cdb824490beb16202", + "shasum": "" + }, + "require": { + "twig/twig": "^1.27|^2.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.4", + "symfony/translation": "^2.7|^3.4" + }, + "suggest": { + "symfony/translation": "Allow the time_diff output to be translated" + }, + "time": "2018-12-05T18:34:18+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Twig_Extensions_": "lib/" + }, + "psr-4": { + "Twig\\Extensions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Common additional features for Twig that do not directly belong in core", + "keywords": [ + "i18n", + "text" + ], + "support": { + "issues": "https://github.com/twigphp/Twig-extensions/issues", + "source": "https://github.com/twigphp/Twig-extensions/tree/master" + }, + "abandoned": true, + "install-path": "../twig/extensions" + }, + { + "name": "twig/twig", + "version": "v1.42.5", + "version_normalized": "1.42.5.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "time": "2020-02-11T05:59:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.42-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "install-path": "../twig/twig" + }, + { + "name": "typo3/phar-stream-wrapper", + "version": "v3.1.4", + "version_normalized": "3.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/phar-stream-wrapper.git", + "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", + "reference": "e0c1b495cfac064f4f5c4bcb6bf67bb7f345ed04", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.0" + }, + "require-dev": { + "ext-xdebug": "*", + "phpunit/phpunit": "^6.5" + }, + "suggest": { + "ext-fileinfo": "For PHP builtin file type guessing, otherwise uses internal processing" + }, + "time": "2019-12-10T11:53:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "TYPO3\\PharStreamWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Interceptors for PHP's native phar:// stream handling", + "homepage": "https://typo3.org/", + "keywords": [ + "phar", + "php", + "security", + "stream-wrapper" + ], + "install-path": "../typo3/phar-stream-wrapper" + }, + { + "name": "webflo/drupal-finder", + "version": "1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/webflo/drupal-finder.git", + "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee", + "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee", + "shasum": "" + }, + "require": { + "ext-json": "*" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^4.8" + }, + "time": "2020-10-27T09:42:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/DrupalFinder.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Florian Weber", + "email": "florian@webflo.org" + } + ], + "description": "Helper class to locate a Drupal installation from a given path.", + "support": { + "issues": "https://github.com/webflo/drupal-finder/issues", + "source": "https://github.com/webflo/drupal-finder/tree/1.2.2" + }, + "install-path": "../webflo/drupal-finder" + }, + { + "name": "webmozart/assert", + "version": "1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "time": "2019-08-24T08:43:50+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../webmozart/assert" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "version_normalized": "2.3.0.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" + }, + "time": "2015-12-17T08:42:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "installation-source": "dist", + "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.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "install-path": "../webmozart/path-util" + }, + { + "name": "whitehat101/apr1-md5", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/whitehat101/apr1-md5.git", + "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/whitehat101/apr1-md5/zipball/8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", + "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.0.*" + }, + "time": "2015-02-11T11:06:42+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "WhiteHat101\\Crypt\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Ebler", + "email": "jebler@gmail.com" + } + ], + "description": "Apache's APR1-MD5 algorithm in pure PHP", + "homepage": "https://github.com/whitehat101/apr1-md5", + "keywords": [ + "MD5", + "apr1" + ], + "support": { + "issues": "https://github.com/whitehat101/apr1-md5/issues", + "source": "https://github.com/whitehat101/apr1-md5/tree/master" + }, + "install-path": "../whitehat101/apr1-md5" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" + }, + "require-dev": { + "composer/composer": "^1.1||^2.0", + "php-parallel-lint/php-parallel-lint": "~1.1.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.5.4" + }, + "time": "2021-02-24T05:28:06+00:00", + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" + }, + "installation-source": "source", + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\Merge\\V2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.0.1" + }, + "install-path": "../wikimedia/composer-merge-plugin" } - }, - { - "name": "wikimedia/composer-merge-plugin", - "version": "v1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0", - "php": ">=5.3.2" - }, - "require-dev": { - "composer/composer": "~1.0.0", - "jakub-onderka/php-parallel-lint": "~0.8", - "phpunit/phpunit": "~4.8|~5.0", - "squizlabs/php_codesniffer": "~2.1.0" - }, - "time": "2017-04-25T02:31:25+00:00", - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - }, - "class": "Wikimedia\\Composer\\MergePlugin" - }, - "installation-source": "source", - "autoload": { - "psr-4": { - "Wikimedia\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bryan Davis", - "email": "bd808@wikimedia.org" - } - ], - "description": "Composer plugin to merge multiple composer.json files" - } -] + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 24f21d267766298e5a560a8d7ba86eca83af0691..43c11b39d813370c89959a51d373e44b4b4497d8 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,12 +1,12 @@ <?php return array ( 'root' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', 'name' => 'drupal/recommended-project', ), 'versions' => @@ -171,6 +171,15 @@ ), 'reference' => '8.x-2.4', ), + 'drupal/adminimal_theme' => + array ( + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.6', + ), 'drupal/aggregator' => array ( 'replaced' => @@ -275,14 +284,32 @@ ), 'reference' => '8.x-1.1', ), + 'drupal/cern-adminimal-subtheme' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'a2ed5628d532fccb54abbeaf063db3944784bd76', + ), + 'drupal/cern-base-theme' => + array ( + 'pretty_version' => '2.6.6', + 'version' => '2.6.6.0', + 'aliases' => + array ( + ), + 'reference' => 'cb5ed2e618d84b10f0f7c4441ad0be5ce0a2c2d3', + ), 'drupal/cern-cds-media' => array ( - 'pretty_version' => '2.1.3', - 'version' => '2.1.3.0', + 'pretty_version' => '2.1.4', + 'version' => '2.1.4.0', 'aliases' => array ( ), - 'reference' => '57ba9f56ce31d754e1d89117fcdd65ae816ce22c', + 'reference' => '211fb1be8dbb83df9dd791b6f75d8798bb99f290', ), 'drupal/cern-components' => array ( @@ -295,12 +322,12 @@ ), 'drupal/cern-dev-status' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', 'aliases' => array ( ), - 'reference' => '50a2dcafc5ba1d130dd270cff17718f03e4cc3b5', + 'reference' => 'faba2b40d7f34d718f0826dbb38250e42881e71a', ), 'drupal/cern-display-formats' => array ( @@ -311,23 +338,41 @@ ), 'reference' => '57b5b7cc346f4094359efbb53f9cb21cfedbaaf3', ), + 'drupal/cern-drupal-welcome-message-block' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c5a6c1b0b465429ffe2c3d5bac92b6fa39f668f6', + ), 'drupal/cern-full-html-format' => array ( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', 'aliases' => array ( ), - 'reference' => '862c0ffe8ed690dc622d72d22292c83f42c77bb6', + 'reference' => '4e4a15aa77576abadb8639f537e31d31edbc09a6', + ), + 'drupal/cern-indico-feeds' => + array ( + 'pretty_version' => '2.0.5', + 'version' => '2.0.5.0', + 'aliases' => + array ( + ), + 'reference' => '8478ce54ec7267c82e3370c5e35642d8e0c11534', ), 'drupal/cern-landing-page' => array ( - 'pretty_version' => '2.2.3', - 'version' => '2.2.3.0', + 'pretty_version' => '2.2.4', + 'version' => '2.2.4.0', 'aliases' => array ( ), - 'reference' => '7f2e2fae22215d2f1b886eb677e9dafdecdc9033', + 'reference' => 'a6aa2903393d64b341900aa65c3e160afd39752f', ), 'drupal/cern-loading' => array ( @@ -340,21 +385,48 @@ ), 'drupal/cern-paragraph-types' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', 'aliases' => array ( ), - 'reference' => 'c62b7f8d71029a6cd6535ef87d465e5e858f74a5', + 'reference' => '5d9bd43e424dc7865ccd564544a1e07045f5c111', + ), + 'drupal/cern-profile-displayname' => + array ( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '1392ffebc377e627a22b6a817f2c342d126b93f2', + ), + 'drupal/cern-theme' => + array ( + 'pretty_version' => '2.6.11', + 'version' => '2.6.11.0', + 'aliases' => + array ( + ), + 'reference' => '38332c5687938b4c9368a05693071c884da02d14', ), 'drupal/cern-toolbar' => array ( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', 'aliases' => array ( ), - 'reference' => '51e6b5293d8628c03c124c46b1b81e972279393c', + 'reference' => 'ab38a97568bfe8e7f985bde28fdfd847b89aa685', + ), + 'drupal/cern-webcast-feeds' => + array ( + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', + 'aliases' => + array ( + ), + 'reference' => '4f255383eec3c97d2b9de1c0bae98d23b16e0076', ), 'drupal/ckeditor' => array ( @@ -413,12 +485,12 @@ ), 'drupal/colorbox' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/colorbutton' => array ( @@ -795,12 +867,12 @@ ), 'drupal/ds' => array ( - 'pretty_version' => '3.9.0', - 'version' => '3.9.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.9', + 'reference' => '8.x-3.12', ), 'drupal/dynamic_page_cache' => array ( @@ -811,12 +883,21 @@ ), 'drupal/easy_breadcrumb' => array ( - 'pretty_version' => '1.13.0', - 'version' => '1.13.0.0', + 'pretty_version' => '1.15.0', + 'version' => '1.15.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.15', + ), + 'drupal/easychart' => + array ( + 'pretty_version' => '3.4.0', + 'version' => '3.4.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.13', + 'reference' => '8.x-3.4', ), 'drupal/editor' => array ( @@ -852,12 +933,12 @@ ), 'drupal/entity_reference_revisions' => array ( - 'pretty_version' => '1.8.0', - 'version' => '1.8.0.0', + 'pretty_version' => '1.9.0', + 'version' => '1.9.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.8', + 'reference' => '8.x-1.9', ), 'drupal/externalauth' => array ( @@ -870,21 +951,21 @@ ), 'drupal/extlink' => array ( - 'pretty_version' => '1.5.0', - 'version' => '1.5.0.0', + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.5', + 'reference' => '8.x-1.6', ), 'drupal/facets' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/fast_404' => array ( @@ -897,12 +978,12 @@ ), 'drupal/features' => array ( - 'pretty_version' => '3.11.0', - 'version' => '3.11.0.0', + 'pretty_version' => '3.12.0', + 'version' => '3.12.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.11', + 'reference' => '8.x-3.12', ), 'drupal/feeds' => array ( @@ -1186,12 +1267,12 @@ ), 'drupal/ludwig' => array ( - 'pretty_version' => '1.6.0', - 'version' => '1.6.0.0', + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.6', + 'reference' => '8.x-1.7', ), 'drupal/mailsystem' => array ( @@ -1227,12 +1308,12 @@ ), 'drupal/memcache' => array ( - 'pretty_version' => '2.2.0', - 'version' => '2.2.0.0', + 'pretty_version' => '2.3.0', + 'version' => '2.3.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.2', + 'reference' => '8.x-2.3', ), 'drupal/menu_block' => array ( @@ -1277,12 +1358,12 @@ ), 'drupal/metatag' => array ( - 'pretty_version' => '1.15.0', - 'version' => '1.15.0.0', + 'pretty_version' => '1.16.0', + 'version' => '1.16.0.0', 'aliases' => array ( ), - 'reference' => '8.x-1.15', + 'reference' => '8.x-1.16', ), 'drupal/migrate' => array ( @@ -1357,12 +1438,12 @@ ), 'drupal/module_filter' => array ( - 'pretty_version' => '3.1.0', - 'version' => '3.1.0.0', + 'pretty_version' => '3.2.0', + 'version' => '3.2.0.0', 'aliases' => array ( ), - 'reference' => '8.x-3.1', + 'reference' => '8.x-3.2', ), 'drupal/node' => array ( @@ -1380,6 +1461,15 @@ ), 'reference' => '8.x-1.4', ), + 'drupal/openid_connect' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.0', + ), 'drupal/options' => array ( 'replaced' => @@ -1464,12 +1554,12 @@ ), 'drupal/permissions_by_term' => array ( - 'pretty_version' => '2.29.0', - 'version' => '2.29.0.0', + 'pretty_version' => '2.31.0', + 'version' => '2.31.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.29', + 'reference' => '8.x-2.31', ), 'drupal/piwik' => array ( @@ -1505,12 +1595,12 @@ ), 'drupal/recommended-project' => array ( - 'pretty_version' => '8.9.13.x-dev', - 'version' => '8.9.13.9999999-dev', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', 'aliases' => array ( ), - 'reference' => '3ff7d617b5d6cfbf92444f52710a2523cc318d69', + 'reference' => 'ee54ac5beb8e6d50593b7ea3413e037c689b40e7', ), 'drupal/redirect' => array ( @@ -1523,12 +1613,12 @@ ), 'drupal/require_login' => array ( - 'pretty_version' => '2.1.0', - 'version' => '2.1.0.0', + 'pretty_version' => '2.4.0', + 'version' => '2.4.0.0', 'aliases' => array ( ), - 'reference' => '8.x-2.1', + 'reference' => '8.x-2.4', ), 'drupal/responsive_image' => array ( @@ -1652,6 +1742,15 @@ 0 => '8.9.13', ), ), + 'drupal/sticky' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '8.x-1.1', + ), 'drupal/syslog' => array ( 'replaced' => @@ -1811,12 +1910,12 @@ ), 'drupal/webform' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), - 'reference' => '8.x-5.24', + 'reference' => '8.x-5.25', ), 'drupal/webform_analysis' => array ( @@ -1838,8 +1937,8 @@ ), 'drupal/webform_ui' => array ( - 'pretty_version' => '5.24.0', - 'version' => '5.24.0.0', + 'pretty_version' => '5.25.0', + 'version' => '5.25.0.0', 'aliases' => array ( ), @@ -1888,12 +1987,12 @@ ), 'drush/drush' => array ( - 'pretty_version' => '8.4.6', - 'version' => '8.4.6.0', + 'pretty_version' => '8.4.8', + 'version' => '8.4.8.0', 'aliases' => array ( ), - 'reference' => '4e48e11d7fe858eebe6c2fad71650c977d3f8900', + 'reference' => 'b377b1896e344085d06bdbf671a465950a164d1e', ), 'easyrdf/easyrdf' => array ( @@ -1924,12 +2023,12 @@ ), 'gettext/gettext' => array ( - 'pretty_version' => 'v4.8.3', - 'version' => '4.8.3.0', + 'pretty_version' => 'v4.8.4', + 'version' => '4.8.4.0', 'aliases' => array ( ), - 'reference' => '57ff4fb16647e78e80a5909fe3c190f1c3110321', + 'reference' => '58bc0f7f37e78efb0f9758f93d4a0f669f0f84a1', ), 'gettext/languages' => array ( @@ -2122,12 +2221,12 @@ ), 'phpmailer/phpmailer' => array ( - 'pretty_version' => 'v6.2.0', - 'version' => '6.2.0.0', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', 'aliases' => array ( ), - 'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f', + 'reference' => '4a08cf4cdd2c38d12ee2b9fa69e5d235f37a6dcb', ), 'psr/container' => array ( @@ -2179,12 +2278,12 @@ ), 'psy/psysh' => array ( - 'pretty_version' => 'v0.10.6', - 'version' => '0.10.6.0', + 'pretty_version' => 'v0.10.7', + 'version' => '0.10.7.0', 'aliases' => array ( ), - 'reference' => '6f990c19f91729de8b31e639d6e204ea59f19cf3', + 'reference' => 'a395af46999a12006213c0c8346c9445eb31640c', ), 'ralouphie/getallheaders' => array ( @@ -2290,12 +2389,12 @@ ), 'simplesamlphp/simplesamlphp-module-authorize' => array ( - 'pretty_version' => 'v0.9.2', - 'version' => '0.9.2.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => 'c2607a5252ee1256b50ce7795e35513b116998d4', + 'reference' => '0593bfcb84fca9d9133f415246ab8ca51b412c92', ), 'simplesamlphp/simplesamlphp-module-authtwitter' => array ( @@ -2371,12 +2470,12 @@ ), 'simplesamlphp/simplesamlphp-module-discopower' => array ( - 'pretty_version' => 'v0.9.1', - 'version' => '0.9.1.0', + 'pretty_version' => 'v0.9.3', + 'version' => '0.9.3.0', 'aliases' => array ( ), - 'reference' => '006c0617610f1bae11cf4d17e8ce4c509239a60e', + 'reference' => 'c892926e8186d0a2c638f7032dfc30540c1f92fb', ), 'simplesamlphp/simplesamlphp-module-exampleattributeserver' => array ( @@ -2560,12 +2659,12 @@ ), 'symfony/config' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '2c4c7827a7e143f5cf375666641b0f448eab8802', + 'reference' => '98606c6fa1a8f55ff964ccdd704275bf5b9f71b3', ), 'symfony/console' => array ( @@ -2605,21 +2704,21 @@ ), 'symfony/filesystem' => array ( - 'pretty_version' => 'v5.2.3', - 'version' => '5.2.3.0', + 'pretty_version' => 'v5.2.4', + 'version' => '5.2.4.0', 'aliases' => array ( ), - 'reference' => '262d033b57c73e8b59cd6e68a45c528318b15038', + 'reference' => '710d364200997a5afde34d9fe57bd52f3cc1e108', ), 'symfony/finder' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), - 'reference' => '25d79cfccfc12e84e7a63a248c3f0720fdd92db6', + 'reference' => '2543795ab1570df588b9bbd31e1a2bd7037b94f6', ), 'symfony/http-foundation' => array ( @@ -2704,8 +2803,8 @@ ), 'symfony/polyfill-php80' => array ( - 'pretty_version' => 'v1.22.0', - 'version' => '1.22.0.0', + 'pretty_version' => 'v1.22.1', + 'version' => '1.22.1.0', 'aliases' => array ( ), @@ -2776,8 +2875,8 @@ ), 'symfony/var-dumper' => array ( - 'pretty_version' => 'v4.4.19', - 'version' => '4.4.19.0', + 'pretty_version' => 'v4.4.20', + 'version' => '4.4.20.0', 'aliases' => array ( ), @@ -2830,12 +2929,12 @@ ), 'webmozart/assert' => array ( - 'pretty_version' => '1.9.1', - 'version' => '1.9.1.0', + 'pretty_version' => '1.5.0', + 'version' => '1.5.0.0', 'aliases' => array ( ), - 'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389', + 'reference' => '88e6d84706d09a236046d686bbea96f07b3a34f4', ), 'webmozart/path-util' => array ( @@ -2857,12 +2956,12 @@ ), 'wikimedia/composer-merge-plugin' => array ( - 'pretty_version' => 'dev-feature/composer-v2', - 'version' => 'dev-feature/composer-v2', + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', 'aliases' => array ( ), - 'reference' => '3f4c1e914be5ba7b9e84434a69f3bb835bff2ac1', + 'reference' => '8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912', ), 'zendframework/zend-diactoros' => array ( diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index a28bc33a8c0d62897d38392f6e9b3cb362898ef8..a8b98d5ceb1e2651c6b52984bfd44cfb97347d10 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -5,36 +5,22 @@ $issues = array(); if (!(PHP_VERSION_ID >= 70205)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; -} - -$missingExtensions = array(); -extension_loaded('ctype') || $missingExtensions[] = 'ctype'; -extension_loaded('curl') || $missingExtensions[] = 'curl'; -extension_loaded('date') || $missingExtensions[] = 'date'; -extension_loaded('dom') || $missingExtensions[] = 'dom'; -extension_loaded('filter') || $missingExtensions[] = 'filter'; -extension_loaded('gd') || $missingExtensions[] = 'gd'; -extension_loaded('hash') || $missingExtensions[] = 'hash'; -extension_loaded('json') || $missingExtensions[] = 'json'; -extension_loaded('libxml') || $missingExtensions[] = 'libxml'; -extension_loaded('mbstring') || $missingExtensions[] = 'mbstring'; -extension_loaded('openssl') || $missingExtensions[] = 'openssl'; -extension_loaded('pcre') || $missingExtensions[] = 'pcre'; -extension_loaded('pdo') || $missingExtensions[] = 'pdo'; -extension_loaded('session') || $missingExtensions[] = 'session'; -extension_loaded('simplexml') || $missingExtensions[] = 'simplexml'; -extension_loaded('spl') || $missingExtensions[] = 'spl'; -extension_loaded('tokenizer') || $missingExtensions[] = 'tokenizer'; -extension_loaded('xml') || $missingExtensions[] = 'xml'; -extension_loaded('xmlwriter') || $missingExtensions[] = 'xmlwriter'; -extension_loaded('zlib') || $missingExtensions[] = 'zlib'; - -if ($missingExtensions) { - $issues[] = 'Your Composer dependencies require the following PHP extensions to be installed: ' . implode(', ', $missingExtensions); + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; } if ($issues) { - echo 'Composer detected issues in your platform:' . "\n\n" . implode("\n", $issues); - exit(104); + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); } diff --git a/vendor/drush/drush/commands/core/views.d8.drush.inc b/vendor/drush/drush/commands/core/views.d8.drush.inc index 601905822cbaae036d03078e65b5651c081facc1..009a1a165994d33d1e4f3b2e91b934b973829513 100644 --- a/vendor/drush/drush/commands/core/views.d8.drush.inc +++ b/vendor/drush/drush/commands/core/views.d8.drush.inc @@ -68,7 +68,7 @@ function views_drush_command() { 'outputformat' => array( 'default' => 'table', 'pipe-format' => 'list', - 'field-default' => array('name', 'label', 'description', 'status', 'tag'), + 'fields-default' => array('name', 'label', 'description', 'status', 'tag'), 'field-labels' => array('name' => 'Machine Name', 'label' => 'Name', 'description' => 'Description', 'status' => 'Status', 'tag' => 'Tag'), 'output-data-type' => 'format-table', ), diff --git a/vendor/drush/drush/commands/pm/pm.drush.inc b/vendor/drush/drush/commands/pm/pm.drush.inc index 901cf53592bd02ad60a841e09f99e9d2dda26091..dc5e6f6252a2ee93dab7bc877c347495dc502bf1 100644 --- a/vendor/drush/drush/commands/pm/pm.drush.inc +++ b/vendor/drush/drush/commands/pm/pm.drush.inc @@ -314,7 +314,8 @@ function pm_drush_command() { 'outputformat' => array( 'default' => 'table', 'pipe-format' => 'list', - 'field-labels' => array('package' => 'Package', 'name' => 'Name', 'type' => 'Type', 'status' => 'Status', 'version' => 'Version'), + 'fields-default' => array('package', 'name', 'type', 'status', 'version'), + 'field-labels' => array('package' => 'Package', 'project' => 'Project', 'name' => 'Name', 'display_name' => 'Display Name', 'type' => 'Type', 'status' => 'Status', 'version' => 'Version', 'path' => 'Path'), 'output-data-type' => 'format-table', ), 'aliases' => array('pml', 'pm:list'), @@ -946,9 +947,12 @@ function drush_pm_list() { } $row['package'] = $extension->info['package']; + $row['project'] = isset($extension->info['project']) ? $extension->info['project'] : ''; + $row['display_name'] = $extension->label; $row['name'] = $extension->label; $row['type'] = ucfirst(drush_extension_get_type($extension)); $row['status'] = ucfirst($status); + $row['path'] = drush_extension_get_path($extension); // Suppress notice when version is not present. $row['version'] = @$extension->info['version']; diff --git a/vendor/drush/drush/drush.info b/vendor/drush/drush/drush.info index 180dfc53f6afe0c227dcd791bbf1f27befece0d5..12ea634def46518769bf199a2a0bf6261e6d439a 100644 --- a/vendor/drush/drush/drush.info +++ b/vendor/drush/drush/drush.info @@ -1 +1 @@ -drush_version=8.4.6 +drush_version=8.4.8 diff --git a/vendor/drush/drush/includes/drush.inc b/vendor/drush/drush/includes/drush.inc index 17ca2b6c0a97db8ebce079b8ef13110984d27876..7c43e774148f665af20f5269456804009430c57b 100644 --- a/vendor/drush/drush/includes/drush.inc +++ b/vendor/drush/drush/includes/drush.inc @@ -1454,6 +1454,9 @@ function _drush_log_drupal_messages() { // This is a special case. PHP logs sql errors as 'User Warnings', not errors. drush_set_error('DRUSH_DRUPAL_ERROR_MESSAGE', preg_replace('/^user warning: /i', '', $error)); } + elseif (preg_match('/^deprecated function:/i', $error)) { + drush_log(preg_replace('/^deprecated function: /i', '', $error), LogLevel::WARNING); + } else { drush_set_error('DRUSH_DRUPAL_ERROR_MESSAGE', $error); } diff --git a/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php b/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php index 51d591ed74366ecfde691e6ca555b3525a579705..f41bb10702be9fe488d4cfbcc8a313d5b96da09e 100644 --- a/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php +++ b/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php @@ -390,7 +390,7 @@ function bootstrap_drupal_site_validate_settings_present() { $conf_path = drush_bootstrap_value('conf_path', $this->conf_path(TRUE, TRUE)); $conf_file = "$conf_path/settings.php"; - if (!file_exists($conf_file) && !getenv('PRESSFLOW_SETTINGS')) { + if (!file_exists($conf_file) && !isset($_SERVER['PRESSFLOW_SETTINGS'])) { return drush_bootstrap_error('DRUPAL_SITE_SETTINGS_NOT_FOUND', dt("Could not find a Drupal settings.php file at !file.", array('!file' => $conf_file))); } diff --git a/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php b/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php index 2a77c38ce1e5b5295a6281794952d3b20678fc5d..80def093f8f77eb6a6eab53fa0e26d2dbe613418 100644 --- a/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php +++ b/vendor/drush/drush/tests/pmEnDisUnListInfoTest.php @@ -66,6 +66,14 @@ public function testEnDisUnList() { $this->assertEquals($output->{$key}, $value); } + // Check output fields in pm-list + $this->drush('pm-list', [], $options + ['format' => 'json']); + $extensionProperties = (array)$this->getOutputFromJSON(); + $moduleProperties = (array)$extensionProperties[$moduleToTest]; + $this->assertEquals($moduleToTest, $moduleProperties['project']); + $this->assertEquals('Enabled', $moduleProperties['status']); + $this->assertEquals('Module', $moduleProperties['type']); + // Test pm-projectinfo shows some project info. $this->drush('pm-projectinfo', array($moduleToTest), $options); $output = $this->getOutputFromJSON($moduleToTest); diff --git a/vendor/gettext/gettext/CHANGELOG.md b/vendor/gettext/gettext/CHANGELOG.md index 054e8d8235a6b85f387754b94e30ceafef4272d8..e06d8117181a3aa33d0c8636a792305993fc623c 100644 --- a/vendor/gettext/gettext/CHANGELOG.md +++ b/vendor/gettext/gettext/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). Previous releases are documented in [github releases](https://github.com/oscarotero/Gettext/releases) +## [4.8.4] - 2021-03-10 +### Fixed +- PHP 8 compatibilty [#266] + ## [4.8.3] - 2020-11-18 ### Fixed - Blade extractor for Laravel8/Jetstream [#261] @@ -160,7 +164,9 @@ Previous releases are documented in [github releases](https://github.com/oscarot [#238]: https://github.com/oscarotero/Gettext/issues/238 [#242]: https://github.com/oscarotero/Gettext/issues/242 [#261]: https://github.com/oscarotero/Gettext/issues/261 +[#266]: https://github.com/oscarotero/Gettext/issues/266 +[4.8.4]: https://github.com/oscarotero/Gettext/compare/v4.8.3...v4.8.4 [4.8.3]: https://github.com/oscarotero/Gettext/compare/v4.8.2...v4.8.3 [4.8.2]: https://github.com/oscarotero/Gettext/compare/v4.8.1...v4.8.2 [4.8.1]: https://github.com/oscarotero/Gettext/compare/v4.8.0...v4.8.1 diff --git a/vendor/gettext/gettext/src/Utils/FunctionsScanner.php b/vendor/gettext/gettext/src/Utils/FunctionsScanner.php index 503c090f3ae9811f1be27bd0ec417ec5cfa7f2f5..6d3336d836527005920a67c34b9d658f44c80542 100644 --- a/vendor/gettext/gettext/src/Utils/FunctionsScanner.php +++ b/vendor/gettext/gettext/src/Utils/FunctionsScanner.php @@ -30,7 +30,7 @@ public function saveGettextFunctions($translations, array $options) $translations = is_array($translations) ? $translations : [$translations]; /** @var Translations[] $translationByDomain [domain => translations, ..] */ - $translationByDomain = array_reduce($translations, function (&$carry, Translations $translations) { + $translationByDomain = array_reduce($translations, function ($carry, Translations $translations) { $carry[$translations->getDomain()] = $translations; return $carry; }, []); diff --git a/vendor/phpmailer/phpmailer/README.md b/vendor/phpmailer/phpmailer/README.md index d9cbbaaf971deae3080742e3c5a4b3d32f85d604..45da2ec3228c7cd94017a546ddbae125550a019c 100644 --- a/vendor/phpmailer/phpmailer/README.md +++ b/vendor/phpmailer/phpmailer/README.md @@ -1,46 +1,45 @@  -# PHPMailer - A full-featured email creation and transfer class for PHP +# PHPMailer – A full-featured email creation and transfer class for PHP -Build status: [](https://travis-ci.org/PHPMailer/PHPMailer) -[](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/) -[](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/) +[](https://github.com/PHPMailer/PHPMailer/actions) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://phpmailer.github.io/PHPMailer/) -[](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](https://packagist.org/packages/phpmailer/phpmailer) [](http://phpmailer.github.io/PHPMailer/) - -## Class Features +## Features - Probably the world's most popular code for sending email from PHP! - Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more -- Integrated SMTP support - send without a local mail server +- Integrated SMTP support – send without a local mail server - Send emails with multiple To, CC, BCC and Reply-to addresses - Multipart/alternative emails for mail clients that do not read HTML email - Add attachments, including inline - Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings -- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SSL and SMTP+STARTTLS transports +- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SMTPS and SMTP+STARTTLS transports - Validates email addresses automatically -- Protect against header injection attacks +- Protects against header injection attacks - Error messages in over 50 languages! - DKIM and S/MIME signing support -- Compatible with PHP 5.5 and later +- Compatible with PHP 5.5 and later, including PHP 8.0 - Namespaced to prevent name clashes - Much more! ## Why you might need it -Many PHP developers need to send email from their code. The only PHP function that supports this is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. +Many PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. + +Formatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong, if not unsafe! -Formatting email correctly is surprisingly difficult. There are myriad overlapping RFCs, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong! -*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/), [Zend/Mail](https://zendframework.github.io/zend-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. +The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the `mail()` function should be avoided when possible; it's both faster and [safer](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) to use SMTP to localhost. -The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server. +*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that +you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/) +, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. ## License -This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read LICENSE for information on the software availability and distribution. +This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. ## Installation & loading PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: ```json -"phpmailer/phpmailer": "~6.1" +"phpmailer/phpmailer": "^6.2" ``` or run @@ -53,7 +52,8 @@ Note that the `vendor` folder and the `vendor/autoload.php` script are generated If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`. -Alternatively, if you're not using Composer, copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: +Alternatively, if you're not using Composer, you +can [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: ```php <?php @@ -65,60 +65,58 @@ require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/SMTP.php'; ``` -If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. - -If you don't speak git or just want a tarball, click the 'zip' button on the right of the project page in GitHub, though note that docs and examples are not included in the tarball. +If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally. ## Legacy versions -PHPMailer 5.2 (which is compatible with PHP 5.0 - 7.0) is no longer being supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases. +PHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases. ### Upgrading from 5.2 The biggest changes are that source files are now in the `src/` folder, and PHPMailer now declares the namespace `PHPMailer\PHPMailer`. This has several important effects – [read the upgrade guide](https://github.com/PHPMailer/PHPMailer/tree/master/UPGRADING.md) for more details. ### Minimal installation -While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP, you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer! +While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP (*very* unlikely!), you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer! ## A Simple Example ```php <?php -// Import PHPMailer classes into the global namespace -// These must be at the top of your script, not inside a function +//Import PHPMailer classes into the global namespace +//These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; -// Load Composer's autoloader +//Load Composer's autoloader require 'vendor/autoload.php'; -// Instantiation and passing `true` enables exceptions +//Instantiation and passing `true` enables exceptions $mail = new PHPMailer(true); try { //Server settings - $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output - $mail->isSMTP(); // Send using SMTP - $mail->Host = 'smtp1.example.com'; // Set the SMTP server to send through - $mail->SMTPAuth = true; // Enable SMTP authentication - $mail->Username = 'user@example.com'; // SMTP username - $mail->Password = 'secret'; // SMTP password - $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged - $mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above + $mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output + $mail->isSMTP(); //Send using SMTP + $mail->Host = 'smtp.example.com'; //Set the SMTP server to send through + $mail->SMTPAuth = true; //Enable SMTP authentication + $mail->Username = 'user@example.com'; //SMTP username + $mail->Password = 'secret'; //SMTP password + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged + $mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above //Recipients $mail->setFrom('from@example.com', 'Mailer'); - $mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient - $mail->addAddress('ellen@example.com'); // Name is optional + $mail->addAddress('joe@example.net', 'Joe User'); //Add a recipient + $mail->addAddress('ellen@example.com'); //Name is optional $mail->addReplyTo('info@example.com', 'Information'); $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); - // Attachments - $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments - $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name + //Attachments + $mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments + $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name - // Content - $mail->isHTML(true); // Set email format to HTML + //Content + $mail->isHTML(true); //Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; @@ -130,7 +128,7 @@ try { } ``` -You'll find plenty more to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. +You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through gmail, building contact forms, sending to mailing lists, and more. If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. @@ -140,43 +138,43 @@ That's it. You should now be ready to use PHPMailer! PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: ```php -// To load the French version +//To load the French version $mail->setLanguage('fr', '/optional/path/to/language/directory/'); ``` -We welcome corrections and new languages - if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. +We welcome corrections and new languages – if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. ## Documentation -Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, this should be the first place you look as it's the most frequently updated. +Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated. Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps). -Note that in order to reduce PHPMailer's deployed code footprint, the examples are no longer included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly. +To reduce PHPMailer's deployed code footprint, examples are not included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly. -Complete generated API documentation is [available online](http://phpmailer.github.io/PHPMailer/). +Complete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/). -You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good source of how to do various operations such as encryption. +You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption. If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). ## Tests -There is a PHPUnit test script in the [test](https://github.com/PHPMailer/PHPMailer/tree/master/test/) folder. PHPMailer uses PHPUnit 4.8 - we would use 5.x but we need to run on PHP 5.5. +[PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions. -Build status: [](https://travis-ci.org/PHPMailer/PHPMailer) +[](https://github.com/PHPMailer/PHPMailer/actions) If this isn't passing, is there something you can do to help? ## Security Please disclose any vulnerabilities found responsibly – report security issues to the maintainers privately. -See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for details on security issues. +See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). ## Contributing Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). We're particularly interested in fixing edge-cases, expanding test coverage and updating translations. -If you found a mistake in the docs, or want to add something, go ahead and amend the wiki - anyone can edit it. +If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it. If you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone: @@ -187,27 +185,28 @@ git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained. ## Sponsorship -Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), a powerful email marketing system. +Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system. + +<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="550" alt="Smartmessages.net privacy-first email marketing logo"></a> -<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="250" height="28" alt="Smartmessages email marketing"></a> -Other contributions are gladly received, whether in beer 🍺, T-shirts 👕, Amazon wishlist raids, or cold, hard cash 💰. If you'd like to donate to say "thank you" to maintainers or contributors, please contact them through individual profile pages via [the contributors page](https://github.com/PHPMailer/PHPMailer/graphs/contributors). +Contributions are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say "thank you" to PHPMailer's maintainers and contributors – just click the "Sponsor" button [on the project page](https://github.com/PHPMailer/PHPMailer). ## Changelog See [changelog](changelog.md). ## History - PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/). -- Marcus Bointon (coolbru on SF) and Andy Prevost (codeworxtech) took over the project in 2004. +- [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004. - Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski. -- Marcus created his fork on [GitHub](https://github.com/Synchro/PHPMailer) in 2008. +- Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008. - Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013. -- PHPMailer moves to the [PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013. +- PHPMailer moves to [the PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013. ### What's changed since moving from SourceForge? - Official successor to the SourceForge and Google Code projects. - Test suite. -- Continuous integration with Travis-CI. +- Continuous integration with Github Actions. - Composer support. - Public development. - Additional languages and language strings. diff --git a/vendor/phpmailer/phpmailer/VERSION b/vendor/phpmailer/phpmailer/VERSION index 4ac4fded49f189433028e133612a444d89a5a089..e7e42a4b5854af6c7096aba8be7e7f9a32a40a7a 100644 --- a/vendor/phpmailer/phpmailer/VERSION +++ b/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.2.0 \ No newline at end of file +6.3.0 \ No newline at end of file diff --git a/vendor/phpmailer/phpmailer/get_oauth_token.php b/vendor/phpmailer/phpmailer/get_oauth_token.php index 560d364584e09df1b5795b8e1183d774b399e884..ad8c5a62179436a58aa888716810e6bfdaa6cd5e 100644 --- a/vendor/phpmailer/phpmailer/get_oauth_token.php +++ b/vendor/phpmailer/phpmailer/get_oauth_token.php @@ -38,11 +38,11 @@ * Plenty to choose from here: * @see http://oauth2-client.thephpleague.com/providers/thirdparty/ */ -// @see https://github.com/thephpleague/oauth2-google +//@see https://github.com/thephpleague/oauth2-google use League\OAuth2\Client\Provider\Google; -// @see https://packagist.org/packages/hayageek/oauth2-yahoo +//@see https://packagist.org/packages/hayageek/oauth2-yahoo use Hayageek\OAuth2\Client\Provider\Yahoo; -// @see https://github.com/stevenmaguire/oauth2-microsoft +//@see https://github.com/stevenmaguire/oauth2-microsoft use Stevenmaguire\OAuth2\Client\Provider\Microsoft; if (!isset($_GET['code']) && !isset($_GET['provider'])) { @@ -121,26 +121,26 @@ } if (!isset($_GET['code'])) { - // If we don't have an authorization code then get one + //If we don't have an authorization code then get one $authUrl = $provider->getAuthorizationUrl($options); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authUrl); exit; -// Check given state against previously stored one to mitigate CSRF attack + //Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); unset($_SESSION['provider']); exit('Invalid state'); } else { unset($_SESSION['provider']); - // Try to get an access token (using the authorization code grant) + //Try to get an access token (using the authorization code grant) $token = $provider->getAccessToken( 'authorization_code', [ 'code' => $_GET['code'] ] ); - // Use this to interact with an API on the users behalf - // Use this to get a new access token if the old one expires + //Use this to interact with an API on the users behalf + //Use this to get a new access token if the old one expires echo 'Refresh Token: ', $token->getRefreshToken(); } diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php index 55bdd9c89e4205dd089d0c80e4acc9334947083d..e770a1a265f8e6f1c775e68e07ba3f1c1f9b3271 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php @@ -16,6 +16,8 @@ $PHPMAILER_LANG['from_failed'] = 'Následující adresa odesílatele je nesprávná: '; $PHPMAILER_LANG['instantiate'] = 'Nelze vytvořit instanci emailové funkce.'; $PHPMAILER_LANG['invalid_address'] = 'Neplatná adresa: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Záznam hostitele je nesprávný: '; +$PHPMAILER_LANG['invalid_host'] = 'Hostitel je nesprávný: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.'; $PHPMAILER_LANG['provide_address'] = 'Musíte zadat alespoň jednu emailovou adresu příjemce.'; $PHPMAILER_LANG['recipients_failed'] = 'Chyba SMTP: Následující adresy příjemců nejsou správně: '; diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php index a1cfb2889a8af98d41ed3abdd736fd7a837c59a4..028f5bc49693b7339371b1350a3db9aa001452ad 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php @@ -18,6 +18,8 @@ $PHPMAILER_LANG['from_failed'] = 'Následujúca adresa From je nesprávna: '; $PHPMAILER_LANG['instantiate'] = 'Nedá sa vytvoriť inštancia emailovej funkcie.'; $PHPMAILER_LANG['invalid_address'] = 'Neodoslané, emailová adresa je nesprávna: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Záznam hostiteľa je nesprávny: '; +$PHPMAILER_LANG['invalid_host'] = 'Hostiteľ je nesprávny: '; $PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.'; $PHPMAILER_LANG['provide_address'] = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Adresy príjemcov niesu správne '; diff --git a/vendor/phpmailer/phpmailer/phpunit.xml.dist b/vendor/phpmailer/phpmailer/phpunit.xml.dist new file mode 100644 index 0000000000000000000000000000000000000000..c68df9652c3768181ce192c6d74e5bc949f00ed5 --- /dev/null +++ b/vendor/phpmailer/phpmailer/phpunit.xml.dist @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<phpunit + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.5/phpunit.xsd" + backupGlobals="true" + bootstrap="vendor/autoload.php" + verbose="true" + colors="true" + forceCoversAnnotation="false" + > + <testsuites> + <testsuite name="PHPMailerTests"> + <directory>./test/</directory> + </testsuite> + </testsuites> + <listeners> + <listener class="PHPMailer\Test\DebugLogTestListener" /> + </listeners> + <groups> + <exclude> + <group>languages</group> + <group>pop3</group> + </exclude> + </groups> + <filter> + <whitelist addUncoveredFilesFromWhitelist="true"> + <directory suffix=".php">./src</directory> + </whitelist> + </filter> + <logging> + <log type="coverage-text" target="php://stdout" showUncoveredFiles="true"/> + <log type="coverage-clover" target="build/logs/clover.xml"/> + <log type="junit" target="build/logs/junit.xml"/> + </logging> +</phpunit> diff --git a/vendor/phpmailer/phpmailer/src/OAuth.php b/vendor/phpmailer/phpmailer/src/OAuth.php index 07fde4c8158420c4b293f8388c71e64ff6b49b10..c93d0be1b554e2dbdd16fe5c2fa38d9581d0b5e7 100644 --- a/vendor/phpmailer/phpmailer/src/OAuth.php +++ b/vendor/phpmailer/phpmailer/src/OAuth.php @@ -123,7 +123,7 @@ protected function getToken() */ public function getOauth64() { - // Get a new token if it's not available or has expired + //Get a new token if it's not available or has expired if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { $this->oauthToken = $this->getToken(); } diff --git a/vendor/phpmailer/phpmailer/src/PHPMailer.php b/vendor/phpmailer/phpmailer/src/PHPMailer.php index c8fc1a8243185affff6177b4ae8ad966231d3a95..62553fd466e7c734017270c90177c2301b72840d 100644 --- a/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -748,7 +748,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.2.0'; + const VERSION = '6.3.0'; /** * Error severity: message only, continue processing. @@ -862,18 +862,25 @@ private function mailPassthru($to, $subject, $body, $header, $params) $subject = $this->encodeHeader($this->secureHeader($subject)); } //Calling mail() with null params breaks + $this->edebug('Sending with mail()'); + $this->edebug('Sendmail path: ' . ini_get('sendmail_path')); + $this->edebug("Envelope sender: {$this->Sender}"); + $this->edebug("To: {$to}"); + $this->edebug("Subject: {$subject}"); + $this->edebug("Headers: {$header}"); if (!$this->UseSendmailOptions || null === $params) { $result = @mail($to, $subject, $body, $header); } else { + $this->edebug("Additional params: {$params}"); $result = @mail($to, $subject, $body, $header, $params); } - + $this->edebug('Result: ' . ($result ? 'true' : 'false')); return $result; } /** - * Output debugging info via user-defined method. - * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug). + * Output debugging info via a user-defined method. + * Only generates output if debug output is enabled. * * @see PHPMailer::$Debugoutput * @see PHPMailer::$SMTPDebug @@ -1070,7 +1077,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim $pos = strrpos($address, '@'); if (false === $pos) { - // At-sign is missing. + //At-sign is missing. $error_message = sprintf( '%s (%s): %s', $this->lang('invalid_address'), @@ -1086,7 +1093,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) return false; } $params = [$kind, $address, $name]; - // Enqueue addresses with IDN until we know the PHPMailer::$CharSet. + //Enqueue addresses with IDN until we know the PHPMailer::$CharSet. if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { if ('Reply-To' !== $kind) { if (!array_key_exists($address, $this->RecipientsQueue)) { @@ -1103,7 +1110,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) return false; } - // Immediately add standard addresses without IDN. + //Immediately add standard addresses without IDN. return call_user_func_array([$this, 'addAnAddress'], $params); } @@ -1191,6 +1198,11 @@ public static function parseAddresses($addrstr, $useimap = true) $address->mailbox . '@' . $address->host ) ) { + //Decode the name part if it's present and encoded + if (property_exists($address, 'personal') && preg_match('/^=\?.*\?=$/', $address->personal)) { + $address->personal = mb_decode_mimeheader($address->personal); + } + $addresses[] = [ 'name' => (property_exists($address, 'personal') ? $address->personal : ''), 'address' => $address->mailbox . '@' . $address->host, @@ -1214,9 +1226,15 @@ public static function parseAddresses($addrstr, $useimap = true) } else { list($name, $email) = explode('<', $address); $email = trim(str_replace('>', '', $email)); + $name = trim($name); if (static::validateAddress($email)) { + //If this name is encoded, decode it + if (preg_match('/^=\?.*\?=$/', $name)) { + $name = mb_decode_mimeheader($name); + } $addresses[] = [ - 'name' => trim(str_replace(['"', "'"], '', $name)), + //Remove any surrounding quotes and spaces from the name + 'name' => trim($name, '\'" '), 'address' => $email, ]; } @@ -1242,7 +1260,7 @@ public function setFrom($address, $name = '', $auto = true) { $address = trim($address); $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - // Don't validate now addresses with IDN. Will be done in send(). + //Don't validate now addresses with IDN. Will be done in send(). $pos = strrpos($address, '@'); if ( (false === $pos) @@ -1395,7 +1413,7 @@ public static function idnSupported() */ public function punyencodeAddress($address) { - // Verify we have required functions, CharSet, and at-sign. + //Verify we have required functions, CharSet, and at-sign. $pos = strrpos($address, '@'); if ( !empty($this->CharSet) && @@ -1403,16 +1421,20 @@ public function punyencodeAddress($address) static::idnSupported() ) { $domain = substr($address, ++$pos); - // Verify CharSet string is a valid one, and domain properly encoded in this CharSet. + //Verify CharSet string is a valid one, and domain properly encoded in this CharSet. if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) { - $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet); + //Convert the domain from whatever charset it's in to UTF-8 + $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet); //Ignore IDE complaints about this line - method signature changed in PHP 5.4 $errorcode = 0; if (defined('INTL_IDNA_VARIANT_UTS46')) { - $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_UTS46); + //Use the current punycode standard (appeared in PHP 7.2) + $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_UTS46); } elseif (defined('INTL_IDNA_VARIANT_2003')) { - $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_2003); + //Fall back to this old, deprecated/removed encoding + $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003); } else { + //Fall back to a default we don't know about $punycode = idn_to_ascii($domain, $errorcode); } if (false !== $punycode) { @@ -1462,7 +1484,7 @@ public function preSend() { if ( 'smtp' === $this->Mailer - || ('mail' === $this->Mailer && (PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) + || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) ) { //SMTP mandates RFC-compliant line endings //and it's also used with mail() on Windows @@ -1474,8 +1496,8 @@ public function preSend() //Check for buggy PHP versions that add a header with an incorrect line break if ( 'mail' === $this->Mailer - && ((PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 70017) - || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70103)) + && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017) + || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103)) && ini_get('mail.add_x_header') === '1' && stripos(PHP_OS, 'WIN') === 0 ) { @@ -1488,10 +1510,10 @@ public function preSend() } try { - $this->error_count = 0; // Reset errors + $this->error_count = 0; //Reset errors $this->mailHeader = ''; - // Dequeue recipient and Reply-To addresses with IDN + //Dequeue recipient and Reply-To addresses with IDN foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { $params[1] = $this->punyencodeAddress($params[1]); call_user_func_array([$this, 'addAnAddress'], $params); @@ -1500,7 +1522,7 @@ public function preSend() throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); } - // Validate From, Sender, and ConfirmReadingTo addresses + //Validate From, Sender, and ConfirmReadingTo addresses foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { $this->$address_kind = trim($this->$address_kind); if (empty($this->$address_kind)) { @@ -1524,29 +1546,29 @@ public function preSend() } } - // Set whether the message is multipart/alternative + //Set whether the message is multipart/alternative if ($this->alternativeExists()) { $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE; } $this->setMessageType(); - // Refuse to send an empty message unless we are specifically allowing it + //Refuse to send an empty message unless we are specifically allowing it if (!$this->AllowEmpty && empty($this->Body)) { throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); } //Trim subject consistently $this->Subject = trim($this->Subject); - // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) + //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) $this->MIMEHeader = ''; $this->MIMEBody = $this->createBody(); - // createBody may have added some headers, so retain them + //createBody may have added some headers, so retain them $tempheaders = $this->MIMEHeader; $this->MIMEHeader = $this->createHeader(); $this->MIMEHeader .= $tempheaders; - // To capture the complete message when using mail(), create - // an extra header list which createHeader() doesn't fold in + //To capture the complete message when using mail(), create + //an extra header list which createHeader() doesn't fold in if ('mail' === $this->Mailer) { if (count($this->to) > 0) { $this->mailHeader .= $this->addrAppend('To', $this->to); @@ -1559,7 +1581,7 @@ public function preSend() ); } - // Sign with DKIM if enabled + //Sign with DKIM if enabled if ( !empty($this->DKIM_domain) && !empty($this->DKIM_selector) @@ -1600,7 +1622,7 @@ public function preSend() public function postSend() { try { - // Choose the mailer and send through it + //Choose the mailer and send through it switch ($this->Mailer) { case 'sendmail': case 'qmail': @@ -1645,22 +1667,45 @@ public function postSend() */ protected function sendmailSend($header, $body) { + if ($this->Mailer === 'qmail') { + $this->edebug('Sending with qmail'); + } else { + $this->edebug('Sending with sendmail'); + } $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; - - // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (!empty($this->Sender) && self::isShellSafe($this->Sender)) { - if ('qmail' === $this->Mailer) { + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + //A space after `-f` is optional, but there is a long history of its presence + //causing problems, so we don't use one + //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html + //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Example problem: https://www.drupal.org/node/1057954 + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if ('' === $this->Sender) { + $this->Sender = $this->From; + } + if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) { + //PHP config has a sender address we can use + $this->Sender = ini_get('sendmail_from'); + } + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + //But sendmail requires this param, so fail without it + if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { + if ($this->Mailer === 'qmail') { $sendmailFmt = '%s -f%s'; } else { $sendmailFmt = '%s -oi -f%s -t'; } - } elseif ('qmail' === $this->Mailer) { - $sendmailFmt = '%s'; } else { - $sendmailFmt = '%s -oi -t'; + $this->edebug('Sender address unusable or missing: ' . $this->Sender); + return false; } $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); + $this->edebug('Sendmail path: ' . $this->Sendmail); + $this->edebug('Sendmail command: ' . $sendmail); + $this->edebug('Envelope sender: ' . $this->Sender); + $this->edebug("Headers: {$header}"); if ($this->SingleTo) { foreach ($this->SingleToArray as $toAddr) { @@ -1668,6 +1713,7 @@ protected function sendmailSend($header, $body) if (!$mail) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } + $this->edebug("To: {$toAddr}"); fwrite($mail, 'To: ' . $toAddr . "\n"); fwrite($mail, $header); fwrite($mail, $body); @@ -1682,6 +1728,7 @@ protected function sendmailSend($header, $body) $this->From, [] ); + $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); if (0 !== $result) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } @@ -1704,6 +1751,7 @@ protected function sendmailSend($header, $body) $this->From, [] ); + $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); if (0 !== $result) { throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } @@ -1724,7 +1772,7 @@ protected function sendmailSend($header, $body) */ protected static function isShellSafe($string) { - // Future-proof + //Future-proof if ( escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) @@ -1737,9 +1785,9 @@ protected static function isShellSafe($string) for ($i = 0; $i < $length; ++$i) { $c = $string[$i]; - // All other characters have a special meaning in at least one common shell, including = and +. - // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. - // Note that this does permit non-Latin alphanumeric characters based on the current locale. + //All other characters have a special meaning in at least one common shell, including = and +. + //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. + //Note that this does permit non-Latin alphanumeric characters based on the current locale. if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { return false; } @@ -1809,11 +1857,18 @@ protected function mailSend($header, $body) //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html //Example problem: https://www.drupal.org/node/1057954 - // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { - $params = sprintf('-f%s', $this->Sender); + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if ('' === $this->Sender) { + $this->Sender = $this->From; + } + if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) { + //PHP config has a sender address we can use + $this->Sender = ini_get('sendmail_from'); } if (!empty($this->Sender) && static::validateAddress($this->Sender)) { + if (self::isShellSafe($this->Sender)) { + $params = sprintf('-f%s', $this->Sender); + } $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender); } @@ -1899,7 +1954,7 @@ protected function smtpSend($header, $body) } $callbacks = []; - // Attempt to send to all recipients + //Attempt to send to all recipients foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { foreach ($togroup as $to) { if (!$this->smtp->recipient($to[0], $this->dsn)) { @@ -1914,7 +1969,7 @@ protected function smtpSend($header, $body) } } - // Only send the DATA command if we have viable recipients + //Only send the DATA command if we have viable recipients if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); } @@ -1976,7 +2031,7 @@ public function smtpConnect($options = null) $options = $this->SMTPOptions; } - // Already connected? + //Already connected? if ($this->smtp->connected()) { return true; } @@ -1998,14 +2053,14 @@ public function smtpConnect($options = null) ) ) { $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); - // Not a valid host entry + //Not a valid host entry continue; } - // $hostinfo[1]: optional ssl or tls prefix - // $hostinfo[2]: the hostname - // $hostinfo[3]: optional port number - // The host string prefix can temporarily override the current setting for SMTPSecure - // If it's not specified, the default value is used + //$hostinfo[1]: optional ssl or tls prefix + //$hostinfo[2]: the hostname + //$hostinfo[3]: optional port number + //The host string prefix can temporarily override the current setting for SMTPSecure + //If it's not specified, the default value is used //Check the host name is a valid name or IP address before trying to use it if (!static::isValidHost($hostinfo[2])) { @@ -2017,11 +2072,11 @@ public function smtpConnect($options = null) $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { $prefix = 'ssl://'; - $tls = false; // Can't have SSL and TLS at the same time + $tls = false; //Can't have SSL and TLS at the same time $secure = static::ENCRYPTION_SMTPS; } elseif ('tls' === $hostinfo[1]) { $tls = true; - // tls doesn't use a prefix + //TLS doesn't use a prefix $secure = static::ENCRYPTION_STARTTLS; } //Do we need the OpenSSL extension? @@ -2051,10 +2106,10 @@ public function smtpConnect($options = null) } $this->smtp->hello($hello); //Automatically enable TLS encryption if: - // * it's not disabled - // * we have openssl extension - // * we are not already using SSL - // * the server offers STARTTLS + //* it's not disabled + //* we have openssl extension + //* we are not already using SSL + //* the server offers STARTTLS if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { $tls = true; } @@ -2062,7 +2117,7 @@ public function smtpConnect($options = null) if (!$this->smtp->startTLS()) { throw new Exception($this->lang('connect_host')); } - // We must resend EHLO after TLS negotiation + //We must resend EHLO after TLS negotiation $this->smtp->hello($hello); } if ( @@ -2080,14 +2135,14 @@ public function smtpConnect($options = null) } catch (Exception $exc) { $lastexception = $exc; $this->edebug($exc->getMessage()); - // We must have connected, but then failed TLS or Auth, so close connection nicely + //We must have connected, but then failed TLS or Auth, so close connection nicely $this->smtp->quit(); } } } - // If we get here, all connection attempts have failed, so close connection hard + //If we get here, all connection attempts have failed, so close connection hard $this->smtp->close(); - // As we've caught all exceptions, just report whatever the last one was + //As we've caught all exceptions, just report whatever the last one was if ($this->exceptions && null !== $lastexception) { throw $lastexception; } @@ -2118,7 +2173,7 @@ public function smtpClose() */ public function setLanguage($langcode = 'en', $lang_path = '') { - // Backwards compatibility for renamed language codes + //Backwards compatibility for renamed language codes $renamed_langcodes = [ 'br' => 'pt_br', 'cz' => 'cs', @@ -2134,7 +2189,7 @@ public function setLanguage($langcode = 'en', $lang_path = '') $langcode = $renamed_langcodes[$langcode]; } - // Define full set of translatable strings in English + //Define full set of translatable strings in English $PHPMAILER_LANG = [ 'authenticate' => 'SMTP Error: Could not authenticate.', 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', @@ -2159,7 +2214,7 @@ public function setLanguage($langcode = 'en', $lang_path = '') 'extension_missing' => 'Extension missing: ', ]; if (empty($lang_path)) { - // Calculate an absolute path so it can work if CWD is not here + //Calculate an absolute path so it can work if CWD is not here $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; } //Validate $langcode @@ -2168,20 +2223,20 @@ public function setLanguage($langcode = 'en', $lang_path = '') } $foundlang = true; $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php'; - // There is no English translation file + //There is no English translation file if ('en' !== $langcode) { - // Make sure language file path is readable + //Make sure language file path is readable if (!static::fileIsAccessible($lang_file)) { $foundlang = false; } else { - // Overwrite language-specific strings. - // This way we'll never have missing translation keys. + //Overwrite language-specific strings. + //This way we'll never have missing translation keys. $foundlang = include $lang_file; } } $this->language = $PHPMAILER_LANG; - return (bool) $foundlang; // Returns false if language not found + return (bool) $foundlang; //Returns false if language not found } /** @@ -2225,7 +2280,7 @@ public function addrAppend($type, $addr) */ public function addrFormat($addr) { - if (empty($addr[1])) { // No name provided + if (empty($addr[1])) { //No name provided return $this->secureHeader($addr[0]); } @@ -2252,8 +2307,8 @@ public function wrapText($message, $length, $qp_mode = false) } else { $soft_break = static::$LE; } - // If utf-8 encoding is used, we will need to make sure we don't - // split multibyte characters when we wrap + //If utf-8 encoding is used, we will need to make sure we don't + //split multibyte characters when we wrap $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet); $lelen = strlen(static::$LE); $crlflen = strlen(static::$LE); @@ -2353,29 +2408,29 @@ public function utf8CharBoundary($encodedText, $maxLength) $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); $encodedCharPos = strpos($lastChunk, '='); if (false !== $encodedCharPos) { - // Found start of encoded character byte within $lookBack block. - // Check the encoded byte value (the 2 chars after the '=') + //Found start of encoded character byte within $lookBack block. + //Check the encoded byte value (the 2 chars after the '=') $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); $dec = hexdec($hex); if ($dec < 128) { - // Single byte character. - // If the encoded char was found at pos 0, it will fit - // otherwise reduce maxLength to start of the encoded char + //Single byte character. + //If the encoded char was found at pos 0, it will fit + //otherwise reduce maxLength to start of the encoded char if ($encodedCharPos > 0) { $maxLength -= $lookBack - $encodedCharPos; } $foundSplitPos = true; } elseif ($dec >= 192) { - // First byte of a multi byte character - // Reduce maxLength to split at start of character + //First byte of a multi byte character + //Reduce maxLength to split at start of character $maxLength -= $lookBack - $encodedCharPos; $foundSplitPos = true; } elseif ($dec < 192) { - // Middle byte of a multi byte character, look further back + //Middle byte of a multi byte character, look further back $lookBack += 3; } } else { - // No encoded character found + //No encoded character found $foundSplitPos = true; } } @@ -2419,7 +2474,7 @@ public function createHeader() $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate); - // The To header is created automatically by mail(), so needs to be omitted here + //The To header is created automatically by mail(), so needs to be omitted here if ('mail' !== $this->Mailer) { if ($this->SingleTo) { foreach ($this->to as $toaddr) { @@ -2433,12 +2488,12 @@ public function createHeader() } $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]); - // sendmail and mail() extract Cc from the header before sending + //sendmail and mail() extract Cc from the header before sending if (count($this->cc) > 0) { $result .= $this->addrAppend('Cc', $this->cc); } - // sendmail and mail() extract Bcc from the header before sending + //sendmail and mail() extract Bcc from the header before sending if ( ( 'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer @@ -2452,13 +2507,13 @@ public function createHeader() $result .= $this->addrAppend('Reply-To', $this->ReplyTo); } - // mail() sets the subject itself + //mail() sets the subject itself if ('mail' !== $this->Mailer) { $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject))); } - // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 - // https://tools.ietf.org/html/rfc5322#section-3.6.4 + //Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 + //https://tools.ietf.org/html/rfc5322#section-3.6.4 if ('' !== $this->MessageID && preg_match('/^<.*@.*>$/', $this->MessageID)) { $this->lastMessageID = $this->MessageID; } else { @@ -2484,7 +2539,7 @@ public function createHeader() $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>'); } - // Add custom headers + //Add custom headers foreach ($this->CustomHeader as $header) { $result .= $this->headerLine( trim($header[0]), @@ -2526,28 +2581,24 @@ public function getMailMIME() $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); break; default: - // Catches case 'plain': and case '': + //Catches case 'plain': and case '': $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet); $ismultipart = false; break; } - // RFC1341 part 5 says 7bit is assumed if not specified + //RFC1341 part 5 says 7bit is assumed if not specified if (static::ENCODING_7BIT !== $this->Encoding) { - // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE + //RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE if ($ismultipart) { if (static::ENCODING_8BIT === $this->Encoding) { $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT); } - // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible + //The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible } else { $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding); } } - if ('mail' !== $this->Mailer) { -// $result .= static::$LE; - } - return $result; } @@ -2816,7 +2867,7 @@ public function createBody() $body .= $this->attachAll('attachment', $this->boundary[1]); break; default: - // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types + //Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types //Reset the `Encoding` property in case we changed it for line length reasons $this->Encoding = $bodyEncoding; $body .= $this->encodeString($this->Body, $this->Encoding); @@ -2907,7 +2958,7 @@ protected function getBoundary($boundary, $charSet, $contentType, $encoding) $result .= $this->textLine('--' . $boundary); $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet); $result .= static::$LE; - // RFC1341 part 5 says 7bit is assumed if not specified + //RFC1341 part 5 says 7bit is assumed if not specified if (static::ENCODING_7BIT !== $encoding) { $result .= $this->headerLine('Content-Transfer-Encoding', $encoding); } @@ -3005,7 +3056,7 @@ public function addAttachment( throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); } - // If a MIME type is not specified, try to work it out from the file name + //If a MIME type is not specified, try to work it out from the file name if ('' === $type) { $type = static::filenameToType($path); } @@ -3024,7 +3075,7 @@ public function addAttachment( 2 => $name, 3 => $encoding, 4 => $type, - 5 => false, // isStringAttachment + 5 => false, //isStringAttachment 6 => $disposition, 7 => $name, ]; @@ -3064,16 +3115,16 @@ public function getAttachments() */ protected function attachAll($disposition_type, $boundary) { - // Return text of body + //Return text of body $mime = []; $cidUniq = []; $incl = []; - // Add all attachments + //Add all attachments foreach ($this->attachment as $attachment) { - // Check if it is a valid disposition_filter + //Check if it is a valid disposition_filter if ($attachment[6] === $disposition_type) { - // Check for string attachment + //Check for string attachment $string = ''; $path = ''; $bString = $attachment[5]; @@ -3114,7 +3165,7 @@ protected function attachAll($disposition_type, $boundary) static::$LE ); } - // RFC1341 part 5 says 7bit is assumed if not specified + //RFC1341 part 5 says 7bit is assumed if not specified if (static::ENCODING_7BIT !== $encoding) { $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE); } @@ -3124,7 +3175,7 @@ protected function attachAll($disposition_type, $boundary) $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE; } - // Allow for bypassing the Content-Disposition header + //Allow for bypassing the Content-Disposition header if (!empty($disposition)) { $encoded_name = $this->encodeHeader($this->secureHeader($name)); if (!empty($encoded_name)) { @@ -3145,7 +3196,7 @@ protected function attachAll($disposition_type, $boundary) $mime[] = static::$LE; } - // Encode as string attachment + //Encode as string attachment if ($bString) { $mime[] = $this->encodeString($string, $encoding); } else { @@ -3221,7 +3272,7 @@ public function encodeString($str, $encoding = self::ENCODING_BASE64) case static::ENCODING_7BIT: case static::ENCODING_8BIT: $encoded = static::normalizeBreaks($str); - // Make sure it ends with a line break + //Make sure it ends with a line break if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) { $encoded .= static::$LE; } @@ -3259,7 +3310,7 @@ public function encodeHeader($str, $position = 'text') switch (strtolower($position)) { case 'phrase': if (!preg_match('/[\200-\377]/', $str)) { - // Can't use addslashes as we don't know the value of magic_quotes_sybase + //Can't use addslashes as we don't know the value of magic_quotes_sybase $encoded = addcslashes($str, "\0..\37\177\\\""); if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { return $encoded; @@ -3285,7 +3336,7 @@ public function encodeHeader($str, $position = 'text') $charset = static::CHARSET_ASCII; } - // Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`"). + //Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`"). $overhead = 8 + strlen($charset); if ('mail' === $this->Mailer) { @@ -3294,26 +3345,26 @@ public function encodeHeader($str, $position = 'text') $maxlen = static::MAX_LINE_LENGTH - $overhead; } - // Select the encoding that produces the shortest output and/or prevents corruption. + //Select the encoding that produces the shortest output and/or prevents corruption. if ($matchcount > strlen($str) / 3) { - // More than 1/3 of the content needs encoding, use B-encode. + //More than 1/3 of the content needs encoding, use B-encode. $encoding = 'B'; } elseif ($matchcount > 0) { - // Less than 1/3 of the content needs encoding, use Q-encode. + //Less than 1/3 of the content needs encoding, use Q-encode. $encoding = 'Q'; } elseif (strlen($str) > $maxlen) { - // No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption. + //No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption. $encoding = 'Q'; } else { - // No reformatting needed + //No reformatting needed $encoding = false; } switch ($encoding) { case 'B': if ($this->hasMultiBytes($str)) { - // Use a custom function which correctly encodes and wraps long - // multibyte strings without breaking lines within a character + //Use a custom function which correctly encodes and wraps long + //multibyte strings without breaking lines within a character $encoded = $this->base64EncodeWrapMB($str, "\n"); } else { $encoded = base64_encode($str); @@ -3348,7 +3399,7 @@ public function hasMultiBytes($str) return strlen($str) > mb_strlen($str, $this->CharSet); } - // Assume no multibytes (we can't handle without mbstring functions anyway) + //Assume no multibytes (we can't handle without mbstring functions anyway) return false; } @@ -3386,11 +3437,11 @@ public function base64EncodeWrapMB($str, $linebreak = null) } $mb_length = mb_strlen($str, $this->CharSet); - // Each line must have length <= 75, including $start and $end + //Each line must have length <= 75, including $start and $end $length = 75 - strlen($start) - strlen($end); - // Average multi-byte ratio + //Average multi-byte ratio $ratio = $mb_length / strlen($str); - // Base64 has a 4:3 ratio + //Base64 has a 4:3 ratio $avgLength = floor($length * $ratio * .75); $offset = 0; @@ -3405,7 +3456,7 @@ public function base64EncodeWrapMB($str, $linebreak = null) $encoded .= $chunk . $linebreak; } - // Chomp the last linefeed + //Chomp the last linefeed return substr($encoded, 0, -strlen($linebreak)); } @@ -3434,12 +3485,12 @@ public function encodeQP($string) */ public function encodeQ($str, $position = 'text') { - // There should not be any EOL in the string + //There should not be any EOL in the string $pattern = ''; $encoded = str_replace(["\r", "\n"], '', $str); switch (strtolower($position)) { case 'phrase': - // RFC 2047 section 5.3 + //RFC 2047 section 5.3 $pattern = '^A-Za-z0-9!*+\/ -'; break; /* @@ -3452,15 +3503,15 @@ public function encodeQ($str, $position = 'text') /* Intentional fall through */ case 'text': default: - // RFC 2047 section 5.1 - // Replace every high ascii, control, =, ? and _ characters + //RFC 2047 section 5.1 + //Replace every high ascii, control, =, ? and _ characters $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern; break; } $matches = []; if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { - // If the string contains an '=', make sure it's the first thing we replace - // so as to avoid double-encoding + //If the string contains an '=', make sure it's the first thing we replace + //so as to avoid double-encoding $eqkey = array_search('=', $matches[0], true); if (false !== $eqkey) { unset($matches[0][$eqkey]); @@ -3470,8 +3521,8 @@ public function encodeQ($str, $position = 'text') $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); } } - // Replace spaces with _ (more readable than =20) - // RFC 2047 section 4.2(2) + //Replace spaces with _ (more readable than =20) + //RFC 2047 section 4.2(2) return str_replace(' ', '_', $encoded); } @@ -3498,7 +3549,7 @@ public function addStringAttachment( $disposition = 'attachment' ) { try { - // If a MIME type is not specified, try to work it out from the file name + //If a MIME type is not specified, try to work it out from the file name if ('' === $type) { $type = static::filenameToType($filename); } @@ -3507,14 +3558,14 @@ public function addStringAttachment( throw new Exception($this->lang('encoding') . $encoding); } - // Append to $attachment array + //Append to $attachment array $this->attachment[] = [ 0 => $string, 1 => $filename, 2 => static::mb_pathinfo($filename, PATHINFO_BASENAME), 3 => $encoding, 4 => $type, - 5 => true, // isStringAttachment + 5 => true, //isStringAttachment 6 => $disposition, 7 => 0, ]; @@ -3565,7 +3616,7 @@ public function addEmbeddedImage( throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); } - // If a MIME type is not specified, try to work it out from the file name + //If a MIME type is not specified, try to work it out from the file name if ('' === $type) { $type = static::filenameToType($path); } @@ -3579,14 +3630,14 @@ public function addEmbeddedImage( $name = $filename; } - // Append to $attachment array + //Append to $attachment array $this->attachment[] = [ 0 => $path, 1 => $filename, 2 => $name, 3 => $encoding, 4 => $type, - 5 => false, // isStringAttachment + 5 => false, //isStringAttachment 6 => $disposition, 7 => $cid, ]; @@ -3631,7 +3682,7 @@ public function addStringEmbeddedImage( $disposition = 'inline' ) { try { - // If a MIME type is not specified, try to work it out from the name + //If a MIME type is not specified, try to work it out from the name if ('' === $type && !empty($name)) { $type = static::filenameToType($name); } @@ -3640,14 +3691,14 @@ public function addStringEmbeddedImage( throw new Exception($this->lang('encoding') . $encoding); } - // Append to $attachment array + //Append to $attachment array $this->attachment[] = [ 0 => $string, 1 => $name, 2 => $name, 3 => $encoding, 4 => $type, - 5 => true, // isStringAttachment + 5 => true, //isStringAttachment 6 => $disposition, 7 => $cid, ]; @@ -3867,8 +3918,8 @@ protected function setError($msg) */ public static function rfcDate() { - // Set the time zone to whatever the default is to avoid 500 errors - // Will default to UTC if it's not set properly in php.ini + //Set the time zone to whatever the default is to avoid 500 errors + //Will default to UTC if it's not set properly in php.ini date_default_timezone_set(@date_default_timezone_get()); return date('D, j M Y H:i:s O'); @@ -3946,13 +3997,13 @@ public static function isValidHost($host) protected function lang($key) { if (count($this->language) < 1) { - $this->setLanguage(); // set the default language + $this->setLanguage(); //Set the default language } if (array_key_exists($key, $this->language)) { if ('smtp_connect_failed' === $key) { - //Include a link to troubleshooting docs on SMTP connection failure - //this is by far the biggest cause of support questions + //Include a link to troubleshooting docs on SMTP connection failure. + //This is by far the biggest cause of support questions //but it's usually not PHPMailer's fault. return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting'; } @@ -3987,7 +4038,7 @@ public function isError() public function addCustomHeader($name, $value = null) { if (null === $value && strpos($name, ':') !== false) { - // Value passed in as name:value + //Value passed in as name:value list($name, $value) = explode(':', $name, 2); } $name = trim($name); @@ -4041,11 +4092,11 @@ public function msgHTML($message, $basedir = '', $advanced = false) preg_match_all('/(?<!-)(src|background)=["\'](.*)["\']/Ui', $message, $images); if (array_key_exists(2, $images)) { if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { - // Ensure $basedir has a trailing / + //Ensure $basedir has a trailing / $basedir .= '/'; } foreach ($images[2] as $imgindex => $url) { - // Convert data URIs into embedded images + //Convert data URIs into embedded images //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" $match = []; if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) { @@ -4059,7 +4110,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) } //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places //will only be embedded once, even if it used a different encoding - $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; // RFC2392 S 2 + $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; //RFC2392 S 2 if (!$this->cidExists($cid)) { $this->addStringEmbeddedImage( @@ -4078,13 +4129,13 @@ public function msgHTML($message, $basedir = '', $advanced = false) continue; } if ( - // Only process relative URLs if a basedir is provided (i.e. no absolute local paths) + //Only process relative URLs if a basedir is provided (i.e. no absolute local paths) !empty($basedir) - // Ignore URLs containing parent dir traversal (..) + //Ignore URLs containing parent dir traversal (..) && (strpos($url, '..') === false) - // Do not change urls that are already inline images + //Do not change urls that are already inline images && 0 !== strpos($url, 'cid:') - // Do not change absolute URLs, including anonymous protocol + //Do not change absolute URLs, including anonymous protocol && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) ) { $filename = static::mb_pathinfo($url, PATHINFO_BASENAME); @@ -4092,7 +4143,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) if ('.' === $directory) { $directory = ''; } - // RFC2392 S 2 + //RFC2392 S 2 $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0'; if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { $basedir .= '/'; @@ -4119,7 +4170,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) } } $this->isHTML(); - // Convert all message body line breaks to LE, makes quoted-printable encoding work much better + //Convert all message body line breaks to LE, makes quoted-printable encoding work much better $this->Body = static::normalizeBreaks($message); $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced)); if (!$this->alternativeExists()) { @@ -4138,9 +4189,9 @@ public function msgHTML($message, $basedir = '', $advanced = false) * Example usage: * * ```php - * // Use default conversion + * //Use default conversion * $plain = $mail->html2text($html); - * // Use your own custom converter + * //Use your own custom converter * $plain = $mail->html2text($html, function($html) { * $converter = new MyHtml2text($html); * return $converter->get_text(); @@ -4307,7 +4358,7 @@ public static function _mime_types($ext = '') */ public static function filenameToType($filename) { - // In case the path is a URL, strip any query string before getting extension + //In case the path is a URL, strip any query string before getting extension $qpos = strpos($filename, '?'); if (false !== $qpos) { $filename = substr($filename, 0, $qpos); @@ -4418,9 +4469,9 @@ public static function normalizeBreaks($text, $breaktype = null) if (null === $breaktype) { $breaktype = static::$LE; } - // Normalise to \n + //Normalise to \n $text = str_replace([self::CRLF, "\r"], "\n", $text); - // Now convert LE as needed + //Now convert LE as needed if ("\n" !== $breaktype) { $text = str_replace("\n", $breaktype, $text); } @@ -4526,13 +4577,13 @@ public function DKIM_Sign($signHeader) $privKey = openssl_pkey_get_private($privKeyStr); } if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) { - if (PHP_MAJOR_VERSION < 8) { + if (\PHP_MAJOR_VERSION < 8) { openssl_pkey_free($privKey); } return base64_encode($signature); } - if (PHP_MAJOR_VERSION < 8) { + if (\PHP_MAJOR_VERSION < 8) { openssl_pkey_free($privKey); } @@ -4599,7 +4650,7 @@ public function DKIM_BodyC($body) if (empty($body)) { return self::CRLF; } - // Normalize line endings to CRLF + //Normalize line endings to CRLF $body = static::normalizeBreaks($body, self::CRLF); //Reduce multiple trailing line breaks to a single one @@ -4619,9 +4670,9 @@ public function DKIM_BodyC($body) */ public function DKIM_Add($headers_line, $subject, $body) { - $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms - $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization methods of header & body - $DKIMquery = 'dns/txt'; // Query method + $DKIMsignatureType = 'rsa-sha256'; //Signature & hash algorithms + $DKIMcanonicalization = 'relaxed/simple'; //Canonicalization methods of header & body + $DKIMquery = 'dns/txt'; //Query method $DKIMtime = time(); //Always sign these headers without being asked //Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1 @@ -4722,7 +4773,8 @@ public function DKIM_Add($headers_line, $subject, $body) $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE; $headerValues = implode(static::$LE, $headersToSign); $body = $this->DKIM_BodyC($body); - $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body + //Base64 of packed binary SHA-256 hash of body + $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); $ident = ''; if ('' !== $this->DKIM_identity) { $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE; diff --git a/vendor/phpmailer/phpmailer/src/POP3.php b/vendor/phpmailer/phpmailer/src/POP3.php index 235e6372d2a04aac49d65f414af040dbc97d7326..0c20590693a9ac727e7a8acd256408d8aa67e948 100644 --- a/vendor/phpmailer/phpmailer/src/POP3.php +++ b/vendor/phpmailer/phpmailer/src/POP3.php @@ -46,7 +46,7 @@ class POP3 * * @var string */ - const VERSION = '6.2.0'; + const VERSION = '6.3.0'; /** * Default POP3 port number. @@ -199,13 +199,13 @@ public static function popBeforeSmtp( public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0) { $this->host = $host; - // If no port value provided, use default + //If no port value provided, use default if (false === $port) { $this->port = static::DEFAULT_PORT; } else { $this->port = (int) $port; } - // If no timeout value provided, use default + //If no timeout value provided, use default if (false === $timeout) { $this->tval = static::DEFAULT_TIMEOUT; } else { @@ -214,9 +214,9 @@ public function authorise($host, $port = false, $timeout = false, $username = '' $this->do_debug = $debug_level; $this->username = $username; $this->password = $password; - // Reset the error log + //Reset the error log $this->errors = []; - // connect + //Connect $result = $this->connect($this->host, $this->port, $this->tval); if ($result) { $login_result = $this->login($this->username, $this->password); @@ -226,7 +226,7 @@ public function authorise($host, $port = false, $timeout = false, $username = '' return true; } } - // We need to disconnect regardless of whether the login succeeded + //We need to disconnect regardless of whether the login succeeded $this->disconnect(); return false; @@ -243,7 +243,7 @@ public function authorise($host, $port = false, $timeout = false, $username = '' */ public function connect($host, $port = false, $tval = 30) { - // Are we already connected? + //Are we already connected? if ($this->connected) { return true; } @@ -256,22 +256,22 @@ public function connect($host, $port = false, $tval = 30) $port = static::DEFAULT_PORT; } - // connect to the POP3 server + //Connect to the POP3 server $errno = 0; $errstr = ''; $this->pop_conn = fsockopen( - $host, // POP3 Host - $port, // Port # - $errno, // Error Number - $errstr, // Error Message + $host, //POP3 Host + $port, //Port # + $errno, //Error Number + $errstr, //Error Message $tval - ); // Timeout (seconds) - // Restore the error handler + ); //Timeout (seconds) + //Restore the error handler restore_error_handler(); - // Did we connect? + //Did we connect? if (false === $this->pop_conn) { - // It would appear not... + //It would appear not... $this->setError( "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr" ); @@ -279,14 +279,14 @@ public function connect($host, $port = false, $tval = 30) return false; } - // Increase the stream time-out + //Increase the stream time-out stream_set_timeout($this->pop_conn, $tval, 0); - // Get the POP3 server response + //Get the POP3 server response $pop3_response = $this->getResponse(); - // Check for the +OK + //Check for the +OK if ($this->checkResponse($pop3_response)) { - // The connection is established and the POP3 server is talking + //The connection is established and the POP3 server is talking $this->connected = true; return true; @@ -316,11 +316,11 @@ public function login($username = '', $password = '') $password = $this->password; } - // Send the Username + //Send the Username $this->sendString("USER $username" . static::LE); $pop3_response = $this->getResponse(); if ($this->checkResponse($pop3_response)) { - // Send the Password + //Send the Password $this->sendString("PASS $password" . static::LE); $pop3_response = $this->getResponse(); if ($this->checkResponse($pop3_response)) { diff --git a/vendor/phpmailer/phpmailer/src/SMTP.php b/vendor/phpmailer/phpmailer/src/SMTP.php index ab7f46e4c85adcd68e0fb393c42bbfc8dcdbc379..68f3aeccc57950f8260821a92633f76af9186fe0 100644 --- a/vendor/phpmailer/phpmailer/src/SMTP.php +++ b/vendor/phpmailer/phpmailer/src/SMTP.php @@ -35,7 +35,7 @@ class SMTP * * @var string */ - const VERSION = '6.2.0'; + const VERSION = '6.3.0'; /** * SMTP line break constant. @@ -312,11 +312,11 @@ protected function edebug($str, $level = 0) */ public function connect($host, $port = null, $timeout = 30, $options = []) { - // Clear errors to avoid confusion + //Clear errors to avoid confusion $this->setError(''); - // Make sure we are __not__ connected + //Make sure we are __not__ connected if ($this->connected()) { - // Already connected, generate error + //Already connected, generate error $this->setError('Already connected to a server'); return false; @@ -324,7 +324,7 @@ public function connect($host, $port = null, $timeout = 30, $options = []) if (empty($port)) { $port = self::DEFAULT_PORT; } - // Connect to the SMTP server + //Connect to the SMTP server $this->edebug( "Connection: opening to $host:$port, timeout=$timeout, options=" . (count($options) > 0 ? var_export($options, true) : 'array()'), @@ -340,11 +340,23 @@ public function connect($host, $port = null, $timeout = 30, $options = []) $this->edebug('Connection: opened', self::DEBUG_CONNECTION); - // Get any announcement + //Get any announcement $this->last_reply = $this->get_lines(); $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); - - return true; + $responseCode = (int)substr($this->last_reply, 0, 3); + if ($responseCode === 220) { + return true; + } + //Anything other than a 220 response means something went wrong + //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error + //https://tools.ietf.org/html/rfc5321#section-3.1 + if ($responseCode === 554) { + $this->quit(); + } + //This will handle 421 responses which may not wait for a QUIT (e.g. if the server is being shut down) + $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION); + $this->close(); + return false; } /** @@ -397,7 +409,7 @@ protected function getSMTPConnection($host, $port = null, $timeout = 30, $option restore_error_handler(); } - // Verify we connected properly + //Verify we connected properly if (!is_resource($connection)) { $this->setError( 'Failed to connect to server', @@ -414,11 +426,11 @@ protected function getSMTPConnection($host, $port = null, $timeout = 30, $option return false; } - // SMTP server can take longer to respond, give longer timeout for first read - // Windows does not have support for this timeout function + //SMTP server can take longer to respond, give longer timeout for first read + //Windows does not have support for this timeout function if (strpos(PHP_OS, 'WIN') !== 0) { $max = (int)ini_get('max_execution_time'); - // Don't bother if unlimited, or if set_time_limit is disabled + //Don't bother if unlimited, or if set_time_limit is disabled if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) { @set_time_limit($timeout); } @@ -449,7 +461,7 @@ public function startTLS() $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; } - // Begin encrypted connection + //Begin encrypted connection set_error_handler([$this, 'errorHandler']); $crypto_ok = stream_socket_enable_crypto( $this->smtp_conn, @@ -487,11 +499,11 @@ public function authenticate( } if (array_key_exists('EHLO', $this->server_caps)) { - // SMTP extensions are available; try to find a proper authentication method + //SMTP extensions are available; try to find a proper authentication method if (!array_key_exists('AUTH', $this->server_caps)) { $this->setError('Authentication is not allowed at this stage'); - // 'at this stage' means that auth may be allowed after the stage changes - // e.g. after STARTTLS + //'at this stage' means that auth may be allowed after the stage changes + //e.g. after STARTTLS return false; } @@ -535,11 +547,11 @@ public function authenticate( } switch ($authtype) { case 'PLAIN': - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { return false; } - // Send encoded username and password + //Send encoded username and password if ( !$this->sendCommand( 'User & Password', @@ -551,7 +563,7 @@ public function authenticate( } break; case 'LOGIN': - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { return false; } @@ -563,17 +575,17 @@ public function authenticate( } break; case 'CRAM-MD5': - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { return false; } - // Get the challenge + //Get the challenge $challenge = base64_decode(substr($this->last_reply, 4)); - // Build the response + //Build the response $response = $username . ' ' . $this->hmac($challenge, $password); - // send encoded credentials + //send encoded credentials return $this->sendCommand('Username', base64_encode($response), 235); case 'XOAUTH2': //The OAuth instance must be set up prior to requesting auth. @@ -582,7 +594,7 @@ public function authenticate( } $oauth = $OAuth->getOauth64(); - // Start authentication + //Start authentication if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { return false; } @@ -612,15 +624,15 @@ protected function hmac($data, $key) return hash_hmac('md5', $data, $key); } - // The following borrowed from - // http://php.net/manual/en/function.mhash.php#27225 + //The following borrowed from + //http://php.net/manual/en/function.mhash.php#27225 - // RFC 2104 HMAC implementation for php. - // Creates an md5 HMAC. - // Eliminates the need to install mhash to compute a HMAC - // by Lance Rushing + //RFC 2104 HMAC implementation for php. + //Creates an md5 HMAC. + //Eliminates the need to install mhash to compute a HMAC + //by Lance Rushing - $bytelen = 64; // byte length for md5 + $bytelen = 64; //byte length for md5 if (strlen($key) > $bytelen) { $key = pack('H*', md5($key)); } @@ -643,7 +655,7 @@ public function connected() if (is_resource($this->smtp_conn)) { $sock_status = stream_get_meta_data($this->smtp_conn); if ($sock_status['eof']) { - // The socket is valid but we are not connected + //The socket is valid but we are not connected $this->edebug( 'SMTP NOTICE: EOF caught while checking if connected', self::DEBUG_CLIENT @@ -653,7 +665,7 @@ public function connected() return false; } - return true; // everything looks good + return true; //everything looks good } return false; @@ -671,7 +683,7 @@ public function close() $this->server_caps = null; $this->helo_rply = null; if (is_resource($this->smtp_conn)) { - // close the connection and cleanup + //Close the connection and cleanup fclose($this->smtp_conn); $this->smtp_conn = null; //Makes for cleaner serialization $this->edebug('Connection: closed', self::DEBUG_CONNECTION); @@ -706,7 +718,7 @@ public function data($msg_data) * NOTE: this does not count towards line-length limit. */ - // Normalize line breaks before exploding + //Normalize line breaks before exploding $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data)); /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field @@ -752,7 +764,8 @@ public function data($msg_data) //Send the lines to the server foreach ($lines_out as $line_out) { - //RFC2821 section 4.5.2 + //Dot-stuffing as per RFC5321 section 4.5.2 + //https://tools.ietf.org/html/rfc5321#section-4.5.2 if (!empty($line_out) && $line_out[0] === '.') { $line_out = '.' . $line_out; } @@ -786,7 +799,16 @@ public function data($msg_data) public function hello($host = '') { //Try extended hello first (RFC 2821) - return $this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host); + if ($this->sendHello('EHLO', $host)) { + return true; + } + + //Some servers shut down the SMTP service here (RFC 5321) + if (substr($this->helo_rply, 0, 3) == '421') { + return false; + } + + return $this->sendHello('HELO', $host); } /** @@ -976,12 +998,12 @@ protected function sendCommand($command, $commandstring, $expect) $this->client_send($commandstring . static::LE, $command); $this->last_reply = $this->get_lines(); - // Fetch SMTP code and possible error code explanation + //Fetch SMTP code and possible error code explanation $matches = []; if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) { $code = (int) $matches[1]; $code_ex = (count($matches) > 2 ? $matches[2] : null); - // Cut off error code from each response line + //Cut off error code from each response line $detail = preg_replace( "/{$code}[ -]" . ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m', @@ -989,7 +1011,7 @@ protected function sendCommand($command, $commandstring, $expect) $this->last_reply ); } else { - // Fall back to simple parsing if regex fails + //Fall back to simple parsing if regex fails $code = (int) substr($this->last_reply, 0, 3); $code_ex = null; $detail = substr($this->last_reply, 4); @@ -1184,7 +1206,7 @@ public function getLastReply() */ protected function get_lines() { - // If the connection is bad, give up straight away + //If the connection is bad, give up straight away if (!is_resource($this->smtp_conn)) { return ''; } @@ -1237,13 +1259,13 @@ protected function get_lines() $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH); $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL); $data .= $str; - // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled), - // or 4th character is a space or a line break char, we are done reading, break the loop. - // String array access is a significant micro-optimisation over strlen + //If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled), + //or 4th character is a space or a line break char, we are done reading, break the loop. + //String array access is a significant micro-optimisation over strlen if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") { break; } - // Timed-out? Log and break + //Timed-out? Log and break $info = stream_get_meta_data($this->smtp_conn); if ($info['timed_out']) { $this->edebug( @@ -1252,7 +1274,7 @@ protected function get_lines() ); break; } - // Now check if reads took too long + //Now check if reads took too long if ($endtime && time() > $endtime) { $this->edebug( 'SMTP -> get_lines(): timelimit reached (' . diff --git a/vendor/psy/psysh/src/CodeCleaner.php b/vendor/psy/psysh/src/CodeCleaner.php index 69cd326a0635e3875bec00af61e4773d99c0ab42..c23bd2b360012abc0719f063b85a2d79798d4347 100644 --- a/vendor/psy/psysh/src/CodeCleaner.php +++ b/vendor/psy/psysh/src/CodeCleaner.php @@ -49,6 +49,7 @@ */ class CodeCleaner { + private $yolo = false; private $parser; private $printer; private $traverser; @@ -60,9 +61,12 @@ class CodeCleaner * @param Parser|null $parser A PhpParser Parser instance. One will be created if not explicitly supplied * @param Printer|null $printer A PhpParser Printer instance. One will be created if not explicitly supplied * @param NodeTraverser|null $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied + * @param bool $yolo run without input validation */ - public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null) + public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null, $yolo = false) { + $this->yolo = $yolo; + if ($parser === null) { $parserFactory = new ParserFactory(); $parser = $parserFactory->createParser(); @@ -77,6 +81,16 @@ public function __construct(Parser $parser = null, Printer $printer = null, Node } } + /** + * Check whether this CodeCleaner is in YOLO mode. + * + * @return bool + */ + public function yolo() + { + return $this->yolo; + } + /** * Get default CodeCleaner passes. * @@ -84,6 +98,10 @@ public function __construct(Parser $parser = null, Printer $printer = null, Node */ private function getDefaultPasses() { + if ($this->yolo) { + return $this->getYoloPasses(); + } + $useStatementPass = new UseStatementPass(); $namespacePass = new NamespacePass($this); @@ -127,6 +145,36 @@ private function getDefaultPasses() ]; } + /** + * A set of code cleaner passes that don't try to do any validation, and + * only do minimal rewriting to make things work inside the REPL. + * + * This list should stay in sync with the "rewriting shenanigans" in + * getDefaultPasses above. + * + * @return array + */ + private function getYoloPasses() + { + $useStatementPass = new UseStatementPass(); + $namespacePass = new NamespacePass($this); + + // Try to add implicit `use` statements and an implicit namespace, + // based on the file in which the `debug` call was made. + $this->addImplicitDebugContext([$useStatementPass, $namespacePass]); + + return [ + new LeavePsyshAlonePass(), + $useStatementPass, // must run before the namespace pass + new ExitPass(), + new ImplicitReturnPass(), + new MagicConstantsPass(), + $namespacePass, // must run after the implicit return pass + new RequirePass(), + new StrictTypesPass(), + ]; + } + /** * "Warm up" code cleaner passes when we're coming from a debug call. * diff --git a/vendor/psy/psysh/src/Command/ReflectingCommand.php b/vendor/psy/psysh/src/Command/ReflectingCommand.php index b98274569737579e59ad98f97b37fdb40e36f299..47b779e21a111a57340e8e7d7be52ceeeac33411 100644 --- a/vendor/psy/psysh/src/Command/ReflectingCommand.php +++ b/vendor/psy/psysh/src/Command/ReflectingCommand.php @@ -120,10 +120,7 @@ protected function resolveName($name, $includeFunctions = false) // Check $name against the current namespace and use statements. if (self::couldBeClassName($name)) { try { - $maybeAlias = $this->resolveCode($name.'::class'); - if ($maybeAlias !== $name) { - return $maybeAlias; - } + $name = $this->resolveCode($name.'::class'); } catch (RuntimeException $e) { // /shrug } @@ -146,7 +143,7 @@ protected function resolveName($name, $includeFunctions = false) protected function couldBeClassName($name) { // Regex based on https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class - return \preg_match('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/', $name); + return \preg_match('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/', $name); } /** diff --git a/vendor/psy/psysh/src/Configuration.php b/vendor/psy/psysh/src/Configuration.php index d7ca8ba6b23cab60a35123953a7c177d4c619587..4623fcae237acf12229d789dd2400b3c3e17bede 100644 --- a/vendor/psy/psysh/src/Configuration.php +++ b/vendor/psy/psysh/src/Configuration.php @@ -71,6 +71,7 @@ class Configuration 'useReadline', 'useTabCompletion', 'useUnicode', + 'yolo', 'verbosity', 'warnOnMultipleConfigs', ]; @@ -107,6 +108,7 @@ class Configuration private $forceArrayIndexes = false; private $formatterStyles = []; private $verbosity = self::VERBOSITY_NORMAL; + private $yolo = false; // services private $readline; @@ -199,6 +201,11 @@ public static function fromInput(InputInterface $input) } } + // Handle --yolo + if (self::getOptionFromInput($input, ['yolo'])) { + $config->setYolo(true); + } + return $config; } @@ -341,6 +348,8 @@ public static function getInputOptions() new InputOption('interaction', null, InputOption::VALUE_NONE, 'Force PsySH to run in interactive mode.'), new InputOption('no-interaction', null, InputOption::VALUE_NONE, 'Run PsySH without interactive input. Requires input from stdin.'), new InputOption('raw-output', 'r', InputOption::VALUE_NONE, 'Print var_export-style return values (for non-interactive input)'), + + new InputOption('yolo', null, InputOption::VALUE_NONE, 'Run PsySH with minimal input validation. You probably don\'t want this.'), ]; } @@ -990,12 +999,30 @@ public function setCodeCleaner(CodeCleaner $cleaner) public function getCodeCleaner() { if (!isset($this->cleaner)) { - $this->cleaner = new CodeCleaner(); + $this->cleaner = new CodeCleaner(null, null, null, $this->yolo()); } return $this->cleaner; } + /** + * Enable or disable running PsySH without input validation. + * + * You don't want this. + */ + public function setYolo($yolo) + { + $this->yolo = (bool) $yolo; + } + + /** + * Check whether to disable input validation. + */ + public function yolo() + { + return $this->yolo; + } + /** * Enable or disable tab completion. * diff --git a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php index de10aa0412a0dadbc3e166521ebed3077202d5e4..e0375a2d8f4b046ddcf9f685a4e08a48802b0721 100644 --- a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php +++ b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php @@ -30,7 +30,8 @@ class RunkitReloader extends AbstractListener */ public static function isSupported() { - return \extension_loaded('runkit'); + // runkit_import was removed in runkit7-4.0.0a1 + return \extension_loaded('runkit') || \extension_loaded('runkit7') && \function_exists('runkit_import'); } /** @@ -101,14 +102,22 @@ private function reload(Shell $shell) // } foreach ($modified as $file) { - runkit_import($file, ( + $flags = ( RUNKIT_IMPORT_FUNCTIONS | RUNKIT_IMPORT_CLASSES | RUNKIT_IMPORT_CLASS_METHODS | RUNKIT_IMPORT_CLASS_CONSTS | RUNKIT_IMPORT_CLASS_PROPS | RUNKIT_IMPORT_OVERRIDE - )); + ); + + // these two const cannot be used with RUNKIT_IMPORT_OVERRIDE in runkit7 + if (\extension_loaded('runkit7')) { + $flags &= ~RUNKIT_IMPORT_CLASS_PROPS & ~RUNKIT_IMPORT_CLASS_STATIC_PROPS; + runkit7_import($file, $flags); + } else { + runkit_import($file, $flags); + } } } diff --git a/vendor/psy/psysh/src/Formatter/TraceFormatter.php b/vendor/psy/psysh/src/Formatter/TraceFormatter.php index 6f8debae3f85965a9cbd3e9fe7596df0b2e2e9fe..7a638a51901636e34d5c347fd82dda6f5adc61d2 100644 --- a/vendor/psy/psysh/src/Formatter/TraceFormatter.php +++ b/vendor/psy/psysh/src/Formatter/TraceFormatter.php @@ -71,9 +71,14 @@ public static function formatTrace($throwable, FilterOptions $filter = null, $co $class = isset($trace[$i]['class']) ? $trace[$i]['class'] : ''; $type = isset($trace[$i]['type']) ? $trace[$i]['type'] : ''; $function = $trace[$i]['function']; - $file = isset($trace[$i]['file']) ? self::replaceCwd($cwd, $trace[$i]['file']) : 'n/a'; + $file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a'; $line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a'; + // Make file paths relative to cwd + if ($cwd !== false) { + $file = \preg_replace('/^'.\preg_quote($cwd, '/').'/', '', $file); + } + // Leave execution loop out of the `eval()'d code` lines if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) { $file = "eval()'d code"; @@ -96,21 +101,4 @@ public static function formatTrace($throwable, FilterOptions $filter = null, $co return $lines; } - - /** - * Replace the given directory from the start of a filepath. - * - * @param string $cwd - * @param string $file - * - * @return string - */ - private static function replaceCwd($cwd, $file) - { - if ($cwd === false) { - return $file; - } else { - return \preg_replace('/^'.\preg_quote($cwd, '/').'/', '', $file); - } - } } diff --git a/vendor/psy/psysh/src/Shell.php b/vendor/psy/psysh/src/Shell.php index 96014e7791ea3e7206596be3d6f4a1d7c789a072..fe703b24715c2533ba7de5e896b4a273341b939c 100644 --- a/vendor/psy/psysh/src/Shell.php +++ b/vendor/psy/psysh/src/Shell.php @@ -48,7 +48,7 @@ */ class Shell extends Application { - const VERSION = 'v0.10.6'; + const VERSION = 'v0.10.7'; const PROMPT = '>>> '; const BUFF_PROMPT = '... '; diff --git a/vendor/psy/psysh/src/VarDumper/Dumper.php b/vendor/psy/psysh/src/VarDumper/Dumper.php index 2bcda05019ed8cb57adbc4bcd323611a1d810073..9ee3ef8623a2a86ce7315e739db9b155990c858e 100644 --- a/vendor/psy/psysh/src/VarDumper/Dumper.php +++ b/vendor/psy/psysh/src/VarDumper/Dumper.php @@ -74,7 +74,7 @@ protected function style($style, $value, $attr = []) $map = self::$controlCharsMap; $cchr = $this->styles['cchr']; - $chunks = \preg_split(self::$controlCharsRx, $value, null, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE); + $chunks = \preg_split(self::$controlCharsRx, $value, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE); foreach ($chunks as $chunk) { if (\preg_match(self::$onlyControlCharsRx, $chunk)) { $chars = ''; diff --git a/vendor/psy/psysh/src/functions.php b/vendor/psy/psysh/src/functions.php index 1fd073e80f1245bae1965e8d7abda46c79c6508d..be03c56aa1b5ce09aa47ca4f6f6b146b0b361346 100644 --- a/vendor/psy/psysh/src/functions.php +++ b/vendor/psy/psysh/src/functions.php @@ -29,7 +29,22 @@ */ function sh() { - return 'extract(\Psy\debug(get_defined_vars(), isset($this) ? $this : @get_called_class()));'; + if (\version_compare(\PHP_VERSION, '8.0', '<')) { + return '\extract(\Psy\debug(\get_defined_vars(), isset($this) ? $this : @\get_called_class()));'; + } + + return <<<'EOS' +if (isset($this)) { + \extract(\Psy\debug(\get_defined_vars(), $this)); +} else { + try { + static::class; + \extract(\Psy\debug(\get_defined_vars(), static::class)); + } catch (\Error $e) { + \extract(\Psy\debug(\get_defined_vars())); + } +} +EOS; } } @@ -175,6 +190,7 @@ function info(Configuration $config = null) $input = [ 'interactive mode' => $config->interactiveMode(), 'input interactive' => $config->getInputInteractive(), + 'yolo' => $config->yolo(), ]; if ($config->hasReadline()) { @@ -367,6 +383,7 @@ function bin() -r, --raw-output Print var_export-style return values (for non-interactive input) -q, --quiet Shhhhhh. -v|vv|vvv, --verbose Increase the verbosity of messages. + --yolo Run PsySH without input validation. You don't want this. EOL; exit($usageException === null ? 0 : 1); diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE index 0a041280bd00a9d068f503b8ee7ce35214bd24a1..a345e48d049f9c6756e9364e908b3f26e36c9df1 100644 --- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE +++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE @@ -1,165 +1,459 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 - Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Copyright (C) 1991, 1999 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. - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser 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 -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + \ No newline at end of file diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json index 2e2194e354061416265c50f170761000dd5f12b6..1c84786422307ff109039e57df52767a125f499f 100644 --- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json +++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json @@ -3,7 +3,7 @@ "description": "This module provides a user authorization filter based on attribute matching", "type": "simplesamlphp-module", "keywords": ["simplesamlphp", "authorize"], - "license": "LGPL-3.0-or-later", + "license": "LGPL-2.1-or-later", "authors": [ { "name": "Ernesto Revilla", diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig b/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig index 52d9a24308851c10625ca655bafde3577c389f99..de7718759ca4c2f4236f23ffada38edc7d0123aa 100644 --- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig +++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.twig @@ -2,12 +2,12 @@ {% block content %} <h1>{% trans %}{authorize:Authorize:403_header}{% endtrans %}</h1> -{% if reject_msg %} +{% if reject_msg is defined %} <p>{{ reject_msg|translateFromArray }}</p> {% else %} <p>{% trans %}{authorize:Authorize:403_text}{% endtrans %}</p> {% endif %} - {% if logoutURL %} + {% if logoutURL is defined %} <p> <a href="{{ logoutURL }}">{% trans %}{status:logout}{% endtrans %}</a> </p> diff --git a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php index 77d1664c74bdeb07ba56f9adb95048b278de7407..8bd47407fa391234f6d15d0778891e69aa57ac5f 100644 --- a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php +++ b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php @@ -18,7 +18,7 @@ use Symfony\Component\Config\Definition\PrototypedArrayNode; /** - * Dumps a XML reference configuration for the given configuration/node instance. + * Dumps an XML reference configuration for the given configuration/node instance. * * @author Wouter J <waldio.webdesign@gmail.com> */ diff --git a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php index 8c5e736524c75ee07d9f3ae5ddb267ba28e5e4e0..aa27f9869b7e21d0134c8440c59ca3fdd0f9fd5f 100644 --- a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php +++ b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php @@ -18,7 +18,7 @@ */ class FileLoaderImportCircularReferenceException extends LoaderLoadException { - public function __construct(array $resources, int $code = null, \Throwable $previous = null) + public function __construct(array $resources, ?int $code = 0, \Throwable $previous = null) { $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]); diff --git a/vendor/symfony/config/Exception/FileLoaderLoadException.php b/vendor/symfony/config/Exception/FileLoaderLoadException.php index 16beec5930c82c518da5d5a3945944ba8993be6d..e53106a11aa0fe3ab7af723e4364a09014985c9f 100644 --- a/vendor/symfony/config/Exception/FileLoaderLoadException.php +++ b/vendor/symfony/config/Exception/FileLoaderLoadException.php @@ -21,13 +21,13 @@ class FileLoaderLoadException extends \Exception { /** - * @param string $resource The resource that could not be imported - * @param string $sourceResource The original resource importing the new resource - * @param int $code The error code - * @param \Throwable $previous A previous exception - * @param string $type The type of resource + * @param string $resource The resource that could not be imported + * @param string|null $sourceResource The original resource importing the new resource + * @param int|null $code The error code + * @param \Throwable|null $previous A previous exception + * @param string|null $type The type of resource */ - public function __construct(string $resource, string $sourceResource = null, int $code = null, \Throwable $previous = null, string $type = null) + public function __construct(string $resource, string $sourceResource = null, ?int $code = 0, \Throwable $previous = null, string $type = null) { $message = ''; if ($previous) { diff --git a/vendor/symfony/config/Loader/DelegatingLoader.php b/vendor/symfony/config/Loader/DelegatingLoader.php index e40e57d7af6aaaf93a362498b7706c6153604503..fd5c8e957049b159a8306e75bf4f6a104988e3a5 100644 --- a/vendor/symfony/config/Loader/DelegatingLoader.php +++ b/vendor/symfony/config/Loader/DelegatingLoader.php @@ -34,7 +34,7 @@ public function __construct(LoaderResolverInterface $resolver) public function load($resource, $type = null) { if (false === $loader = $this->resolver->resolve($resource, $type)) { - throw new LoaderLoadException($resource, null, null, null, $type); + throw new LoaderLoadException($resource, null, 0, null, $type); } return $loader->load($resource, $type); diff --git a/vendor/symfony/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php index 1ca59665a41f8c10212f221719917a95bcf4f89d..b7c2491b5b023c5366c7286774f34387c441c314 100644 --- a/vendor/symfony/config/Loader/FileLoader.php +++ b/vendor/symfony/config/Loader/FileLoader.php @@ -177,7 +177,7 @@ private function doImport($resource, string $type = null, bool $ignoreErrors = f throw $e; } - throw new LoaderLoadException($resource, $sourceResource, null, $e, $type); + throw new LoaderLoadException($resource, $sourceResource, 0, $e, $type); } } diff --git a/vendor/symfony/config/Loader/Loader.php b/vendor/symfony/config/Loader/Loader.php index 698ab40afbf3dfe49372e71ae7a88c4aed4ad92c..a83088e432da9d313903d163c3595581e7bee4ac 100644 --- a/vendor/symfony/config/Loader/Loader.php +++ b/vendor/symfony/config/Loader/Loader.php @@ -70,7 +70,7 @@ public function resolve($resource, $type = null) $loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type); if (false === $loader) { - throw new LoaderLoadException($resource, null, null, null, $type); + throw new LoaderLoadException($resource, null, 0, null, $type); } return $loader; diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php index 49c6f70d6202cc69451e4a3930b2b4c229ddec85..35c568e71e7d53e93a90e59a82dc0b7321070af4 100644 --- a/vendor/symfony/filesystem/Filesystem.php +++ b/vendor/symfony/filesystem/Filesystem.php @@ -717,14 +717,16 @@ private function getSchemeAndHierarchy(string $filename): array } /** + * @param mixed ...$args + * * @return mixed */ - private static function box(callable $func) + private static function box(callable $func, ...$args) { self::$lastError = null; set_error_handler(__CLASS__.'::handleError'); try { - $result = $func(...\array_slice(\func_get_args(), 1)); + $result = $func(...$args); restore_error_handler(); return $result; diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php index 4cf723bf33f531a9ce05ff2a966d1beeff1be3df..87fc187b2f4013e8fcdb9aa9e4a3bf4cbe7b3dc4 100644 --- a/vendor/symfony/finder/Finder.php +++ b/vendor/symfony/finder/Finder.php @@ -20,6 +20,7 @@ use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; use Symfony\Component\Finder\Iterator\SortableIterator; @@ -635,7 +636,9 @@ public function getIterator() $iterator = new \AppendIterator(); foreach ($this->dirs as $dir) { - $iterator->append($this->searchInDirectory($dir)); + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); } foreach ($this->iterators as $it) { @@ -669,7 +672,8 @@ public function append($iterator) } elseif ($iterator instanceof \Traversable || \is_array($iterator)) { $it = new \ArrayIterator(); foreach ($iterator as $file) { - $it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file)); + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; } $this->iterators[] = $it; } else { diff --git a/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 0000000000000000000000000000000000000000..32cc37ff14adcd5fc99b5df14280d4f188d40889 --- /dev/null +++ b/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé <jeremy@derusse.com> + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory; + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/vendor/wikimedia/composer-merge-plugin b/vendor/wikimedia/composer-merge-plugin index 81c6ac72a24a67383419c7eb9aa2b3437f2ab100..8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912 160000 --- a/vendor/wikimedia/composer-merge-plugin +++ b/vendor/wikimedia/composer-merge-plugin @@ -1 +1 @@ -Subproject commit 81c6ac72a24a67383419c7eb9aa2b3437f2ab100 +Subproject commit 8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912 diff --git a/web/modules/contrib/colorbox/colorbox.info.yml b/web/modules/contrib/colorbox/colorbox.info.yml index f75ef2844dedc1f761040c0d04642c95dc00be02..34c971eb9cf32822ad5b1e6f9c96235c811a0317 100644 --- a/web/modules/contrib/colorbox/colorbox.info.yml +++ b/web/modules/contrib/colorbox/colorbox.info.yml @@ -8,7 +8,7 @@ configure: colorbox.admin_settings dependencies: - drupal:image -# Information added by Drupal.org packaging script on 2020-04-16 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-1.7' project: 'colorbox' -datestamp: 1587016345 +datestamp: 1614960643 diff --git a/web/modules/contrib/colorbox/colorbox.install b/web/modules/contrib/colorbox/colorbox.install index 065c505caffc9c211bfca522d37df4ab894a9828..7dd17cb44abd9c4d58db820457398eb139ae36ce 100644 --- a/web/modules/contrib/colorbox/colorbox.install +++ b/web/modules/contrib/colorbox/colorbox.install @@ -5,16 +5,11 @@ * Install, update and uninstall functions for the colorbox module. */ -use Drupal\Core\Url; - /** * Implements hook_install(). */ function colorbox_install() { \Drupal::messenger()->addMessage(t('Thanks for installing Colorbox')); - \Drupal::messenger()->addMessage(t('You may configure Colorbox by visiting <a href="@url_settings">@url_settings</a>', [ - '@url_settings' => Url::fromRoute('colorbox.admin_settings')->toString(), - ])); } /** diff --git a/web/modules/contrib/colorbox/colorbox.services.yml b/web/modules/contrib/colorbox/colorbox.services.yml index 1fce9d0c11376afc1b18bacb3b5e0d7e6d293050..d7ffa36331e4fa5e3e1681dc27721c00134c6bf5 100644 --- a/web/modules/contrib/colorbox/colorbox.services.yml +++ b/web/modules/contrib/colorbox/colorbox.services.yml @@ -5,3 +5,6 @@ services: colorbox.attachment: class: Drupal\colorbox\ColorboxAttachment arguments: ['@colorbox.activation_check', '@module_handler', '@config.factory'] + colorbox.gallery_id_generator: + class: Drupal\colorbox\GalleryIdHelper + arguments: ['@config.factory', '@token'] diff --git a/web/modules/contrib/colorbox/colorbox.theme.inc b/web/modules/contrib/colorbox/colorbox.theme.inc index 7843813a7c3d96b464b8f752fd9076693e004587..07f177578b7989c487a37d0a5d1ac2b1d78c0aa3 100644 --- a/web/modules/contrib/colorbox/colorbox.theme.inc +++ b/web/modules/contrib/colorbox/colorbox.theme.inc @@ -5,7 +5,6 @@ * Colorbox theme functions. */ -use Drupal\Component\Utility\Crypt; use Drupal\file\Entity\File; use Drupal\image\Entity\ImageStyle; @@ -26,7 +25,6 @@ */ function template_preprocess_colorbox_formatter(&$variables) { // @codingStandardsIgnoreEnd - static $gallery_token = NULL; $item = $variables['item']; $item_attributes = isset($variables['item_attributes']) ? $variables['item_attributes'] : []; @@ -39,7 +37,6 @@ function template_preprocess_colorbox_formatter(&$variables) { // Build the caption. $entity_title = $entity->label(); $entity_type = $entity->getEntityTypeId(); - $entity_bundle = $entity->bundle(); switch ($settings['colorbox_caption']) { case 'auto': @@ -72,7 +69,11 @@ function template_preprocess_colorbox_formatter(&$variables) { case 'custom': $token_service = \Drupal::token(); - $caption = $token_service->replace($settings['colorbox_caption_custom'], [$entity_type => $entity, 'file' => $item], ['clear' => TRUE]); + $caption = $token_service->replace( + $settings['colorbox_caption_custom'], + [$entity_type => $entity, 'file' => $item], + ['clear' => TRUE] + ); break; default: @@ -84,52 +85,11 @@ function template_preprocess_colorbox_formatter(&$variables) { $config = \Drupal::config('colorbox.settings'); $colorbox_style = $config->get('colorbox_style'); $trim_length = $config->get('colorbox_caption_trim_length'); - if (((strpos($colorbox_style, 'colorbox/example') !== FALSE) || $config->get('colorbox_caption_trim')) && (mb_strlen($caption) > $trim_length)) { - $caption = mb_substr($caption, 0, $trim_length - 5) . '...'; + if (((strpos($colorbox_style, 'colorbox/example') !== FALSE) || $config->get('colorbox_caption_trim')) && (strlen($caption) > $trim_length)) { + $caption = substr($caption, 0, $trim_length - 5) . '...'; } - // Build the gallery id. - $id = $entity->id(); - $entity_id = !empty($id) ? $entity_bundle . '-' . $id : 'entity-id'; - $field_name = $item->getParent()->getName(); - - switch ($settings['colorbox_gallery']) { - case 'post': - $gallery_id = 'gallery-' . $entity_id; - break; - - case 'page': - $gallery_id = 'gallery-all'; - break; - - case 'field_post': - $gallery_id = 'gallery-' . $entity_id . '-' . $field_name; - break; - - case 'field_page': - $gallery_id = 'gallery-' . $field_name; - break; - - case 'custom': - $token_service = \Drupal::token(); - $gallery_id = $token_service->replace($settings['colorbox_gallery_custom'], [$entity_type => $entity, 'file' => $item], ['clear' => TRUE]); - break; - - default: - $gallery_id = ''; - } - - // If gallery id is not empty add unique per-request token to avoid - // images being added manually to galleries. - if (!empty($gallery_id) && $config->get('advanced.unique_token')) { - // Check if gallery token has already been set, we need to reuse - // the token for the whole request. - if (is_null($gallery_token)) { - // We use a short token since randomness is not critical. - $gallery_token = Crypt::randomBytesBase64(8); - } - $gallery_id = $gallery_id . '-' . $gallery_token; - } + $gallery_id = \Drupal::service('colorbox.gallery_id_generator')->generateId($entity, $item, $settings); // Set up the $variables['image'] parameter. if ($settings['style_name'] == 'hide') { @@ -152,7 +112,7 @@ function template_preprocess_colorbox_formatter(&$variables) { $variables['image']['#attributes'] = $item_attributes; // Do not output an empty 'title' attribute. - if (mb_strlen($item->title) != 0) { + if (strlen($item->title) != 0) { $variables['image']['#title'] = $item->title; $data_cbox_img_attrs['title'] = '"title":"' . $item->title . '"'; } diff --git a/web/modules/contrib/colorbox/composer.json b/web/modules/contrib/colorbox/composer.json index 3b02609fbb41005a3457523b6b1e6eae12bc8de4..5ce7f1fe9235eab5de24f2f0c0e4c97f62c2eb10 100644 --- a/web/modules/contrib/colorbox/composer.json +++ b/web/modules/contrib/colorbox/composer.json @@ -7,7 +7,7 @@ "issues": "https://www.drupal.org/project/issues/colorbox", "source": "https://git.drupalcode.org/project/colorbox" }, - "license": "GPL-2.0+", + "license": "GPL-2.0-or-later", "minimum-stability": "dev", "authors": [ { @@ -35,7 +35,9 @@ } } ], - "require": {}, + "require": { + "drupal/core": "^8.8 || ^9" + }, "suggest": { "jackmoore/colorbox": "The Colorbox library is required to use the drupal/colorbox module." }, diff --git a/web/modules/contrib/colorbox/drush.services.yml b/web/modules/contrib/colorbox/drush.services.yml index 0f8040eb6c7b4be25e99bde2f036160dd4fe3ff0..e1dbbcf8cee5e140392c1433053c202c08c7c2f4 100644 --- a/web/modules/contrib/colorbox/drush.services.yml +++ b/web/modules/contrib/colorbox/drush.services.yml @@ -1,5 +1,7 @@ services: colorbox.commands: class: \Drupal\colorbox\Commands\ColorboxCommands + arguments: + - '@library.discovery' tags: - { name: drush.command } diff --git a/web/modules/contrib/colorbox/src/ColorboxAttachment.php b/web/modules/contrib/colorbox/src/ColorboxAttachment.php index feb843d737a6945632ea9ad42a1b28851d5374d0..cd09389fbaa0e08fe3459774550d7c761801d18a 100644 --- a/web/modules/contrib/colorbox/src/ColorboxAttachment.php +++ b/web/modules/contrib/colorbox/src/ColorboxAttachment.php @@ -15,7 +15,7 @@ class ColorboxAttachment implements ElementAttachmentInterface { use StringTranslationTrait; /** - * The service to determin if colorbox should be activated. + * The service to determine if colorbox should be activated. * * @var \Drupal\colorbox\ActivationCheckInterface */ diff --git a/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php b/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php index 8a88efe5e6b51b993b8f4dae176d5ca8290ac1f7..9b5f816841496897043039ff780c30c8a253619b 100644 --- a/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php +++ b/web/modules/contrib/colorbox/src/Commands/ColorboxCommands.php @@ -2,10 +2,11 @@ namespace Drupal\colorbox\Commands; +use Drupal\Core\Asset\libraryDiscovery; use Drush\Commands\DrushCommands; -use Symfony\Component\Filesystem\Filesystem; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; +use Symfony\Component\Filesystem\Filesystem; /** * A Drush commandfile. @@ -20,6 +21,20 @@ */ class ColorboxCommands extends DrushCommands { + /** + * Library discovery service. + * + * @var Drupal\Core\Asset\libraryDiscovery + */ + protected $libraryDiscovery; + + /** + * {@inheritdoc} + */ + public function __construct(libraryDiscovery $library_discovery) { + $this->libraryDiscovery = $library_discovery; + } + /** * Download and install the Colorbox plugin. * @@ -49,7 +64,7 @@ public function download($path = '') { } // Load the colorbox defined library. - if ($colorbox_library = \Drupal::service('library.discovery')->getLibraryByName('colorbox', 'colorbox')) { + if ($colorbox_library = $this->libraryDiscovery->getLibraryByName('colorbox', 'colorbox')) { // Download the file. $client = new Client(); $destination = tempnam(sys_get_temp_dir(), 'colorbox-tmp'); diff --git a/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php b/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php index 6d463af955abbd506b862957ca6e7f1d3e3a1df2..d73bf6e86bc6d28ad8115162152971df3a22f943 100644 --- a/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php +++ b/web/modules/contrib/colorbox/src/Form/ColorboxSettingsForm.php @@ -66,6 +66,9 @@ protected function getEditableConfigNames() { * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { + global $base_url; + $module_path = \Drupal::service('extension.list.module')->getPath('colorbox'); + $img_folder_path = $base_url . '/' . $module_path . '/images/admin'; $config = $this->configFactory->get('colorbox.settings'); @@ -90,7 +93,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => $this->t('Style'), '#options' => $colorbox_styles, '#default_value' => $config->get('custom.style'), - '#description' => $this->t('Select the style to use for the Colorbox. The example styles are the ones that come with the Colorbox plugin. Select "None" if you have added Colorbox styles to your theme. <br> <strong>Examples</strong>: <ul><li><a href="/modules/contrib/colorbox/images/admin/example_default.png" target="blank">Default</a></li><li><a href="/modules/contrib/colorbox/images/admin/example_plain.png" target="blank">Plain</a></li><li><a href="/modules/contrib/colorbox/images/admin/example_stockholm_syndrome.png" target="blank">Stockholm Syndrome</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_1.png" target="blank">Example 1</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_2.png" target="blank">Example 2</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_3.png" target="blank">Example 3</a></li><li><a href="/modules/contrib/colorbox/images/admin/colorbox_example_4.png" target="blank">Example 4</a></li><li><a href="/modules/contrib/colorbox/images/admin/example_none.png" target="blank">None</a></li></ul>'), + '#description' => $this->t('Select the style to use for the Colorbox. The example styles are the ones that come with the Colorbox plugin. Select "None" if you have added Colorbox styles to your theme. <br> <strong>Examples</strong>: <ul><li><a href="@img_folder_path/example_default.png" target="blank">Default</a></li><li><a href="@img_folder_path/example_plain.png" target="blank">Plain</a></li><li><a href="@img_folder_path/example_stockholm_syndrome.png" target="blank">Stockholm Syndrome</a></li><li><a href="@img_folder_path/colorbox_example_1.png" target="blank">Example 1</a></li><li><a href="@img_folder_path/colorbox_example_2.png" target="blank">Example 2</a></li><li><a href="@img_folder_path/colorbox_example_3.png" target="blank">Example 3</a></li><li><a href="@img_folder_path/colorbox_example_4.png" target="blank">Example 4</a></li><li><a href="@img_folder_path/example_none.png" target="blank">None</a></li></ul>', ['@img_folder_path' => $img_folder_path]), ]; $form['colorbox_custom_settings']['colorbox_custom_settings_activate'] = [ '#type' => 'radios', diff --git a/web/modules/contrib/colorbox/src/GalleryIdHelper.php b/web/modules/contrib/colorbox/src/GalleryIdHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..df900e80e9bc40b08e8c0f685ff574238e32fcf5 --- /dev/null +++ b/web/modules/contrib/colorbox/src/GalleryIdHelper.php @@ -0,0 +1,118 @@ +<?php + +namespace Drupal\colorbox; + +use Drupal\Component\Utility\Crypt; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Field\FieldItemInterface; +use Drupal\Core\Utility\Token; + +/** + * Implementation of GalleryIdHelper. + * + * @package Drupal\colorbox + */ +class GalleryIdHelper { + + /** + * The Gallery Token. + * + * @var null + */ + protected $galleryToken = NULL; + + /** + * The Configuration Factory. + * + * @var \Drupal\Core\Config\ConfigFactoryInterface + */ + protected $configFactory; + + /** + * The Token. + * + * @var \Drupal\Core\Utility\Token + */ + protected $token; + + /** + * GalleryIdHelper constructor. + * + * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory + * The Configuration Factory. + * @param \Drupal\Core\Utility\Token $token + * The Token. + */ + public function __construct(ConfigFactoryInterface $configFactory, Token $token) { + $this->configFactory = $configFactory; + $this->token = $token; + } + + /** + * Generate ID. + * + * @param \Drupal\Core\Entity\ContentEntityInterface $entity + * The Entity. + * @param \Drupal\Core\Field\FieldItemInterface $item + * The Item. + * @param array $settings + * The Settings. + * + * @return string + * Return string. + */ + public function generateId(ContentEntityInterface $entity, FieldItemInterface $item, array $settings) { + $entity_bundle = $entity->bundle(); + $entity_type = $entity->getEntityTypeId(); + $config = $this->configFactory->get('colorbox.settings'); + + // Build the gallery id. + $id = $entity->id(); + $entity_id = !empty($id) ? $entity_bundle . '-' . $id : 'entity-id'; + $field_name = $item->getParent()->getName(); + + switch ($settings['colorbox_gallery']) { + case 'post': + $gallery_id = 'gallery-' . $entity_id; + break; + + case 'page': + $gallery_id = 'gallery-all'; + break; + + case 'field_post': + $gallery_id = 'gallery-' . $entity_id . '-' . $field_name; + break; + + case 'field_page': + $gallery_id = 'gallery-' . $field_name; + break; + + case 'custom': + $gallery_id = $this->token->replace( + $settings['colorbox_gallery_custom'], + [$entity_type => $entity, 'file' => $item], + ['clear' => TRUE] + ); + break; + + default: + $gallery_id = ''; + } + + // If gallery id is not empty add unique per-request token to avoid. + // images being added manually to galleries. + if (!empty($gallery_id) && $config->get('advanced.unique_token')) { + // Check if gallery token has already been set, we need to reuse. + // the token for the whole request. + if (is_null($this->galleryToken)) { + // We use a short token since randomness is not critical. + $this->galleryToken = Crypt::randomBytesBase64(8); + } + $gallery_id = $gallery_id . '-' . $this->galleryToken; + } + return $gallery_id; + } + +} diff --git a/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig b/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig index b282c1b87d04b6addbbb62e0e4c254f6952e9268..a5c86188ff79a6230eb5848b35c68f9f3c6a9a51 100644 --- a/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig +++ b/web/modules/contrib/colorbox/templates/colorbox-formatter.html.twig @@ -13,4 +13,5 @@ * @ingroup themeable */ #} + <a href="{{ url }}"{{ attributes }}>{{ image }}</a> diff --git a/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml b/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml index 57dbbebaff114c74f4586f89c8262aae5da514ce..4cae3dd70f1c57e8ab008b9328c6c65a572a467b 100644 --- a/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml +++ b/web/modules/contrib/colorbox/tests/modules/colorbox_library_test/colorbox_library_test.info.yml @@ -1,11 +1,11 @@ -name: Colorbox Library Test -description: Ensure colorbox can be tested properly with the downloaded library. +name: 'Colorbox Library Test' +description: 'Ensure colorbox can be tested properly with the downloaded library.' type: module hidden: true package: Testing core_version_requirement: ^8.8 || ^9 -# Information added by Drupal.org packaging script on 2020-04-16 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-1.7' project: 'colorbox' -datestamp: 1587016345 +datestamp: 1614960643 diff --git a/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml b/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml index b8610283739d4992d4889140895d06d738f86f37..9f5f19e3d9115088d22bf6dcf4ed7b5001a7df3b 100644 --- a/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml +++ b/web/modules/contrib/ds/config/schema/ds.field_plugin.schema.yml @@ -47,6 +47,14 @@ ds.field_plugin.link: ds.field_plugin.user: type: ds.field_plugin.entity +ds.field_plugin.mail_link: + type: mapping + label: 'Mapping for the mail link field settings' + mapping: + mail_link: + type: boolean + label: 'Link to mail' + ds.field_plugin.entity: type: mapping label: 'Mapping for the entity field settings' diff --git a/web/modules/contrib/ds/config/schema/ds.views.schema.yml b/web/modules/contrib/ds/config/schema/ds.views.schema.yml index 696f54a38eae57723e208bd82f4cc7d45fce898e..aede0cceb67cb7fdf83382660052b3b6b22ca233 100644 --- a/web/modules/contrib/ds/config/schema/ds.views.schema.yml +++ b/web/modules/contrib/ds/config/schema/ds.views.schema.yml @@ -72,3 +72,11 @@ ds_views_entity_row: switch: type: boolean label: 'Use the alternative view mode selected in the display settings tab.' + deltas_fieldset: + type: mapping + label: 'Delta fields' + mapping: + delta_fields: + sequence: + - type: string + label: 'Field wrapper' diff --git a/web/modules/contrib/ds/ds.info.yml b/web/modules/contrib/ds/ds.info.yml index 092631b85dc21bbb1b4019ee70155d642aae88c0..5debd279781a7912a33a91c211d5faefb15910a2 100644 --- a/web/modules/contrib/ds/ds.info.yml +++ b/web/modules/contrib/ds/ds.info.yml @@ -10,7 +10,7 @@ dependencies: test_dependencies: - field_group:field_group -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/ds.module b/web/modules/contrib/ds/ds.module index c4c421206893e4413b32b86b2c57864d2eea4c6a..c7f93d09a683e7231989df4a588df24e2e168761 100644 --- a/web/modules/contrib/ds/ds.module +++ b/web/modules/contrib/ds/ds.module @@ -309,20 +309,30 @@ function ds_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInt if (isset($component['third_party_settings']['ds']) && !empty($component['third_party_settings']['ds']['ds_limit'])) { $limit = $component['third_party_settings']['ds']['ds_limit']; if (isset($build[$field]) && isset($build[$field]['#items'])) { - if ($limit === 'delta' && isset($entity->ds_delta) && isset($entity->ds_delta[$field])) { - $delta = $entity->ds_delta[$field]; - $filtered_elements = Element::children($build['field']); + if ($limit === 'delta' && isset($build['#ds_delta']) && isset($build['#ds_delta'][$field])) { + + // Get delta. + $delta = $build['#ds_delta'][$field]; + + // Remove caching for this entity as it otherwise won't work. + unset($build['#cache']); + + $filtered_elements = Element::children($build[$field]); foreach ($filtered_elements as $filtered_element) { if ($filtered_element != $delta) { - unset($build[$field][$filtered_element]); + $build[$field][$filtered_element]['#access'] = FALSE; } } } - else { + elseif (is_numeric($limit)) { + + // Remove caching for this entity as it otherwise won't work. + unset($build['#cache']); + $filtered_elements = Element::children($build[$field]); $filtered_elements = array_slice($filtered_elements, $limit); foreach ($filtered_elements as $filtered_element) { - unset($build[$field][$filtered_element]); + $build[$field][$filtered_element]['#access'] = FALSE; } } } @@ -350,7 +360,6 @@ function ds_entity_view_alter(&$build, EntityInterface $entity, EntityDisplayInt $field['settings'] = $field_values[$key]['settings']; } - /* @var $field_instance \Drupal\ds\Plugin\DsField\DsFieldInterface */ $field_instance = Ds::getFieldInstance($key, $field, $entity, $view_mode, $display, $build); $field_value = $field_instance->build(); $field_title = $field_instance->getTitle(); @@ -408,11 +417,6 @@ function template_preprocess_ds_entity_view(&$variables) { $configuration = $build['#ds_configuration']; - // Process the render array so we can reuse it. - // Don't add/override the cache key if there aren't any. - if (!empty($build['#cache']['keys'])) { - $build['#cache']['keys'][0] = 'ds_entity_view'; - } unset($build['#theme']); unset($build['#pre_render']); unset($build['#sorted']); @@ -497,17 +501,19 @@ function ds_preprocess_ds_layout(&$variables) { } // Create region variables based on the layout settings. - foreach ($layout_settings['wrappers'] as $region_name => $wrapper) { - // @todo remove from D9, This is deprecated - $variables[$region_name . '_classes'] = !empty($layout_settings['classes'][$region_name]) ? ' ' . implode(' ', $layout_settings['classes'][$region_name]) : ''; - // The new way of doing stuff is creating an attributes object. - if (!empty($layout_settings['classes'][$region_name])) { - $variables[$region_name . '_attributes'] = new Attribute(['class' => $layout_settings['classes'][$region_name]]); - } - else { - $variables[$region_name . '_attributes'] = new Attribute(); + if (!empty($layout_settings['wrappers']) && is_array($layout_settings['wrappers'])) { + foreach ($layout_settings['wrappers'] as $region_name => $wrapper) { + // @todo remove from D9, This is deprecated + $variables[$region_name . '_classes'] = !empty($layout_settings['classes'][$region_name]) ? ' ' . implode(' ', $layout_settings['classes'][$region_name]) : ''; + // The new way of doing stuff is creating an attributes object. + if (!empty($layout_settings['classes'][$region_name])) { + $variables[$region_name . '_attributes'] = new Attribute(['class' => $layout_settings['classes'][$region_name]]); + } + else { + $variables[$region_name . '_attributes'] = new Attribute(); + } + $variables[$region_name . '_wrapper'] = !empty($layout_settings['wrappers'][$region_name]) ? $layout_settings['wrappers'][$region_name] : 'div'; } - $variables[$region_name . '_wrapper'] = !empty($layout_settings['wrappers'][$region_name]) ? $layout_settings['wrappers'][$region_name] : 'div'; } // Add a layout wrapper. @@ -1020,7 +1026,7 @@ function ds_field_formatter_third_party_settings_form(FormatterInterface $plugin '#type' => 'textfield', '#title' => t('UI limit'), '#size' => 2, - '#description' => t("Enter a number to limit the number of items or 'delta' to print a specific delta (usually configured in views or found in entity->ds_delta). Leave empty to display them all. Note that depending on the formatter settings, this option might not always work."), + '#description' => t("Enter a number to limit the number of items or 'delta' to print a specific delta (usually configured in views or found in entity->ds_delta).<br />Leave empty to display them all. Note that depending on the formatter settings, this option might not always work."), '#default_value' => !empty($settings[$name]['ds_limit']) ? $settings[$name]['ds_limit'] : '', ]; } diff --git a/web/modules/contrib/ds/ds.routing.yml b/web/modules/contrib/ds/ds.routing.yml index f3d81fe6bc2056ad8cc15c2eb2a651a9b21e56cc..9b115201968e50df694f6d9a78ed41bae40d94cc 100644 --- a/web/modules/contrib/ds/ds.routing.yml +++ b/web/modules/contrib/ds/ds.routing.yml @@ -13,7 +13,7 @@ ds.list: requirements: _permission: 'admin display suite' ds.admin_settings: - path: 'admin/structure/ds/settings' + path: '/admin/structure/ds/settings' defaults: _form: '\Drupal\ds\Form\SettingsForm' _title: 'Settings' diff --git a/web/modules/contrib/ds/includes/field_ui.inc b/web/modules/contrib/ds/includes/field_ui.inc index f0ae68e27bdd7fcfb65f6b87a0c5b55f76ab8c11..91402ce32f8d8e9bfb2c60c79aad9998c07b9a26 100644 --- a/web/modules/contrib/ds/includes/field_ui.inc +++ b/web/modules/contrib/ds/includes/field_ui.inc @@ -11,6 +11,7 @@ use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Plugin\PluginFormInterface; use Drupal\Core\Render\Element; use Drupal\Core\Url; @@ -428,7 +429,7 @@ function ds_field_ui_layouts_save($form, FormStateInterface $form_state) { $record['layout']['settings']['attributes'] = ''; $record['layout']['settings']['link_attribute'] = FALSE; $record['layout']['settings']['link_custom'] = ''; - $fields = _ds_sort_fields($form_state->getValue('fields'), 'weight'); + $fields = _ds_sort_fields((array) $form_state->getValue('fields'), 'weight'); foreach ($fields as $field_key => $field) { // Ignore new fieldgroup, new field or existing field. @@ -455,7 +456,7 @@ function ds_field_ui_layouts_save($form, FormStateInterface $form_state) { elseif (!empty($layout)) { $save_display = TRUE; - $fields = _ds_sort_fields($form_state->getValue('fields'), 'weight'); + $fields = _ds_sort_fields((array) $form_state->getValue('fields'), 'weight'); foreach ($fields as $key => $field) { // Make sure to hide hidden fields. @@ -851,38 +852,56 @@ function _ds_field_ui_table_layouts($entity_type, $bundle, $view_mode, array &$f // See if we can clone from another view mode. $options = []; $entity_displays = \Drupal::configFactory()->listAll('core.entity_view_display.' . $entity_type . '.' . $bundle); - foreach ($entity_displays as $name) { - $row = \Drupal::config($name)->get(); - if ($row['mode'] == $view_mode) { - continue; - } - if ($row['targetEntityType'] == $entity_type && $row['bundle'] == $bundle) { - $options[$row['id']] = Unicode::ucfirst(str_replace('_', ' ', $row['targetEntityType'])) . ' > ' . Unicode::ucfirst(str_replace('_', ' ', $row['bundle'])) . ' > ' . Unicode::ucfirst(str_replace('_', ' ', $row['mode'])); + if (!empty($entity_displays)) { + $entity_type_info = \Drupal::entityTypeManager()->getDefinition($entity_type); + foreach ($entity_displays as $name) { + $row = \Drupal::config($name)->get(); + if ($row['mode'] === $view_mode) { + continue; + } + + if ($row['mode'] != 'default') { + $view_mode_label = \Drupal::entityTypeManager()->getStorage('entity_view_mode')->load($entity_type . '.' . $row['mode'])->label(); + } + else { + $view_mode_label = 'Default'; + } + + if ($row['targetEntityType'] === $entity_type && $row['bundle'] === $bundle) { + if ($entity_type_info->getBundleEntityType()) { + $bundle_info = \Drupal::entityTypeManager()->getStorage($entity_type_info->getBundleEntityType())->load($bundle); + $options[$row['id']] = $entity_type_info->getLabel() . ' > ' . $bundle_info->label() . ' > ' . $view_mode_label; + } + else { + $options[$row['id']] = $entity_type_info->getLabel() . ' > ' . $view_mode_label; + } + } } - } - if (!empty($options)) { + if (!empty($options)) { + natcasesort($options); - // Clone from another layout. - $form['ds_clone'] = [ - '#type' => 'details', - '#group' => 'additional_settings', - '#title' => t('Clone layout'), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ]; - $form['ds_clone']['clone'] = [ - '#title' => t('Select an existing layout to clone.'), - '#type' => 'select', - '#options' => $options, - '#weight' => 20, - ]; - $form['ds_clone']['clone_submit'] = [ - '#type' => 'submit', - '#value' => t('Clone layout'), - '#submit' => ['ds_field_ui_layout_clone'], - '#weight' => 21, - ]; + // Clone from another layout. + $form['ds_clone'] = [ + '#type' => 'details', + '#group' => 'additional_settings', + '#title' => t('Clone layout'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ]; + $form['ds_clone']['clone'] = [ + '#title' => t('Select an existing layout to clone.'), + '#type' => 'select', + '#options' => $options, + '#weight' => 20, + ]; + $form['ds_clone']['clone_submit'] = [ + '#type' => 'submit', + '#value' => t('Clone layout'), + '#submit' => ['ds_field_ui_layout_clone'], + '#weight' => 21, + ]; + } } } @@ -1134,6 +1153,80 @@ function _ds_field_ui_fields($entity_type, $bundle, $view_mode, array &$form, Fo $field_settings = $form['#ds_layout']['fields']; $form['#field_settings'] = $field_settings; + if (empty($form['fields'])) { + // EntityDisplayFormBase doesn't add the fields table and field_ui library + // when there are no fields. Since DS needs those, we add them. + $form['#attached']['library'][] = 'field_ui/drupal.field_ui'; + $form['fields'] = [ + '#type' => 'field_ui_table', + '#weight' => -101, + '#header' => [ + t('Field'), + t('Weight'), + t('Parent'), + t('Region'), + t('Label'), + ['data' => t('Format'), 'colspan' => 3], + ], + '#regions' => [], + '#attributes' => [ + 'class' => ['field-ui-overview'], + 'id' => 'field-display-overview', + ], + '#tabledrag' => [ + [ + 'action' => 'order', + 'relationship' => 'sibling', + 'group' => 'field-weight', + ], + [ + 'action' => 'match', + 'relationship' => 'parent', + 'group' => 'field-parent', + 'subgroup' => 'field-parent', + 'source' => 'field-name', + ], + [ + 'action' => 'match', + 'relationship' => 'parent', + 'group' => 'field-region', + 'subgroup' => 'field-region', + 'source' => 'field-name', + ], + ], + ]; + + // Check for the 'There are no fields yet added. You can add new fields on + // the Manage fields page.' warning message. We really don't need it. + $warnings = \Drupal::messenger()->messagesByType(MessengerInterface::TYPE_WARNING); + if (count($warnings) == 1) { + \Drupal::messenger()->deleteByType(MessengerInterface::TYPE_WARNING); + } + + // In overviews involving nested rows from contributed modules (i.e + // field_group), the 'plugin type' selects can trigger a series of changes + // in child rows. The #ajax behavior is therefore not attached directly to + // the selects, but triggered by the client-side script through a hidden + // #ajax 'Refresh' button. A hidden 'refresh_rows' input tracks the name of + // affected rows. + $form['refresh_rows'] = ['#type' => 'hidden']; + $form['refresh'] = [ + '#type' => 'submit', + '#value' => t('Refresh'), + '#op' => 'refresh_table', + '#submit' => ['::multistepSubmit'], + '#ajax' => [ + 'callback' => '::multistepAjax', + 'wrapper' => 'field-display-overview-wrapper', + 'effect' => 'fade', + // The button stays hidden, so we hide the Ajax spinner too. Ad-hoc + // spinners will be added manually by the client-side script. + 'progress' => 'none', + ], + '#attributes' => ['class' => ['visually-hidden']], + ]; + + } $table = &$form['fields']; $form['#ds_fields'] = []; @@ -1449,6 +1542,7 @@ function ds_field_row_form_format_summary_construct(&$table, $key, FormStateInte */ function _ds_sort_fields(array $a, $subkey) { $c = []; + $b = []; foreach ($a as $k => $v) { if (isset($v[$subkey])) { $b[$k] = $v[$subkey]; diff --git a/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml b/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml index b3031ad1f7867e5606184592c0224055913d1fd2..0b796897ffe01804a103d2dc03474b87b0e89bb4 100644 --- a/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml +++ b/web/modules/contrib/ds/modules/ds_devel/ds_devel.info.yml @@ -7,7 +7,7 @@ dependencies: - ds:ds - devel:devel -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml b/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml index d1383a186adb3a63c7f8d5c621e395388f6aea5f..4547da244a04e748dba18a2a95315b8cf7c0b6a6 100644 --- a/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml +++ b/web/modules/contrib/ds/modules/ds_extras/ds_extras.info.yml @@ -7,7 +7,7 @@ configure: admin/structure/ds/settings dependencies: - ds:ds -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml b/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml index 55cce09625f3f66b07040fdf240cc177791e1e4e..41b854105f004569b9da44eab9016473963376f4 100644 --- a/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml +++ b/web/modules/contrib/ds/modules/ds_switch_view_mode/ds_switch_view_mode.info.yml @@ -6,7 +6,7 @@ package: 'Display Suite' dependencies: - ds:ds -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/src/Plugin/DsField/Field.php b/web/modules/contrib/ds/src/Plugin/DsField/Field.php index f7760b3c114ec63eca30f9b776e6c9953db44c38..ef5f9aeb86f7430489fe57107c5649d5a99e854d 100644 --- a/web/modules/contrib/ds/src/Plugin/DsField/Field.php +++ b/web/modules/contrib/ds/src/Plugin/DsField/Field.php @@ -3,6 +3,7 @@ namespace Drupal\ds\Plugin\DsField; use Drupal\Core\Template\Attribute; +use Drupal\Core\Url; /** * The base plugin to create DS fields. @@ -42,7 +43,7 @@ public function build() { <{{ wrapper }}{{ attributes }}> {% endif %} {% if is_link %} - {{ link(output, entity_url) }} + {{ link(output, entity_url, link_attributes) }} {% else %} {{ output }} {% endif %} @@ -57,8 +58,14 @@ public function build() { $is_link = FALSE; $entity_url = NULL; if (!empty($this->entity()->id())) { - $is_link = !empty($config['link']); - $entity_url = $this->entity()->toUrl(); + $is_link = !empty($config['link']) || !empty($config['mail_link']); + + if (!empty($config['mail_link'])) { + $entity_url = Url::fromUri('mailto:' . $output); + } + else { + $entity_url = $this->entity()->toUrl(); + } if (!empty($config['link class'])) { $entity_url->setOption('attributes', ['class' => explode(' ', $config['link class'])]); } @@ -77,6 +84,7 @@ public function build() { 'is_link' => $is_link, 'wrapper' => !empty($config['wrapper']) ? $config['wrapper'] : '', 'attributes' => $attributes, + 'link_attributes' => new Attribute(), 'entity_url' => $entity_url, 'output' => $output, ], diff --git a/web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php b/web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php new file mode 100644 index 0000000000000000000000000000000000000000..7e17bd160a202a8e1245e903ccf7d0897ae552ed --- /dev/null +++ b/web/modules/contrib/ds/src/Plugin/DsField/User/UserMail.php @@ -0,0 +1,58 @@ +<?php + +namespace Drupal\ds\Plugin\DsField\User; + +use Drupal\Core\Form\FormStateInterface; +use Drupal\ds\Plugin\DsField\Field; + +/** + * Plugin that renders the username. + * + * @DsField( + * id = "usermail", + * title = @Translation("User e-mail"), + * entity_type = "user", + * provider = "user" + * ) + */ +class UserMail extends Field { + + /** + * {@inheritdoc} + */ + public function entityRenderKey() { + return 'mail'; + } + + /** + * {@inheritdoc} + */ + public function settingsForm($form, FormStateInterface $form_state) { + $config = $this->getConfiguration(); + + $settings['mail_link'] = [ + '#type' => 'checkbox', + '#title' => 'Link to mail', + '#default_value' => $config['mail_link'], + ]; + + return $settings; + } + + /** + * {@inheritdoc} + */ + public function settingsSummary($settings) { + $config = $this->getConfiguration(); + + $summary = []; + if (!empty($config['mail_link'])) { + $summary[] = 'Link to mail: yes'; + } + else { + $summary[] = 'Link to mail: no'; + } + + return $summary; + } +} diff --git a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php index 9f31c7163a743694dcacf9b2a3882951779fca5b..9bcc7ac8710e63467a6ac1e95e7bcf23c12d74be 100644 --- a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php +++ b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/CurrentLanguageRenderer.php @@ -14,8 +14,11 @@ class CurrentLanguageRenderer extends RendererBase { * * @param \Drupal\views\ResultRow $row * The result row. + * + * @return string */ public function getLangcode(ResultRow $row) { + return $this->languageManager->getCurrentLanguage()->getId(); } } diff --git a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php index a3d24f8fa9fbb280b45a1d4602943ac0fa99b6bf..fcefd2105518db1ef15da7f642f9ffc4a754631a 100644 --- a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php +++ b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/RendererBase.php @@ -3,6 +3,7 @@ namespace Drupal\ds\Plugin\views\Entity\Render; use Drupal\views\Entity\Render\EntityTranslationRendererBase; +use Drupal\views\ResultRow; /** * Renders entities in the current language. @@ -17,12 +18,53 @@ public function preRender(array $result) { $this->dsPreRender($result); } + /** + * {@inheritdoc} + */ + public function render(ResultRow $row) { + $entity_id = $row->_entity->id(); + $langcode = $this->getLangcode($row); + if (isset($this->build[$entity_id][$langcode])) { + $build = $this->build[$entity_id][$langcode]; + $this->alterBuild($build, $row); + return $build; + } + return []; + } + + /** + * Alter the build. + * + * @param $build + * @param $row + */ + protected function alterBuild(&$build, $row) { + // Add row index. Remember that in case you want to use this, you will + // have to remove the cache for this build. + $build['#row_index'] = isset($row->index) ? $row->index : NULL; + + // Delta fields. + $delta_fields = $this->view->rowPlugin->options['delta_fieldset']['delta_fields']; + if (!empty($delta_fields)) { + foreach ($delta_fields as $field) { + $field_name_delta = $field . '_delta'; + if (isset($row->{$field_name_delta})) { + $build['#ds_delta'][$field] = $row->{$field_name_delta}; + } + } + } + } + /** * Pre renders all the Display Suite rows. + * + * @param array $result + * @param bool $translation */ protected function dsPreRender(array $result, $translation = FALSE) { if ($result) { - // Get all entities which will be used to render in rows. + + // Get the view builder to render this entity. $view_builder = \Drupal::entityTypeManager()->getViewBuilder($this->entityType->id()); $i = 0; @@ -33,6 +75,7 @@ protected function dsPreRender(array $result, $translation = FALSE) { $group_value_content = ''; $entity = $row->_entity; $entity->view = $this->view; + /* @var $entity \Drupal\Core\Entity\EntityInterface */ $entity_id = $entity->id(); $langcode = $this->getLangcode($row); @@ -66,12 +109,10 @@ protected function dsPreRender(array $result, $translation = FALSE) { $modules = \Drupal::moduleHandler()->getImplementations('ds_views_row_render_entity'); foreach ($modules as $module) { if ($content = \Drupal::moduleHandler()->invoke($module, 'ds_views_row_render_entity', [$entity, $view_mode])) { - if (!$translation) { - $this->build[$entity_id] = $content; - } - else { - $this->build[$entity_id][$langcode] = $content; + if (!is_array($content)) { + $content = ['#markup' => $content]; } + $this->build[$entity_id][$langcode] = $content; $rendered = TRUE; } } @@ -87,22 +128,10 @@ protected function dsPreRender(array $result, $translation = FALSE) { \Drupal::moduleHandler()->alter('ds_views_view_mode', $view_mode, $context); if (!$rendered) { - if (!$translation) { - if (!empty($view_mode)) { - $this->build[$entity_id] = $view_builder->view($entity, $view_mode, $langcode); - } - else { - $this->build[$entity_id] = $view_builder->view($entity, 'full', $langcode); - } - } - else { - if (!empty($view_mode)) { - $this->build[$entity_id][$langcode] = $view_builder->view($entity, $view_mode, $langcode); - } - else { - $this->build[$entity_id][$langcode] = $view_builder->view($entity, 'full', $langcode); - } + if (empty($view_mode)) { + $view_mode = 'full'; } + $this->build[$entity_id][$langcode] = $view_builder->view($entity, $view_mode, $langcode); } $context = [ diff --git a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php index 759032f15e7d5ed4ed6f6b02159ff7a9ba8f4af1..7d4bb7c4de86df3ae2a1c0b15e0a94c4f219ff04 100644 --- a/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php +++ b/web/modules/contrib/ds/src/Plugin/views/Entity/Render/TranslationLanguageRenderer.php @@ -6,7 +6,7 @@ use Drupal\views\ResultRow; /** - * Renders entities in the current language. + * Renders entity translations in their row language. */ class TranslationLanguageRenderer extends DefaultLanguageRenderer { @@ -52,7 +52,13 @@ public function preRender(array $result) { public function render(ResultRow $row) { $entity_id = $row->_entity->id(); $langcode = $this->getLangcode($row); - return $this->build[$entity_id][$langcode]; + if (isset($this->build[$entity_id][$langcode])) { + $build = $this->build[$entity_id][$langcode]; + $this->alterBuild($build, $row); + return $build; + } + + return []; } /** diff --git a/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php b/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php index 4107271ac584772b36a0b50a19900243228c80e4..88275a7da32274d4c32e9f85f4917fcfd2d12654 100644 --- a/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php +++ b/web/modules/contrib/ds/src/Plugin/views/row/EntityRow.php @@ -18,6 +18,22 @@ */ class EntityRow extends ViewsEntityRow { + /** + * {@inheritdoc} + */ + public function query() { + parent::query(); + + $delta_fields = $this->options['delta_fieldset']['delta_fields']; + if (!empty($delta_fields)) { + foreach ($delta_fields as $field) { + $table_name = $this->entityTypeId . '__' . $field; + $field_name_delta = $field . '_delta'; + $this->view->query->addField($table_name, 'delta', $field_name_delta); + } + } + } + /** * Contains an array of render arrays, one for each rendered entity. * @@ -57,6 +73,11 @@ protected function defineOptions() { 'switch' => ['default' => FALSE, 'bool' => TRUE], ], ]; + $options['delta_fieldset'] = [ + 'contains' => [ + 'delta_fields' => ['default' => []], + ], + ]; return $options; } @@ -167,6 +188,30 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { $form['grouping_fieldset']['group']['#description'] = $this->t('Grouping is disabled because you do not have any sort fields.'); } + // Delta fields. + $delta_fields = []; + $fields = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($this->entityTypeId); + /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field */ + foreach ($fields as $key => $field) { + if ($field->getCardinality() != 1) { + $delta_fields[$key] = $key; + } + } + $form['delta_fieldset'] = array( + '#type' => 'fieldset', + '#title' => t('Delta fields'), + '#collapsible' => TRUE, + '#collapsed' => empty($this->options['delta_fields']), + ); + $form['delta_fieldset']['delta_fields'] = array( + '#type' => 'select', + '#title' => t('Select fields'), + '#description' => t('Select fields which "delta" value should be added to the result row. On the manage display of an entity you can decide to look for this delta value to only print that row.'), + '#options' => $delta_fields, + '#multiple' => TRUE, + '#default_value' => !empty($this->options['delta_fieldset']['delta_fields']) ? $this->options['delta_fieldset']['delta_fields'] : '', + ); + // Advanced function. $form['advanced_fieldset'] = [ '#type' => 'details', diff --git a/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml b/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml index bb92a22402e19f4cfa175c3ea7f62e9015bde731..6105aaa814a9f6e491e716e1ffa679c93f302e69 100644 --- a/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml +++ b/web/modules/contrib/ds/tests/modules/ds_exportables_test/ds_exportables_test.info.yml @@ -5,7 +5,7 @@ package: 'Display Suite' core_version_requirement: ^8.8 || ^9 hidden: TRUE -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml b/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml index fbbabc08a614f5fd6321ab02c78c630089ed1d43..3335c7cf6d979cd828d67fac75f026c2b43b0cc8 100644 --- a/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml +++ b/web/modules/contrib/ds/tests/modules/ds_test/ds_test.info.yml @@ -6,7 +6,7 @@ type: module dependencies: - ds_extras:ds_extras -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml b/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml index 7c3c193710127cfd344bda7dfdf4f7f4db7b4b6d..4fdce24240a1782eece2115b95a24e4b55d72438 100644 --- a/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml +++ b/web/modules/contrib/ds/tests/modules/ds_test_rdf/ds_test_rdf.info.yml @@ -4,7 +4,7 @@ core_version_requirement: ^8.8 || ^9 package: 'Display Suite' type: module -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php b/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php index 6c6577d5c39cef29acf6f1f67fa7194b3d107344..5726f9fc1e704bf79fff540c284382d8ae6ea047 100644 --- a/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php +++ b/web/modules/contrib/ds/tests/src/Functional/FieldGroupTest.php @@ -7,17 +7,19 @@ /** * Tests for field group integration with Display Suite. * - * @group ds + * @group ds_disabled */ class FieldGroupTest extends TestBase { - use FieldGroupTestTrait; + //use FieldGroupTestTrait; /** * Test tabs. */ public function testFieldPlugin() { + return; + // Create a node. $settings = ['type' => 'article', 'promote' => 1]; $node = $this->drupalCreateNode($settings); diff --git a/web/modules/contrib/ds/tests/src/Functional/TestBase.php b/web/modules/contrib/ds/tests/src/Functional/TestBase.php index 50f4bc34a96a57afc84d726469d2b47ae91ea0bf..86fcf9eb93d19756461a9d0af6a49e97358d2371 100644 --- a/web/modules/contrib/ds/tests/src/Functional/TestBase.php +++ b/web/modules/contrib/ds/tests/src/Functional/TestBase.php @@ -42,7 +42,7 @@ abstract class TestBase extends BrowserTestBase { 'ds_test', 'ds_switch_view_mode', 'layout_discovery', - 'field_group', + //'field_group', ]; /** diff --git a/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml b/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml index da31eb7204134ab1146889fec4c2c7da6f9fb297..3041ddc871963ebe2f6c5cdca7c36344dc260814 100644 --- a/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml +++ b/web/modules/contrib/ds/tests/themes/ds_test_layout_theme/ds_test_layout_theme.info.yml @@ -4,7 +4,7 @@ description: 'Theme for testing a theme-provided layout' base theme: classy core_version_requirement: ^8.8 || ^9 -# Information added by Drupal.org packaging script on 2020-08-31 -version: '8.x-3.9' +# Information added by Drupal.org packaging script on 2021-03-17 +version: '8.x-3.12' project: 'ds' -datestamp: 1598898823 +datestamp: 1615995337 diff --git a/web/modules/contrib/easy_breadcrumb/README.md b/web/modules/contrib/easy_breadcrumb/README.md index ba49132c5e1fb89618b4c22e88bdb9d3100208d0..65deb359710fbe975a1f0346e4380fdfb9eb3a58 100644 --- a/web/modules/contrib/easy_breadcrumb/README.md +++ b/web/modules/contrib/easy_breadcrumb/README.md @@ -25,7 +25,7 @@ to automatically extract the breadcrumb's segments and its respective links. The module is really a plug and play module because it auto-generates the breadcrumb by using the current URL and nothing extra is needed. - * For a full description of the module visit: + * For the description of the module visit: https://www.drupal.org/project/easy_breadcrumb or https://www.drupal.org/docs/8/improve-the-breadcrumbs diff --git a/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml b/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml index 21d8c9535096430bdc7e92343d1344f41edca4ac..e282ca815755b610a9fccaa11a41bb32b50b56a5 100644 --- a/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml +++ b/web/modules/contrib/easy_breadcrumb/config/install/easy_breadcrumb.settings.yml @@ -1,33 +1,39 @@ -applies_admin_routes: TRUE -include_home_segment: TRUE -home_segment_title: 'Home' -home_segment_keep: FALSE -include_title_segment: TRUE -language_path_prefix_as_segment: FALSE -use_menu_title_as_fallback: FALSE -use_page_title_as_menu_title_fallback: FALSE -remove_repeated_segments: TRUE -term_hierarchy: FALSE -absolute_paths: FALSE -hide_single_home_item: FALSE -title_from_page_when_available: TRUE -capitalizator_mode: 'ucwords' +applies_admin_routes: true +include_home_segment: true +alternative_title_field: 'field_breadcrumb_title' +home_segment_title: Home +home_segment_keep: false +include_title_segment: true +language_path_prefix_as_segment: false +use_menu_title_as_fallback: false +use_page_title_as_menu_title_fallback: false +remove_repeated_segments: true +term_hierarchy: false +absolute_paths: false +hide_single_home_item: false +title_from_page_when_available: true +capitalizator_mode: ucwords capitalizator_ignored_words: - of - and - or - de - del - - y + - 'y' - o - a -capitalizator_forced_words_first_letter: FALSE -capitalizator_forced_words_case_sensitivity: TRUE -add_structured_data_jsonld: FALSE -use_site_title: FALSE -dependencies: - module: - - easy_breadcrumb - enforced: - module: - - easy_breadcrumb +capitalizator_forced_words: { } +capitalizator_forced_words_first_letter: false +capitalizator_forced_words_case_sensitivity: true +add_structured_data_json_ld: false +use_site_title: false +include_invalid_paths: false +excluded_paths: '' +replaced_titles: '' +custom_paths: '' +title_segment_as_link: false +follow_redirects: true +limit_segment_display: FALSE +truncator_mode: false +truncator_length: '100' +truncator_dots: true diff --git a/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml b/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml index ec7fa8287e0d7aabaf50a8c1962388425f94d946..145b210f1f5422cdbce85c77fd3a6c349f1c312c 100644 --- a/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml +++ b/web/modules/contrib/easy_breadcrumb/config/schema/easy_breadcrumb.schema.yml @@ -20,6 +20,10 @@ easy_breadcrumb.settings: include_home_segment: type: boolean label: 'Include the front page as a segment in the breadcrumb' + alternative_title_field: + type: label + label: 'Alternative title field for the breadcrumb' + translatable: true home_segment_title: type: label label: 'Title for the front page segment in the breadcrumb' @@ -60,9 +64,48 @@ easy_breadcrumb.settings: term_hierarchy: type: boolean label: 'Use term hierarchy' - add_structured_data_jsonld: - type: boolean - label: 'Add current breadcrumb as structured data in JSON-LD to the HTML head' use_site_title: type: boolean label: 'Use site title for the front page segment in the breadcrumb' + add_structured_data_json_ld: + type: boolean + label: 'Add current breadcrumb as structured data in JSON-LD to the HTML head' + capitalizator_mode: + type: string + label: 'Transformation mode for the segments titles' + capitalizator_ignored_words: + type: sequence + label: 'Words to be ignored by the capitalizator' + sequence: + type: text + label: 'Ignored word' + capitalizator_forced_words: + type: sequence + label: 'Words to be forced to capitalized by the capitalizator' + sequence: + type: text + label: 'Forced word' + capitalizator_forced_words_case_sensitivity: + type: boolean + label: 'Use case sensitivity when matching words to be forced to capitalization.' + capitalizator_forced_words_first_letter: + type: boolean + label: 'Make the first letters of each segment capitalized.' + follow_redirects: + type: boolean + label: 'Follow redirects if the redirect module is enabled.' + limit_segment_display: + type: boolean + label: 'Limit breadcrumb trail segments' + segment_display_limit: + type: number + label: 'Breadcrumb segment count' + truncator_mode: + type: boolean + label: 'Enable truncation for titles.' + truncator_length: + type: text + label: 'Set the limit for truncation.' + truncator_dots: + type: boolean + label: 'Enable dots at the end of truncation.' diff --git a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml index 5e08396a4b92a3df9f9c4826e93fce610104d70b..4c734193624de670158c7badce5663950c4dd95e 100644 --- a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml +++ b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.info.yml @@ -1,11 +1,12 @@ name: 'Easy Breadcrumb' type: module description: 'Provides configurable path based breadcrumbs.' +package: 'Navigation' core: 8.x core_version_requirement: ^8 || ^9 configure: easy_breadcrumb.general_settings_form -# Information added by Drupal.org packaging script on 2020-07-22 -version: '8.x-1.13' +# Information added by Drupal.org packaging script on 2021-03-09 +version: '8.x-1.15' project: 'easy_breadcrumb' -datestamp: 1595377204 +datestamp: 1615310469 diff --git a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install index d2ef72df53e05330437468064200fb87702e5ce7..169ff8b1f03cc248d4711df0f5ccead07c8bbded 100644 --- a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install +++ b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.install @@ -68,6 +68,57 @@ function easy_breadcrumb_update_8005() { drupal_flush_all_caches(); } +/** + * Fix configuration. + */ +function easy_breadcrumb_update_8006() { + $config = \Drupal::configFactory()->getEditable(EasyBreadcrumbConstants::MODULE_SETTINGS); + + $config + // This key is now named 'add_structured_data_json_ld'. + ->clear('add_structured_data_jsonld') + // This key is unnecessary. + ->clear('dependencies'); + + // Add missing keys if not present. + $potentially_missing_keys = [ + EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD => FALSE, + EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS => [], + EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS => FALSE, + EasyBreadcrumbConstants::EXCLUDED_PATHS => '', + EasyBreadcrumbConstants::REPLACED_TITLES => '', + EasyBreadcrumbConstants::CUSTOM_PATHS => '', + EasyBreadcrumbConstants::TITLE_SEGMENT_AS_LINK => FALSE, + ]; + $data = $config->get(); + foreach ($potentially_missing_keys as $key => $default) { + if (!isset($data[$key])) { + $config->set($key, $default); + } + } + + // Fix variable types. + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER, (bool) $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER)); + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY, (bool) $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY)); + $config->set(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD, (bool) $config->get(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD)); + + // Change 'capitalizator_ignored_words' and 'capitalizator_forced_words' to be + // lists rather than maps. + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS, array_values($config->get(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS) ?: [])); + $config->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, array_values($config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS) ?: [])); + + $config->save(TRUE); +} + +/** + * Enable follow redirects. + */ +function easy_breadcrumb_update_8007() { + $config = \Drupal::configFactory()->getEditable(EasyBreadcrumbConstants::MODULE_SETTINGS); + $config->set(EasyBreadcrumbConstants::FOLLOW_REDIRECTS, TRUE); + $config->save(TRUE); +} + /** * Implements hook_install(). * diff --git a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml index 2a98661fca51f321ff57ff9487832665e75aae6b..c2abae63b62685df43d5abececdc3d814df4bbd6 100644 --- a/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml +++ b/web/modules/contrib/easy_breadcrumb/easy_breadcrumb.services.yml @@ -7,3 +7,9 @@ services: easy_breadcrumb.structured_data_json_ld: class: Drupal\easy_breadcrumb\EasyBreadcrumbStructuredDataJsonLd arguments: ['@easy_breadcrumb.breadcrumb', '@config.factory', '@current_route_match'] + logger.channel.easy_breadcrumb: + parent: logger.channel_base + arguments: ['easy_breadcrumb'] + easy_breadcrumb.title_resolver: + class: Drupal\easy_breadcrumb\TitleResolver + arguments: ['@controller_resolver', '@string_translation', '@http_kernel.controller.argument_resolver'] diff --git a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php old mode 100755 new mode 100644 index 35a401f9eb7860ab90c0b63f6b71050a55c4cc37..91cdf2f7cad63038df7a1cf12ba1428d7c7403c1 --- a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php +++ b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbBuilder.php @@ -3,6 +3,7 @@ namespace Drupal\easy_breadcrumb; use Drupal\Component\Render\MarkupInterface; +use Drupal\Component\Utility\Html; use Drupal\Component\Utility\Unicode; use Drupal\Component\Utility\Xss; use Drupal\Core\Access\AccessManagerInterface; @@ -38,6 +39,7 @@ use Symfony\Component\Routing\Exception\RouteNotFoundException; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityRepositoryInterface; +use Drupal\Core\Entity\ContentEntityInterface; /** * Primary implementation for the Easy Breadcrumb builder. @@ -96,7 +98,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface { /** * The title resolver. * - * @var \Drupal\Core\Controller\TitleResolverInterface + * @var \Drupal\easy_breadcrumb\TitleResolver */ protected $titleResolver; @@ -178,7 +180,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface { * The inbound path processor. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory service. - * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver + * @param \Drupal\easy_breadcrumb\TitleResolverInterface $title_resolver * The title resolver service. * @param \Drupal\Core\Session\AccountInterface $current_user * The current user object. @@ -219,6 +221,17 @@ public function __construct(RequestContext $context, AccessManagerInterface $acc $this->moduleHandler = $module_handler; } + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + // $container->get('easy_breadcrumb.title_resolver'),. + $definition = $container->getDefinition('easy_breadcrumb.title_resolver'), + $definition->setClass('Drupal\easy_breadcrumb\TitleResolver') + ); + } + /** * {@inheritdoc} */ @@ -250,6 +263,8 @@ public function build(RouteMatchInterface $route_match) { $curr_lang = $this->languageManager->getCurrentLanguage()->getId(); $replacedTitles = []; $mapValues = preg_split('/[\r\n]+/', $this->config->get(EasyBreadcrumbConstants::REPLACED_TITLES)); + $limit_display = $this->config->get(EasyBreadcrumbConstants::LIMIT_SEGMENT_DISPLAY); + $segment_limit = $this->config->get(EasyBreadcrumbConstants::SEGMENT_DISPLAY_LIMIT); foreach ($mapValues as $mapValue) { $values = explode("::", $mapValue); @@ -295,22 +310,39 @@ public function build(RouteMatchInterface $route_match) { $is_regex = preg_match('/^regex\s*!\s*\/(.*)/', $custom_path, $regex_match); if ($is_regex) { $custom_path = $regex_match[1]; - $url_group_matches = []; + $regex_group_matches = []; } // If the path matches the current path, build the breadcrumbs. if ( - ($is_regex && preg_match("|" . $custom_path . "|", $path, $url_group_matches)) + ($is_regex && preg_match("|" . $custom_path . "|", $path, $regex_group_matches)) || (!$is_regex && $path == $custom_path) ) { if ($this->config->get(EasyBreadcrumbConstants::INCLUDE_HOME_SEGMENT)) { $links[] = Link::createFromRoute($this->config->get(EasyBreadcrumbConstants::HOME_SEGMENT_TITLE), '<front>'); } + if ($is_regex && count($regex_group_matches) > 1) { + // Discard first element as that's the full matched string + // rather than a captured group. + array_shift($regex_group_matches); + } + // Get $title|[$url] pairs from $values. foreach ($values as $pair) { $settings = explode("|", $pair); - $title = Xss::filter(trim($settings[0])); + $title = Html::decodeEntities(Xss::filter(trim($settings[0]))); + + // If the custom title includes any regex match groups + // (eg. "/foo/(\d*)/bar") then check if the urls for any segments + // have matched group variables (eg. $1 or $3) and if they do + // substitute them out for the the corresponding + // matched strings. + if ($is_regex) { + foreach ($regex_group_matches as $group_num => $captured_str) { + $title = str_replace('$' . ($group_num + 1), urlencode($captured_str), $title); + } + } // Get URL if it is provided. $url = ''; @@ -322,11 +354,8 @@ public function build(RouteMatchInterface $route_match) { // have matched group variables (eg. $1 or $3) and if they do // substitute them out for the the corresponding // matched strings. - if ($is_regex && count($url_group_matches) > 1) { - // Discard first element as that's the full matched string - // rather than a captured group. - array_shift($url_group_matches); - foreach ($url_group_matches as $group_num => $captured_str) { + if ($is_regex) { + foreach ($regex_group_matches as $group_num => $captured_str) { $url = str_replace('$' . ($group_num + 1), urlencode($captured_str), $url); } } @@ -401,7 +430,7 @@ public function build(RouteMatchInterface $route_match) { // Remove the first parameter if it matches the current language. if (!($this->config->get(EasyBreadcrumbConstants::LANGUAGE_PATH_PREFIX_AS_SEGMENT))) { - if (mb_strtolower($path_elements[0]) == $curr_lang) { + if (mb_strtolower($path_elements[0]) == mb_strtolower($curr_lang)) { // Preserve case in language to allow path matching to work properly. $curr_lang = $path_elements[0]; @@ -410,7 +439,11 @@ public function build(RouteMatchInterface $route_match) { } } } - while (count($path_elements) > 0) { + + // Remove leading breadcrumb segments by limiting the following loop. + $loop_limit = ($limit_display && isset($segment_limit)) ? $segment_limit : 0; + + while (count($path_elements) > $loop_limit) { $check_path = '/' . implode('/', $path_elements); if ($add_langcode) { $check_path = '/' . $curr_lang . $check_path; @@ -434,15 +467,32 @@ public function build(RouteMatchInterface $route_match) { // the access result's cacheability metadata. if ($access->isAllowed()) { if ($this->config->get(EasyBreadcrumbConstants::TITLE_FROM_PAGE_WHEN_AVAILABLE)) { - $title = $this->normalizeText($this->getTitleString($route_request, $route_match, $replacedTitles)); - if (empty($title)) { - unset($title); + // Get the title if the current route represents an entity. + if (($route = $route_match->getRouteObject()) && ($parameters = $route->getOption('parameters'))) { + foreach ($parameters as $name => $options) { + if (isset($options['type']) && strpos($options['type'], 'entity:') === 0) { + $entity = $route_match->getParameter($name); + if ($entity instanceof ContentEntityInterface && $entity->hasLinkTemplate('canonical')) { + $title = $entity->label(); + break; + } + } + } } + else { + $title = $this->normalizeText($this->getTitleString($route_request, $route_match, $replacedTitles)); + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } + if (empty($title)) { + unset($title); + } - // If the title is to be replaced... - if (!empty($title) && array_key_exists($title, $replacedTitles)) { - // Replaces the title. - $title = $replacedTitles[(string) $title]; + // If the title is to be replaced... + if (!empty($title) && array_key_exists($title, $replacedTitles)) { + // Replaces the title. + $title = $replacedTitles[(string) $title]; + } } } if (!isset($title)) { @@ -460,6 +510,9 @@ public function build(RouteMatchInterface $route_match) { if ($title && array_key_exists($title, $replacedTitles)) { $title = $replacedTitles[$title]; } + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } } } else { @@ -468,6 +521,9 @@ public function build(RouteMatchInterface $route_match) { if (array_key_exists($title, $replacedTitles)) { $title = $replacedTitles[$title]; } + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } } } @@ -478,6 +534,9 @@ public function build(RouteMatchInterface $route_match) { if (array_key_exists($title, $replacedTitles)) { $title = $replacedTitles[$title]; } + if ($this->config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE)) { + $title = $this->truncator($title); + } } } @@ -487,7 +546,7 @@ public function build(RouteMatchInterface $route_match) { && !$this->config->get(EasyBreadcrumbConstants::TITLE_SEGMENT_AS_LINK)) { $links[] = Link::createFromRoute($title, '<none>'); } - else { + elseif ($route_match->getRouteObject()) { $url = Url::fromRouteMatch($route_match); if ($this->config->get(EasyBreadcrumbConstants::ABSOLUTE_PATHS)) { $url->setOption('absolute', TRUE); @@ -599,12 +658,48 @@ public function applyTitleReplacement(&$title, array $replacements) { * Either the current title string or NULL if unable to determine it. */ public function getTitleString(Request $route_request, RouteMatchInterface $route_match, array $replacedTitles) { - $title = $this->titleResolver->getTitle($route_request, $route_match->getRouteObject()); + try { + $title = $this->titleResolver->getTitle($route_request, $route_match->getRouteObject()); + } + catch (\InvalidArgumentException $exception) { + $title = NULL; + } $this->applyTitleReplacement($title, $replacedTitles); + // Title resolver only returns title if route defines a _title or + // _title_callback but some core routes like node.edit or block_content.edit + // uses $main_content['#title'] to set a title. Add an special case to set a + // title for {entity_type_id}.{operation} when it's possible. + if (NULL === $title && $entityForm = $route_match->getRouteObject()->getDefault('_entity_form')) { + $entityFormParts = explode('.', $entityForm); + + if (2 === count($entityFormParts)) { + $entity_type_id = $entityFormParts[0]; + $operation = $entityFormParts[1]; + + // Operations that can be used as a title: add, edit or delete. + if (in_array($operation, ['add', 'edit', 'delete'])) { + $title = $operation; + } + // Operations used to show the entity: default, view or preview. + elseif (in_array($operation, ['default', 'view', 'preview'])) { + if ($entity = $route_match->getParameter($entity_type_id)) { + if (is_object($entity)) { + if (method_exists($entity, 'getTitle')) { + $title = $entity->getTitle(); + } + elseif (method_exists($entity, 'label')) { + $title = $entity->label(); + } + } + } + } + } + } + // If title is object then try to render it. if ($title instanceof MarkupInterface) { - $title = strip_tags((string) $title); + $title = strip_tags(Html::decodeEntities($title)); } // Other paths, such as admin/structure/menu/manage/main, will // return a render array suitable to render using core's XSS filter. @@ -612,12 +707,10 @@ public function getTitleString(Request $route_request, RouteMatchInterface $rout // If this render array has #allowed tags use that instead of default. $tags = array_key_exists('#allowed_tags', $title) ? $title['#allowed_tags'] : NULL; - $title = Xss::filter($title['#markup'], $tags); + $title = Html::decodeEntities(Xss::filter($title['#markup'], $tags)); } - // If a route declares the title in an unexpected way, log and return NULL. if (!is_string($title)) { - $this->logger->get('easy_breadcrumb')->notice('Easy Breadcrumb could not determine the title to use for @path', ['@path' => $route_match->getRouteObject()->getPath()]); return NULL; } @@ -709,7 +802,7 @@ protected function getRequestForPath($path, array $exclude) { // Check to see if the path is actually a redirect, if it is, resolve it to // its source before we create the request. Strip the starting slash, // redirect module doesn't include it. - if ($this->moduleHandler->moduleExists('redirect')) { + if ($this->moduleHandler->moduleExists('redirect') && $this->config->get(EasyBreadcrumbConstants::FOLLOW_REDIRECTS)) { $redirect_path = $path; if ($redirect_path[0] === '/') { $redirect_path = substr($redirect_path, 1); @@ -799,7 +892,7 @@ private function normalizeText($raw_text) { for ($i = 1; $i < $words_quantity; ++$i) { // Transforms this word only if it is not in the list of ignored words. - if (!isset($ignored_words[$words[$i]])) { + if (!in_array($words[$i], $ignored_words, TRUE)) { $words[$i] = Unicode::ucfirst($words[$i]); } } @@ -846,7 +939,7 @@ private function normalizeText($raw_text) { } $normalized_text = implode(' ', $words); } - else { + elseif ($capitalizator_mode === 'ucfirst') { // Transforms the text 'once a time' to 'Once a time' (ucfirst). $normalized_text = Unicode::ucfirst($normalized_text); @@ -855,4 +948,24 @@ private function normalizeText($raw_text) { return $normalized_text; } + /** + * Truncate the title. + * + * @param string $title + * Text/title to be truncated. + * + * @return array|\Drupal\Core\StringTranslation\TranslatableMarkup|false|mixed|string|null + * Return truncated title. + */ + public function truncator(string $title) { + $title = mb_strimwidth( + $title, + 0, + $this->config->get(EasyBreadcrumbConstants::TRUNCATOR_LENGTH), + $this->config->get(EasyBreadcrumbConstants::TRUNCATOR_DOTS) ? '...' : '', + 'utf8' + ); + return $title; + } + } diff --git a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php index 8172ab1c41686b2a58533aa77676b6534151ec35..24429d2ab41091c8364beebc701fd065202406f1 100644 --- a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php +++ b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbConstants.php @@ -51,6 +51,11 @@ class EasyBreadcrumbConstants { */ const INCLUDE_HOME_SEGMENT = 'include_home_segment'; + /** + * Alternative title field for breadcrumbs. + */ + const ALTERNATIVE_TITLE_FIELD = 'alternative_title_field'; + /** * Title for the front page segment. */ @@ -146,6 +151,36 @@ class EasyBreadcrumbConstants { */ const ADD_STRUCTURED_DATA_JSON_LD = 'add_structured_data_json_ld'; + /** + * Follow redirects in case the redirect module is enabled. + */ + const FOLLOW_REDIRECTS = 'follow_redirects'; + + /** + * Limit breadcrumb trail segments. + */ + const LIMIT_SEGMENT_DISPLAY = 'limit_segment_display'; + + /** + * Breadcrumb segment count. + */ + const SEGMENT_DISPLAY_LIMIT = 'segment_display_limit'; + + /** + * Breadcrumb truncator mode. + */ + const TRUNCATOR_MODE = 'truncator_mode'; + + /** + * Breadcrumb truncator length. + */ + const TRUNCATOR_LENGTH = 'truncator_length'; + + /** + * Breadcrumbs truncator dots. + */ + const TRUNCATOR_DOTS = 'truncator_dots'; + /** * Default list of excluded paths. * diff --git a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php index 9dfeb8c74a26107bf134f269cc5de108aa4a9050..e0a204e34bf9a8aaee5bfc296e50a1bdd4dd882b 100644 --- a/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php +++ b/web/modules/contrib/easy_breadcrumb/src/EasyBreadcrumbStructuredDataJsonLd.php @@ -91,6 +91,10 @@ public function value() { $name = $link->getText(); $item = $link->getUrl()->setAbsolute(TRUE)->toString(); + // Escape " to produce valid json for titles with "" in them. + $name = str_replace('"','\"', $name); + $item = str_replace('"','\"', $item); + // Add a comma before each item except the first. if ($position > 1) { $value .= ','; @@ -112,6 +116,7 @@ public function value() { "name": "' . $name . '" }'; } + // Increment position for next run. $position++; diff --git a/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php b/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php index b4b3448f4f49addcdde71c95f48cb054653e0c02..b83f704ceeffd39c7adab011d7386517c0520d28 100644 --- a/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php +++ b/web/modules/contrib/easy_breadcrumb/src/Form/EasyBreadcrumbGeneralSettingsForm.php @@ -84,6 +84,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get(EasyBreadcrumbConstants::INCLUDE_HOME_SEGMENT), ]; + $details_general[EasyBreadcrumbConstants::ALTERNATIVE_TITLE_FIELD] = [ + '#type' => 'textfield', + '#title' => $this->t('Alternative title field name for breadcrumb'), + '#description' => $this->t('This field name is to be added in the entity to display the alternative title in the breadcrumb.'), + '#default_value' => $config->get(EasyBreadcrumbConstants::ALTERNATIVE_TITLE_FIELD), + ]; + $details_general[EasyBreadcrumbConstants::HOME_SEGMENT_TITLE] = [ '#type' => 'textfield', '#title' => $this->t('Title for the front page segment in the breadcrumb'), @@ -110,6 +117,16 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => $this->t('Use page title as fallback for menu title'), '#description' => $this->t('Use page title as fallback if menu title cannot be found. This option works when not using "real page title" above.'), '#default_value' => $config->get(EasyBreadcrumbConstants::USE_PAGE_TITLE_AS_MENU_TITLE_FALLBACK), + // This option is evaluated only if the USE_MENU_TITLE_AS_FALLBACK + // is checked. + '#states' => [ + 'disabled' => [ + ':input[name="' . EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK . '"]' => ['checked' => FALSE], + ], + 'invisible' => [ + ':input[name="' . EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK . '"]' => ['checked' => FALSE], + ], + ], ]; $details_general[EasyBreadcrumbConstants::USE_SITE_TITLE] = [ @@ -126,6 +143,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD), ]; + $details_general[EasyBreadcrumbConstants::FOLLOW_REDIRECTS] = [ + '#type' => 'checkbox', + '#title' => $this->t('Follow redirects.'), + '#description' => $this->t('In case the <a href="@href" target="_blank">redirect module</a> is enabled, follow the configured redirects', ['@href' => 'https://www.drupal.org/project/redirect']), + '#default_value' => $config->get(EasyBreadcrumbConstants::FOLLOW_REDIRECTS), + ]; + // Formats the excluded paths array as line separated list of paths // before displaying them. $excluded_paths = $config->get(EasyBreadcrumbConstants::EXCLUDED_PATHS); @@ -138,6 +162,20 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $excluded_paths, ]; + $details_general[EasyBreadcrumbConstants::LIMIT_SEGMENT_DISPLAY] = [ + '#type' => 'checkbox', + '#title' => $this->t('Limit breadcrumb trail segments'), + '#description' => $this->t('Limit the number of displayed breadcrumb trail segments.'), + '#default_value' => $config->get(EasyBreadcrumbConstants::LIMIT_SEGMENT_DISPLAY), + ]; + + $details_general[EasyBreadcrumbConstants::SEGMENT_DISPLAY_LIMIT] = [ + '#type' => 'number', + '#title' => $this->t('Breadcrumb segment count'), + '#description' => $this->t('Number of breadcrumb trail segments to display'), + '#default_value' => $config->get(EasyBreadcrumbConstants::SEGMENT_DISPLAY_LIMIT), + ]; + // Formats the excluded paths array as line separated list of paths // before displaying them. $replaced_titles = $config->get(EasyBreadcrumbConstants::REPLACED_TITLES); @@ -293,6 +331,41 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ]; + $details_advanced[EasyBreadcrumbConstants::TRUNCATOR_MODE] = [ + '#type' => 'checkbox', + '#title' => $this->t("Truncate the page's title to a maximum number."), + '#description' => t("Example: if you set it to 10, from <em>Long page title</em> will be <em>Long pa...</em>"), + '#default_value' => $config->get(EasyBreadcrumbConstants::TRUNCATOR_MODE), + ]; + + $details_advanced[EasyBreadcrumbConstants::TRUNCATOR_LENGTH] = [ + '#type' => 'textfield', + '#title' => $this->t("Set the limit of truncation"), + '#default_value' => $config->get(EasyBreadcrumbConstants::TRUNCATOR_LENGTH), + '#states' => [ + 'visible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => TRUE], + ], + 'invisible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => FALSE], + ], + ], + ]; + + $details_advanced[EasyBreadcrumbConstants::TRUNCATOR_DOTS] = [ + '#type' => 'checkbox', + '#title' => $this->t("The truncated page's title will have 3 dots in its end."), + '#default_value' => $config->get(EasyBreadcrumbConstants::TRUNCATOR_DOTS), + '#states' => [ + 'visible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => TRUE], + ], + 'invisible' => [ + ':input[name="' . EasyBreadcrumbConstants::TRUNCATOR_MODE . '"]' => ['checked' => FALSE], + ], + ], + ]; + $form = []; // Inserts the details for grouping general settings fields. @@ -309,7 +382,18 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $settings = $this->configFactory->getEditable(EasyBreadcrumbConstants::MODULE_SETTINGS); + // Get the values. $values = $form_state->cleanValues()->getValues(); + + // Convert words lists to arrays where required. + $keys_to_process = [ + EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS, + EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, + ]; + foreach ($keys_to_process as $key) { + $values[$key] = $this->processValuesToArray($values[$key]); + } + foreach ($values as $field_key => $field_value) { $settings->set($field_key, $field_value); } @@ -331,14 +415,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { * An array of processed words. */ private function processValuesToArray($words) { - $words_arr = []; - $words = preg_replace('/\r*\n+/', ' ', $words); - $words = trim($words); - $words_arr_aux = $words === '' ? [] : preg_split('/\s+/', $words); - foreach ($words_arr_aux as $word) { - $words_arr[$word] = $word; - } - return $words_arr; + return preg_split('/\s+/', $words, -1, PREG_SPLIT_NO_EMPTY); } } diff --git a/web/modules/contrib/easy_breadcrumb/src/TitleResolver.php b/web/modules/contrib/easy_breadcrumb/src/TitleResolver.php new file mode 100644 index 0000000000000000000000000000000000000000..776fb58aed8aa44e0b832e5b2d36a22da6e7c821 --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/src/TitleResolver.php @@ -0,0 +1,79 @@ +<?php + +namespace Drupal\easy_breadcrumb; + +use Drupal\Core\Controller\TitleResolver as ControllerTitleResolver; +use Drupal\Core\Url; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Route; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Component\Utility\Xss; + +/** + * Class TitleResolver. + */ +class TitleResolver extends ControllerTitleResolver { + + /** + * The field storage config storage. + * + * @var \Drupal\Core\Entity\EntityTypeManager + */ + protected $entityTypeManager; + + /** + * Breadcrumb config object. + * + * @var \Drupal\Core\Config\Config + */ + protected $config; + + /** + * Constructs a new EntityDisplayRebuilder. + * + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity manager. + * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory + * The config factory service. + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager, ConfigFactoryInterface $config_factory) { + $this->entityTypeManager = $entity_type_manager; + $this->config = $config_factory->get(EasyBreadcrumbConstants::MODULE_SETTINGS); + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity_type.manager'), + $container->get('config.factory') + ); + } + + /** + * {@inheritdoc} + */ + public function getTitle(Request $request, Route $route) { + $url = Url::fromUri("internal:" . $request->getRequestUri()); + $route_parts = explode(".", $url->getRouteName()); + $entity = NULL; + $params = $url->getRouteParameters(); + if ($route_parts[0] === 'entity' && $route_parts[2] === 'canonical') { + $entity_type = $route_parts[1]; + $entity = $this->entityTypeManager->getStorage($entity_type)->load($params[$entity_type]); + + } + if ($entity !== NULL) { + $alternative_title_field = $this->config->get(EasyBreadcrumbConstants::ALTERNATIVE_TITLE_FIELD); + if ($entity->hasField($alternative_title_field) && !$entity->get($alternative_title_field) + ->isEmpty()) { + return Xss::filter($entity->get($alternative_title_field)->value); + } + } + return parent::getTitle($request, $route); + } + +} diff --git a/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml b/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml index f22e6f9c7ce721e80509db87047ee3c2e0944a6d..bc2636ece972f202f876c4892ca462ce2e0f6460 100644 --- a/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml +++ b/web/modules/contrib/easy_breadcrumb/tests/modules/easy_breadcrumb_test/easy_breadcrumb_test.info.yml @@ -5,7 +5,7 @@ core: 8.x core_version_requirement: ^8 || ^9 type: module -# Information added by Drupal.org packaging script on 2020-07-22 -version: '8.x-1.13' +# Information added by Drupal.org packaging script on 2021-03-09 +version: '8.x-1.15' project: 'easy_breadcrumb' -datestamp: 1595377204 +datestamp: 1615310469 diff --git a/web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php new file mode 100644 index 0000000000000000000000000000000000000000..06d7869d9909b08ba55306ec2e3b85ead7d3817d --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/EasyBreabcrumbConfigureTest.php @@ -0,0 +1,111 @@ +<?php + +namespace Drupal\Tests\easy_email\Functional; + +use Drupal\Core\Serialization\Yaml; +use Drupal\easy_breadcrumb\EasyBreadcrumbConstants; +use Drupal\Tests\BrowserTestBase; + +/** + * Tests configuring easy_breadcrumb. + * + * @group easy_breadcrumb + */ +class EasyBreabcrumbConfigureTest extends BrowserTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = ['easy_breadcrumb']; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * Tests configuring easy_breadcrumb. + */ + public function testAdministration() { + $assert = $this->assertSession(); + + $config_after_install = $this->config('easy_breadcrumb.settings')->get(); + $this->drupalGet('admin/config/user-interface/easy-breadcrumb'); + $assert->statusCodeEquals(403); + + $this->drupalLogin($this->createUser(['administer easy breadcrumb'])); + $this->drupalGet('admin/config/user-interface/easy-breadcrumb'); + $assert->statusCodeEquals(200); + $this->submitForm([], 'Save configuration'); + $assert->statusCodeEquals(200); + $assert->pageTextContainsOnce('The configuration options have been saved.'); + $this->assertSame($config_after_install, $this->config('easy_breadcrumb.settings')->get()); + } + + /** + * Tests easy_breadcrumb_update_8006() on default install config. + */ + public function test8006DefaultConfigurationUpdate() { + $this->doUpdateTest(__DIR__ . '/fixtures/pre8006_default_configuration.yml'); + } + + /** + * Tests easy_breadcrumb_update_8006() on config that has been saved via form. + */ + public function test8006AfterFormSaveConfigurationUpdate() { + $this->doUpdateTest(__DIR__ . '/fixtures/pre8006_after_form_save_configuration.yml'); + } + + /** + * Tests easy_breadcrumb_update_8006(). + * + * Calls the update method manually on a fixture. + * + * @param string $fixture + * Path to fixture. + */ + protected function doUpdateTest($fixture) { + $assert = $this->assertSession(); + module_load_install('easy_breadcrumb'); + + // Reset the configuration to pre 8006 values. Directly write to the + // database to avoid schema checking. + $pre8006_install_configuration = Yaml::decode(file_get_contents($fixture)); + \Drupal::database()->update('config') + ->fields([ + 'data' => serialize($pre8006_install_configuration), + ]) + ->condition('name', 'easy_breadcrumb.settings') + ->condition('collection', '') + ->execute(); + + // Run the update. + easy_breadcrumb_update_8006(); + $this->refreshVariables(); + + $config_after_update = $this->config('easy_breadcrumb.settings')->get(); + $this->assertArrayNotHasKey('dependencies', $config_after_update); + $this->assertArrayNotHasKey('add_structured_data_jsonld', $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::ADD_STRUCTURED_DATA_JSON_LD, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::EXCLUDED_PATHS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::REPLACED_TITLES, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::CUSTOM_PATHS, $config_after_update); + $this->assertArrayHasKey(EasyBreadcrumbConstants::TITLE_SEGMENT_AS_LINK, $config_after_update); + // Ensure that 'capitalizator_ignored_words' and + // 'capitalizator_forced_words' are lists and not maps. + $this->assertSame(array_keys($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS]), array_keys(array_values($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS]))); + $this->assertSame(array_keys($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS]), array_keys(array_values($config_after_update[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS]))); + + // Easy configuration is not changed by visiting configuration form. + $this->drupalLogin($this->createUser(['administer easy breadcrumb'])); + $this->drupalGet('admin/config/user-interface/easy-breadcrumb'); + $assert->statusCodeEquals(200); + $this->submitForm([], 'Save configuration'); + $assert->statusCodeEquals(200); + $assert->pageTextContainsOnce('The configuration options have been saved.'); + $this->assertSame($config_after_update, $this->config('easy_breadcrumb.settings')->get()); + } + +} diff --git a/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml new file mode 100644 index 0000000000000000000000000000000000000000..345a1cee697811c53816a769c25814d67a3612e8 --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_after_form_save_configuration.yml @@ -0,0 +1,43 @@ +applies_admin_routes: true +include_home_segment: true +home_segment_title: Home +home_segment_keep: false +include_title_segment: true +language_path_prefix_as_segment: false +use_menu_title_as_fallback: false +use_page_title_as_menu_title_fallback: false +remove_repeated_segments: true +term_hierarchy: false +absolute_paths: false +hide_single_home_item: false +title_from_page_when_available: true +capitalizator_mode: ucwords +capitalizator_ignored_words: + of: of + and: and + or: or + de: de + del: del + 'y': 'y' + o: o + a: a +capitalizator_forced_words_first_letter: 0 +capitalizator_forced_words_case_sensitivity: 1 +add_structured_data_jsonld: false +use_site_title: false +dependencies: + module: + - easy_breadcrumb + enforced: + module: + - easy_breadcrumb +_core: + default_config_hash: ey8bRwK17YbAVEX7GEm09YR5UneOQ_Nqzh6a3V-rIP0 +include_invalid_paths: false +add_structured_data_json_ld: 0 +excluded_paths: '' +replaced_titles: '' +custom_paths: '' +title_segment_as_link: false +capitalizator_forced_words: + test: test diff --git a/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml new file mode 100644 index 0000000000000000000000000000000000000000..21d8c9535096430bdc7e92343d1344f41edca4ac --- /dev/null +++ b/web/modules/contrib/easy_breadcrumb/tests/src/Functional/fixtures/pre8006_default_configuration.yml @@ -0,0 +1,33 @@ +applies_admin_routes: TRUE +include_home_segment: TRUE +home_segment_title: 'Home' +home_segment_keep: FALSE +include_title_segment: TRUE +language_path_prefix_as_segment: FALSE +use_menu_title_as_fallback: FALSE +use_page_title_as_menu_title_fallback: FALSE +remove_repeated_segments: TRUE +term_hierarchy: FALSE +absolute_paths: FALSE +hide_single_home_item: FALSE +title_from_page_when_available: TRUE +capitalizator_mode: 'ucwords' +capitalizator_ignored_words: + - of + - and + - or + - de + - del + - y + - o + - a +capitalizator_forced_words_first_letter: FALSE +capitalizator_forced_words_case_sensitivity: TRUE +add_structured_data_jsonld: FALSE +use_site_title: FALSE +dependencies: + module: + - easy_breadcrumb + enforced: + module: + - easy_breadcrumb diff --git a/web/modules/contrib/entity_reference_revisions/composer.json b/web/modules/contrib/entity_reference_revisions/composer.json index 7fdfb2e91999c1c74d5a33474ad0cc79a209f845..793e16e23a0fb297906125786332c2c580f3a2b3 100644 --- a/web/modules/contrib/entity_reference_revisions/composer.json +++ b/web/modules/contrib/entity_reference_revisions/composer.json @@ -2,7 +2,7 @@ "name": "drupal/entity_reference_revisions", "description": "Entity Reference Revisions", "type": "drupal-module", - "license": "GPL-2.0", + "license": "GPL-2.0-or-later", "require": { "drupal/core": "^8.7.7 || ^9" }, diff --git a/web/modules/contrib/entity_reference_revisions/drush.services.yml b/web/modules/contrib/entity_reference_revisions/drush.services.yml new file mode 100644 index 0000000000000000000000000000000000000000..fad7549bb6e21368e64463de95a53f5cd8aae187 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/drush.services.yml @@ -0,0 +1,6 @@ +services: + entity_reference_revisions.commands: + class: \Drupal\entity_reference_revisions\Commands\EntityReferenceRevisionsCommands + arguments: ['@entity_reference_revisions.orphan_purger'] + tags: + - { name: drush.command } diff --git a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml index 55807d43482d557361720824c7805204112f28af..0549cb09b017f77ffd6310062f40a788f465db6a 100644 --- a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml +++ b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.info.yml @@ -3,8 +3,10 @@ type: module description: Adds a Entity Reference field type with revision support. core_version_requirement: ^8.7.7 || ^9 package: Field types +dependencies: + - drupal:field -# Information added by Drupal.org packaging script on 2020-03-11 -version: '8.x-1.8' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-1.9' project: 'entity_reference_revisions' -datestamp: 1583961849 +datestamp: 1614805875 diff --git a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml index d112df982e4c4830e49666f570e9819ffadb4056..d72705c44dee956c37212cdf6c254b4eb7582852 100755 --- a/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml +++ b/web/modules/contrib/entity_reference_revisions/entity_reference_revisions.services.yml @@ -1,4 +1,4 @@ services: entity_reference_revisions.orphan_purger: class: Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger - arguments: ['@entity_type.manager', '@date.formatter', '@datetime.time', '@database', '@messenger'] + arguments: ['@entity_type.manager', '@entity_field.manager', '@date.formatter', '@datetime.time', '@database', '@messenger'] diff --git a/web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php b/web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php new file mode 100644 index 0000000000000000000000000000000000000000..d23d307851dc423c03fee9ddc9f6b4d3cae33a93 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/src/Commands/EntityReferenceRevisionsCommands.php @@ -0,0 +1,62 @@ +<?php + +namespace Drupal\entity_reference_revisions\Commands; + +use Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger; +use Drush\Commands\DrushCommands; +use Drush\Drush; +use Drush\Utils\StringUtils; + +/** + * A Drush commandfile. + */ +class EntityReferenceRevisionsCommands extends DrushCommands { + + /** + * The purger service. + * + * @var \Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger + */ + protected $purger; + + /** + * Constructs a ERRCommands object. + * + * @param \Drupal\entity_reference_revisions\EntityReferenceRevisionsOrphanPurger $purger + */ + public function __construct(EntityReferenceRevisionsOrphanPurger $purger) { + $this->purger = $purger; + } + + /** + * Orphan composite revision deletion. + * + * @param $types + * A comma delimited list of entity types to check for orphans. Omit to + * choose from a list. + * @usage drush err:purge paragraph + * Purge orphaned paragraphs. + * + * @command err:purge + * @aliases errp + */ + public function purge($types) { + $this->purger->setBatch(StringUtils::csvToArray($types)); + drush_backend_batch_process(); + } + + /** + * @hook interact err:purge + */ + public function interact($input, $output) { + if (empty($input->getArgument('types'))) { + $choices = []; + foreach ($this->purger->getCompositeEntityTypes() as $entity_type) { + $choices[(string) $entity_type->id()] = (string) $entity_type->getLabel(); + } + $selected = $this->io()->choice(dt("Choose the entity type to clear"), $choices); + $input->setArgument('types', $selected); + } + } + +} diff --git a/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php b/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php index 8735817fc013be61a37c740895dfaa743b836d46..ed7604c3d26ebb70577bf07ab25351d6a731941f 100644 --- a/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php +++ b/web/modules/contrib/entity_reference_revisions/src/EntityReferenceRevisionsOrphanPurger.php @@ -6,6 +6,7 @@ use Drupal\Core\Database\Connection; use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Site\Settings; @@ -40,6 +41,13 @@ class EntityReferenceRevisionsOrphanPurger { */ protected $entityTypeManager; + /** + * The entity field manager. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface + */ + protected $entityFieldManager; + /** * The date formatter service. * @@ -80,6 +88,8 @@ class EntityReferenceRevisionsOrphanPurger { * * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. + * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager + * The entity field manager. * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter * The date formatter service. * @param \Drupal\Component\Datetime\TimeInterface $time @@ -89,8 +99,9 @@ class EntityReferenceRevisionsOrphanPurger { * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger service. */ - public function __construct(EntityTypeManagerInterface $entity_type_manager, DateFormatterInterface $date_formatter, TimeInterface $time, Connection $database, MessengerInterface $messenger) { + public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, DateFormatterInterface $date_formatter, TimeInterface $time, Connection $database, MessengerInterface $messenger) { $this->entityTypeManager = $entity_type_manager; + $this->entityFieldManager = $entity_field_manager; $this->dateFormatter = $date_formatter; $this->time = $time; $this->database = $database; @@ -138,10 +149,10 @@ public function deleteUnusedRevision(ContentEntityInterface $composite_revision) * * @param string $entity_type_id * The entity type id, for example 'paragraph'. - * @param array $context + * @param Iterable|array $context * The context array. */ - public function deleteOrphansBatchOperation($entity_type_id, array &$context) { + public function deleteOrphansBatchOperation($entity_type_id, &$context) { $composite_type = $this->entityTypeManager->getDefinition($entity_type_id); $composite_revision_key = $composite_type->getKey('revision'); /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $composite_storage */ @@ -349,22 +360,45 @@ protected function isValidParent($parent_type, $parent_field_name) { } $status = static::PARENT_VALID; + // If the parent type does not exist anymore, the composite is not used. if (!$this->entityTypeManager->hasDefinition($parent_type)) { $status = static::PARENT_INVALID_DELETE; } - // Check if the parent field is valid. - elseif (!($parent_field_config = $this->entityTypeManager->getStorage('field_storage_config')->load("$parent_type.$parent_field_name"))) { - $status = static::PARENT_INVALID_DELETE; - } - // In case the parent field has no target revision ID key we can not be sure - // that this revision is not used anymore. - elseif (empty($parent_field_config->getSchema()['columns']['target_revision_id'])) { - $status = static::PARENT_INVALID_SKIP; + else { + $parent_field_definitions = $this->entityFieldManager->getFieldStorageDefinitions($parent_type); + if (!isset($parent_field_definitions[$parent_field_name])) { + $status = static::PARENT_INVALID_DELETE; + } + // In case the parent field has no target revision ID key we can not be + // sure that this revision is not used anymore. + elseif (empty($parent_field_definitions[$parent_field_name]->getSchema()['columns']['target_revision_id'])) { + $status = static::PARENT_INVALID_SKIP; + } } $this->validParents[$parent_type][$parent_field_name] = $status; return $status; } + /** + * Returns a list of composite entity types. + * + * @return \Drupal\Core\Entity\EntityTypeInterface[] + * An array of composite entity types. + */ + public function getCompositeEntityTypes() { + $composite_entity_types = []; + $entity_types = $this->entityTypeManager->getDefinitions(); + foreach ($entity_types as $entity_type) { + $has_parent_type_field = $entity_type->get('entity_revision_parent_type_field'); + $has_parent_id_field = $entity_type->get('entity_revision_parent_id_field'); + $has_parent_field_name_field = $entity_type->get('entity_revision_parent_field_name_field'); + if ($has_parent_type_field && $has_parent_id_field && $has_parent_field_name_field) { + $composite_entity_types[] = $entity_type; + } + } + return $composite_entity_types; + } + } diff --git a/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php b/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php index b3da36da6bfd8fdadf272c8543b3eba134f0bdee..6267c979bb01c340410912633465f55bc3eaa0b6 100644 --- a/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php +++ b/web/modules/contrib/entity_reference_revisions/src/Form/OrphanedCompositeEntitiesDeleteForm.php @@ -80,7 +80,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#markup' => $this->t('Delete orphaned composite entities revisions that are no longer referenced. If there are no revisions left, the entity will be deleted as long as it is not used.'), ]; $options = []; - foreach ($this->getCompositeEntityTypes() as $entity_type) { + foreach ($this->purger->getCompositeEntityTypes() as $entity_type) { $options[$entity_type->id()] = $entity_type->getLabel(); } $form['composite_entity_types'] = [ @@ -107,24 +107,4 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $this->purger->setBatch(array_filter($form_state->getValue('composite_entity_types'))); } - /** - * Returns a list of composite entity types. - * - * @return \Drupal\Core\Entity\EntityTypeInterface[] - * An array of composite entity types. - */ - public function getCompositeEntityTypes() { - $composite_entity_types = []; - $entity_types = $this->entityTypeManager->getDefinitions(); - foreach ($entity_types as $entity_type) { - $has_parent_type_field = $entity_type->get('entity_revision_parent_type_field'); - $has_parent_id_field = $entity_type->get('entity_revision_parent_id_field'); - $has_parent_field_name_field = $entity_type->get('entity_revision_parent_field_name_field'); - if ($has_parent_type_field && $has_parent_id_field && $has_parent_field_name_field) { - $composite_entity_types[] = $entity_type; - } - } - return $composite_entity_types; - } - } diff --git a/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php b/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php index 16496dbc7e47247060fba0fa32077359b520d337..4a313ea6c70185ebef17df52379d34e2467a8b9e 100644 --- a/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php +++ b/web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php @@ -472,11 +472,6 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin $selection_manager = \Drupal::service('plugin.manager.entity_reference_selection'); $entity_manager = \Drupal::entityTypeManager(); - // Bail if there are no referenceable entities. - if (!$selection_manager->getSelectionHandler($field_definition)->getReferenceableEntities()) { - return; - } - // ERR field values are never cross referenced so we need to generate new // target entities. First, find the target entity type. $target_type_id = $field_definition->getFieldStorageDefinition()->getSetting('target_type'); @@ -486,7 +481,14 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin // Determine referenceable bundles. $bundle_manager = \Drupal::service('entity_type.bundle.info'); if (isset($handler_settings['target_bundles']) && is_array($handler_settings['target_bundles'])) { - $bundles = $handler_settings['target_bundles']; + if (empty($handler_settings['negate'])) { + $bundles = $handler_settings['target_bundles']; + } + else { + $bundles = array_filter($bundle_manager->getBundleInfo($target_type_id), function ($bundle) use ($handler_settings) { + return !in_array($bundle, $handler_settings['target_bundles'], TRUE); + }); + } } else { $bundles = $bundle_manager->getBundleInfo($target_type_id); diff --git a/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php b/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php index d4baf31c65e7076e773e56993ba73ec2a8c0523e..6bbd60ad2845c29130842f4a5dcbf73b1617bea4 100644 --- a/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php +++ b/web/modules/contrib/entity_reference_revisions/src/Plugin/migrate/destination/EntityReferenceRevisions.php @@ -17,6 +17,8 @@ * - new_revisions: (optional) Flag to indicate if a new revision should be * created instead of updating a previous default record. Only applicable when * providing an entity id without a revision_id. + * - force_revision: (optional) Flag to ignore other checks and always create a + * revision. * * @MigrateDestination( * id = "entity_reference_revisions", @@ -102,9 +104,15 @@ protected function getEntity(Row $row, array $oldDestinationIdValues) { $entity_id = $oldDestinationIdValues ? array_shift($oldDestinationIdValues) : $this->getEntityId($row); - $revision_id = $oldDestinationIdValues ? - array_pop($oldDestinationIdValues) : - $row->getDestinationProperty($this->getKey('revision')); + $configuration = $this->getConfiguration(); + if (isset($configuration['force_revision']) && $configuration['force_revision'] == TRUE) { + $revision_id = NULL; + } + else { + $revision_id = $oldDestinationIdValues ? + array_pop($oldDestinationIdValues) : + $row->getDestinationProperty($this->getKey('revision')); + } // If a specific revision_id is supplied and exists, assert the entity_id // matches (if supplied), and update the revision. diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml index 7b906fc29d371869a923883fddcde58671fc1faf..fe3a5aacc2954c5235d039f1581453c589f972b9 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_composite_relationship_test/entity_composite_relationship_test.info.yml @@ -8,7 +8,7 @@ dependencies: - entity_reference_revisions:entity_reference_revisions - drupal:entity_test -# Information added by Drupal.org packaging script on 2020-03-11 -version: '8.x-1.8' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-1.9' project: 'entity_reference_revisions' -datestamp: 1583961849 +datestamp: 1614805875 diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..5a32314affc06bbbe5ec3aa65758afa28d9cee0e --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.info.yml @@ -0,0 +1,13 @@ +name: 'Entity Host Base Field ERR' +type: module +description: 'Entity host with base field definition using entity_reference_revisions.' +package: Testing +core_version_requirement: ^8.7.7 || ^9 + +dependencies: + - entity_composite_relationship_test:entity_composite_relationship_test + +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-1.9' +project: 'entity_reference_revisions' +datestamp: 1614805875 diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml new file mode 100644 index 0000000000000000000000000000000000000000..b3f2556341cd7ce5f0b8f96b8eefbb2f191457bb --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/entity_host_relationship_test.permissions.yml @@ -0,0 +1,2 @@ +administer entity_test host: + title: administer entity_test host diff --git a/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php new file mode 100644 index 0000000000000000000000000000000000000000..7c588fba1bff83a188ed4854fe4cf5ada7c2a557 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/modules/entity_host_relationship_test/src/Entity/EntityTestHostRelationship.php @@ -0,0 +1,51 @@ +<?php + +namespace Drupal\entity_host_relationship_test\Entity; + +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\RevisionableInterface; +use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\entity_test\Entity\EntityTestMulRev; + +/** + * Defines the test entity class. + * + * @ContentEntityType( + * id = "entity_host_relationship_test", + * label = @Translation("Test entity host"), + * base_table = "entity_test_host", + * revision_table = "entity_test_host_revision", + * data_table = "entity_test_host_field_data", + * revision_data_table = "entity_test_host_field_revision", + * content_translation_ui_skip = TRUE, + * translatable = TRUE, + * admin_permission = "administer entity_test host", + * entity_keys = { + * "id" = "id", + * "uuid" = "uuid", + * "revision" = "revision_id", + * "bundle" = "type", + * "label" = "name", + * "langcode" = "langcode", + * } + * ) + */ +class EntityTestHostRelationship extends EntityTestMulRev implements RevisionableInterface { + + /** + * {@inheritdoc} + */ + public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { + $fields = parent::baseFieldDefinitions($entity_type); + + $fields['entity'] = BaseFieldDefinition::create('entity_reference_revisions') + ->setLabel(t('Entity test composite')) + ->setRevisionable(TRUE) + ->setSetting('target_type', 'entity_test_composite') + ->setDisplayConfigurable('form', TRUE) + ->setDisplayConfigurable('view', TRUE); + + return $fields; + } +} diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php index f2618b914f8337a868ec65d627c1d37a85e734a3..e26f480dce37347dbdc73fb15df99a918d508a50 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAdminTest.php @@ -94,7 +94,8 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => $title, 'body[0][value]' => 'Revision 1', ); - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText('Revision 1'); $node = $this->drupalGetNodeByTitle($title); @@ -107,7 +108,7 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => 'Entity reference revision content', 'field_entity_reference_revisions[1][target_id]' => $node->label() . ' (' . $node->id() . ')', ]; - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, 'Save'); $this->assertLinkByHref('node/' . $node_target->id()); $this->assertText('Entity revisions Entity reference revision content has been created.'); $this->assertText('Entity reference revision content'); @@ -119,7 +120,8 @@ public function testEntityReferenceRevisions() { 'body[0][value]' => 'Revision 2', 'revision' => TRUE, ); - $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText('Revision 2'); @@ -137,7 +139,8 @@ public function testEntityReferenceRevisions() { 'label' => 'Entity reference revisions field', 'field_name' => 'entity_ref_revisions_field', ); - $this->drupalPostForm('admin/structure/types/manage/entity_revisions/fields/add-field', $edit, t('Save and continue')); + $this->drupalGet('admin/structure/types/manage/entity_revisions/fields/add-field'); + $this->submitForm($edit, 'Save and continue'); $this->assertNoOption('edit-settings-target-type', 'user'); $this->assertOption('edit-settings-target-type', 'node'); diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php index 95cff09154cc2b9a6778faa3ea025dc94999182e..602fff55a077ea4b4f4870850ff01a38b1e9a042 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsAutocompleteTest.php @@ -86,7 +86,8 @@ public function testEntityReferenceRevisionsAutocompleteProcessing() { 'info[0][value]' => $block_label, 'body[0][value]' => $block_content, ); - $this->drupalPostForm('block/add', $edit, t('Save')); + $this->drupalGet('block/add'); + $this->submitForm($edit, 'Save'); $block = $this->drupalGetBlockByInfo($block_label); // Create an article. @@ -96,7 +97,8 @@ public function testEntityReferenceRevisionsAutocompleteProcessing() { 'body[0][value]' => 'Revision 1', 'field_entity_reference_revisions[0][target_id]' => $block_label . ' (' . $block->id() . ')', ); - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText(Html::escape($block_content)); @@ -144,7 +146,8 @@ function createBlockContentType($parameters) { 'id' => $machine_name, 'revision' => TRUE, ); - $this->drupalPostForm('admin/structure/block/block-content/types/add', $edit, t('Save')); + $this->drupalGet('admin/structure/block/block-content/types/add'); + $this->submitForm($edit, 'Save'); $this->assertText($label); } diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php index a79d4d94dbbb8bf5029faa00458b05d10f46a2b5..f924f3f15eb448bbd21292fec8863a105871c26e 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsDiffTest.php @@ -82,7 +82,8 @@ public function testEntityReferenceRevisionsDiff() { 'title[0][value]' => $title_node_1, 'body[0][value]' => 'body_node_1', ]; - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); // Create second referenced node. $title_node_2 = 'referenced_node_2'; @@ -90,7 +91,8 @@ public function testEntityReferenceRevisionsDiff() { 'title[0][value]' => $title_node_2, 'body[0][value]' => 'body_node_2', ]; - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); // Create referencing node. $title = 'referencing_node'; @@ -99,11 +101,12 @@ public function testEntityReferenceRevisionsDiff() { 'title[0][value]' => $title, 'field_err_field[0][target_id]' => $title_node_1 . ' (' . $node->id() . ')', ]; - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); // Check the plugin is set. $this->drupalGet('admin/config/content/diff/fields'); - $this->drupalPostForm(NULL, ['fields[node__field_err_field][plugin][type]' => 'entity_reference_revisions_field_diff_builder'], t('Save')); + $this->submitForm(['fields[node__field_err_field][plugin][type]' => 'entity_reference_revisions_field_diff_builder'], 'Save'); // Update the referenced node of the err field and create a new revision. $node = $this->drupalGetNodeByTitle($title); @@ -112,10 +115,12 @@ public function testEntityReferenceRevisionsDiff() { 'field_err_field[0][target_id]' => $title_node_2 . ' (' . $referenced_node_new->id() . ')', 'revision' => TRUE, ]; - $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->submitForm($edit, 'Save'); // Compare the revisions of the referencing node. - $this->drupalPostForm('node/' . $node->id() . '/revisions', [], t('Compare selected revisions')); + $this->drupalGet('node/' . $node->id() . '/revisions'); + $this->submitForm([], 'Compare selected revisions'); // Assert the field changes. $this->assertRaw('class="diff-context diff-deletedline">' . $title_node_1); diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php index 740fe8b1927ca8a430b70b0acb8a6a163cd211fb..9abae19a64763aca65e53d1e9b0a19122ce161bf 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsNormalizerTest.php @@ -73,7 +73,8 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => $title, 'body[0][value]' => 'Revision 1', ); - $this->drupalPostForm('node/add/article', $edit, t('Save')); + $this->drupalGet('node/add/article'); + $this->submitForm($edit, 'Save'); $this->assertText($title); $this->assertText('Revision 1'); $node = $this->drupalGetNodeByTitle($title); @@ -84,7 +85,8 @@ public function testEntityReferenceRevisions() { 'title[0][value]' => $err_title, 'field_entity_reference_revisions[0][target_id]' => $node->label() . ' (' . $node->id() . ')', ); - $this->drupalPostForm('node/add/entity_revisions', $edit, t('Save')); + $this->drupalGet('node/add/entity_revisions'); + $this->submitForm($edit, 'Save'); $this->assertText('Entity revisions Entity reference revision content has been created.'); $err_node = $this->drupalGetNodeByTitle($err_title); @@ -97,7 +99,8 @@ public function testEntityReferenceRevisions() { 'body[0][value]' => 'Revision 2', 'revision' => TRUE, ); - $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->id() . '/edit'); + $this->submitForm($edit, 'Save'); $serializer = $this->container->get('serializer'); $normalized = $serializer->normalize($err_node, 'hal_json'); $request = \Drupal::request(); diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..364bdfed443c2e35bd53ba32c481d5cd75189014 --- /dev/null +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Functional/EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest.php @@ -0,0 +1,244 @@ +<?php + +namespace Drupal\Tests\entity_reference_revisions\Functional; + +use Drupal\entity_composite_relationship_test\Entity\EntityTestCompositeRelationship; +use Drupal\entity_host_relationship_test\Entity\EntityTestHostRelationship; + +/** + * Tests orphan composite revisions are properly removed. + * + * @group entity_reference_revisions + */ +class EntityReferenceRevisionsOrphanRemovalForBaseFieldDefinitionTest extends EntityReferenceRevisionsOrphanRemovalTest { + + /** + * A user with administration access. + * + * @var \Drupal\user\UserInterface + */ + protected $adminUser; + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = [ + 'node', + 'field', + 'entity_reference_revisions', + 'entity_composite_relationship_test', + 'entity_host_relationship_test', + ]; + + /** + * {@inheritdoc} + */ + public function insertRevisionableData() { + /** @var \Drupal\node\NodeStorageInterface $entity_host_storage */ + $entity_host_storage = \Drupal::entityTypeManager()->getStorage('entity_host_relationship_test'); + // Scenario 1: A composite with a default revision that is referenced and an + // old revision that is not. Result: Only the old revision is deleted. + $composite_entity_first = EntityTestCompositeRelationship::create([ + 'name' => 'first not used, second used', + 'parent_id' => 1000, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_first->save(); + $composite_entity_first = EntityTestCompositeRelationship::load($composite_entity_first->id()); + $composite_entity_first->setNewRevision(TRUE); + $composite_entity_first->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'First composite', + 'entity' => $composite_entity_first, + ]); + $entity_host->save(); + + // Scenario 2: A composite with an old revision that is used and a default + // revision that is not. Result: Nothing should be deleted. + $composite_entity_second = EntityTestCompositeRelationship::create([ + 'name' => 'first used, second not used', + ]); + $composite_entity_second->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Second composite', + 'entity' => $composite_entity_second, + ]); + $entity_host->save(); + $entity_host = $this->getEntityHostByName('Second composite'); + $entity_host = $entity_host_storage->createRevision($entity_host); + $entity_host->set('entity', NULL); + $entity_host->save(); + $composite_entity_second = EntityTestCompositeRelationship::load($composite_entity_second->id()); + $composite_entity_second->setNewRevision(TRUE); + $composite_entity_second->save(); + + // Scenario 3: A composite with an old revision and a default revision both + // that are not used with empty parent fields. Result: Nothing should be + // deleted since we do not know if it is still used. + $composite_entity_third = EntityTestCompositeRelationship::create([ + 'name' => 'first not used, second not used', + ]); + $composite_entity_third->save(); + $composite_entity_third = EntityTestCompositeRelationship::load($composite_entity_third->id()); + $composite_entity_third->setNewRevision(TRUE); + $composite_entity_third->save(); + + // Scenario 4: A composite with an old revision and a default revision both + // that are not used with filled parent fields. Result: Should first delete + // the old revision and then the default revision. Delete the entity too. + $composite_entity_fourth = EntityTestCompositeRelationship::create([ + 'name' => '1st filled not, 2nd filled not', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_fourth->save(); + $composite_entity_fourth = EntityTestCompositeRelationship::load($composite_entity_fourth->id()); + $composite_entity_fourth->setNewRevision(TRUE); + $composite_entity_fourth->set('parent_id', 1001); + $composite_entity_fourth->save(); + + // Scenario 5: A composite with many revisions and 2 at least used. Result: + // Delete all unused revisions. + $composite_entity_fifth = EntityTestCompositeRelationship::create([ + 'name' => '1st not, 2nd used, 3rd not, 4th', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_fifth->save(); + $composite_entity_fifth = EntityTestCompositeRelationship::load($composite_entity_fifth->id()); + $composite_entity_fifth->setNewRevision(TRUE); + $composite_entity_fifth->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Third composite', + 'entity' => $composite_entity_fifth, + ]); + $entity_host->save(); + $entity_host = $this->getEntityHostByName('Second composite'); + $entity_host = $entity_host_storage->createRevision($entity_host); + $entity_host->set('entity', NULL); + $entity_host->save(); + $composite_entity_fifth = EntityTestCompositeRelationship::load($composite_entity_fifth->id()); + $composite_entity_fifth->setNewRevision(TRUE); + $composite_entity_fifth->save(); + $entity_host = $this->getEntityHostByName('Third composite'); + $entity_host = $entity_host_storage->createRevision($entity_host); + $entity_host->set('entity', $composite_entity_fifth); + $entity_host->save(); + + // Scenario 6: A composite with wrong parent fields filled pointing to a non + // existent parent (Parent 1). However, Parent 2 references it. Result: Must + // not be deleted. + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'DELETED composite', + ]); + $entity_host->save(); + $composite_entity_sixth = EntityTestCompositeRelationship::create([ + 'name' => 'wrong parent fields', + 'parent_id' => $entity_host->id(), + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_sixth->save(); + $entity_host->delete(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Fourth composite', + 'entity' => $composite_entity_sixth, + ]); + $entity_host->save(); + } + + /** + * {@inheritdoc} + */ + public function insertNonRevisionableData() { + // Scenario 1: A composite with a default revision that is referenced and an + // old revision that is not. Result: Only the old revision is deleted. + $composite_entity_first = EntityTestCompositeRelationship::create([ + 'name' => 'NR first not used, second used', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_first->save(); + $composite_entity_first = EntityTestCompositeRelationship::load($composite_entity_first->id()); + $composite_entity_first->setNewRevision(TRUE); + $composite_entity_first->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'First NR composite', + 'entity' => $composite_entity_first, + ]); + $entity_host->save(); + + // Scenario 2: A composite with an old revision that is used and a default + // revision that is not. Result: Nothing should be deleted. + $composite_entity_second = EntityTestCompositeRelationship::create([ + 'name' => 'NR first used, second not used', + ]); + $composite_entity_second->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Second NR composite', + 'entity' => $composite_entity_second, + ]); + $entity_host->save(); + $composite_entity_second = EntityTestCompositeRelationship::load($composite_entity_second->id()); + $composite_entity_second->setNewRevision(TRUE); + $composite_entity_second->save(); + + // Scenario 3: A composite with many revisions and 2 at least used. Result: + // Delete all unused revisions. + $composite_entity_third = EntityTestCompositeRelationship::create([ + 'name' => 'NR 1st not, 2nd, 3rd not, 4th', + 'parent_id' => 1001, + 'parent_type' => 'entity_host_relationship_test', + 'parent_field_name' => 'entity', + ]); + $composite_entity_third->save(); + $composite_entity_third = EntityTestCompositeRelationship::load($composite_entity_third->id()); + $composite_entity_third->setNewRevision(TRUE); + $composite_entity_third->save(); + $entity_host = EntityTestHostRelationship::create([ + 'name' => 'Third NR composite', + 'entity' => $composite_entity_third, + ]); + $entity_host->save(); + $entity_host = $this->getEntityHostByName('Third NR composite'); + $entity_host->set('entity', NULL); + $entity_host->save(); + $composite_entity_third = EntityTestCompositeRelationship::load($composite_entity_third->id()); + $composite_entity_third->setNewRevision(TRUE); + $composite_entity_third->save(); + $entity_host = $this->getEntityHostByName('Third NR composite'); + $entity_host->set('entity', $composite_entity_third); + $entity_host->save(); + } + + /** + * Get an entity host from the database based on its name. + * + * @param string $name + * A entity name. + * @param bool $reset + * (optional) Whether to reset the entity cache. + * + * @return \Drupal\Core\Entity\RevisionableInterface + * A revisionable entity matching $name. + */ + protected function getEntityHostByName($name, $reset = FALSE) { + if ($reset) { + \Drupal::entityTypeManager()->getStorage('entity_host_relationship_test')->resetCache(); + } + $name = (string) $name; + /** @var \Drupal\Core\Entity\RevisionableInterface[] $entities */ + $entities = \Drupal::entityTypeManager() + ->getStorage('entity_host_relationship_test') + ->loadByProperties(['name' => $name]); + // Load the first entity returned from the database. + return reset($entities); + } + +} diff --git a/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php b/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php index 05f781f544756c6ac30373bc1972294fe0a34be4..a9a26a4095f12c46ea247efe388839464332af07 100644 --- a/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php +++ b/web/modules/contrib/entity_reference_revisions/tests/src/Kernel/Plugin/migrate/destination/EntityReferenceRevisionsDestinationTest.php @@ -236,6 +236,116 @@ public function getEntityDataProvider() { ]; } + /** + * Tests get entity. + * + * @dataProvider getEntityDataProviderForceRevision + * + * @covers ::getEntity + * @covers ::rollback + * @covers ::rollbackNonTranslation + */ + public function testGetEntityForceRevision(array $definition, array $expected) { + /** @var \Drupal\migrate\Plugin\Migration $migration */ + $migration = $this->migrationPluginManager->createStubMigration($definition); + $migrationExecutable = (new MigrateExecutable($migration, $this)); + /** @var \Drupal\Core\Entity\EntityStorageBase $storage */ + $storage = $this->readAttribute($migration->getDestinationPlugin(), 'storage'); + // Test inserting and updating by looping twice. + for ($i = 0; $i < 2; $i++) { + $migrationExecutable->import(); + $migration->getIdMap()->prepareUpdate(); + foreach ($expected[$i] as $data) { + $entity = $storage->loadRevision($data['revision_id']); + $this->assertEquals($data['label'], $entity->label()); + $this->assertEquals($data['id'], $entity->id()); + } + } + $migrationExecutable->rollback(); + for ($i = 0; $i < 2; $i++) { + foreach ($expected[$i] as $data) { + $entity = $storage->loadRevision($data['id']); + $this->assertEmpty($entity); + } + } + } + + /** + * Provides multiple migration definitions for "getEntity" test. + */ + public function getEntityDataProviderForceRevision() { + return [ + 'with ids, new revisions and no force revision' => [ + 'definition' => [ + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => [ + ['id' => 1, 'name' => 'content item 1a'], + ['id' => 2, 'name' => 'content item 2'], + ], + 'ids' => [ + 'id' => ['type' => 'integer'], + 'name' => ['type' => 'text'], + ], + ], + 'process' => [ + 'name' => 'name', + 'id' => 'id', + ], + 'destination' => [ + 'plugin' => 'entity_reference_revisions:entity_test_composite', + 'new_revisions' => TRUE, + 'force_revision' => FALSE, + ], + ], + 'expected' => [ + [ + ['id' => 1, 'revision_id' => 1, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 2, 'label' => 'content item 2'], + ], + [ + ['id' => 1, 'revision_id' => 1, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 2, 'label' => 'content item 2'], + ] + ], + ], + 'with ids, new revisions and force revision' => [ + 'definition' => [ + 'source' => [ + 'plugin' => 'embedded_data', + 'data_rows' => [ + ['id' => 1, 'name' => 'content item 1a'], + ['id' => 2, 'name' => 'content item 2'], + ], + 'ids' => [ + 'id' => ['type' => 'integer'], + 'name' => ['type' => 'text'], + ], + ], + 'process' => [ + 'name' => 'name', + 'id' => 'id', + ], + 'destination' => [ + 'plugin' => 'entity_reference_revisions:entity_test_composite', + 'new_revisions' => TRUE, + 'force_revision' => TRUE, + ], + ], + 'expected' => [ + [ + ['id' => 1, 'revision_id' => 1, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 2, 'label' => 'content item 2'], + ], + [ + ['id' => 1, 'revision_id' => 3, 'label' => 'content item 1a'], + ['id' => 2, 'revision_id' => 4, 'label' => 'content item 2'], + ] + ], + ], + ]; + } + /** * Tests multi-value and single-value destination field linkage. * diff --git a/web/modules/contrib/extlink/extlink.info.yml b/web/modules/contrib/extlink/extlink.info.yml index 723cd804de3815bab65aebb77995cb51322e3663..e3818f69c810083261bb6eee5b0ec8ad9c6b4f2f 100644 --- a/web/modules/contrib/extlink/extlink.info.yml +++ b/web/modules/contrib/extlink/extlink.info.yml @@ -6,7 +6,7 @@ core: 8.x configure: extlink_admin.settings core_version_requirement: ^8 || ^9 -# Information added by Drupal.org packaging script on 2020-09-29 -version: '8.x-1.5' +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-1.6' project: 'extlink' -datestamp: 1601382187 +datestamp: 1614961996 diff --git a/web/modules/contrib/extlink/extlink.js b/web/modules/contrib/extlink/extlink.js index dd815407d4baa59eaf3c88ba43838b54a3d9d5ef..7d57dc90057a8d250f21b3e1c6051fa3ff2de4c1 100644 --- a/web/modules/contrib/extlink/extlink.js +++ b/web/modules/contrib/extlink/extlink.js @@ -10,7 +10,7 @@ Drupal.extlink = Drupal.extlink || {}; Drupal.extlink.attach = function (context, drupalSettings) { - if (!drupalSettings.data.hasOwnProperty('extlink')) { + if (typeof drupalSettings.data === 'undefined' || !drupalSettings.data.hasOwnProperty('extlink')) { return; } diff --git a/web/modules/contrib/extlink/extlink.module b/web/modules/contrib/extlink/extlink.module index c802bf51b957a451c76246555b4c112953f9c03d..e52a3ec531c9fade5094ee84faa4fa66568fe24f 100644 --- a/web/modules/contrib/extlink/extlink.module +++ b/web/modules/contrib/extlink/extlink.module @@ -89,6 +89,14 @@ function _extlink_get_settings_from_config(Config $config) { $fa_mailto_classes = $config->get('extlink_font_awesome_classes.mailto') ?: 'fa fa-envelope-o'; $fa_mailto_classes = array_map($callback, explode(' ', $fa_mailto_classes)); + $extAlertText = ""; + + if( !is_array($settings['extlink_alert_text']) ){ + $extAlertText = ((isset($settings['extlink_alert_text'])) ? Xss::filterAdmin($settings['extlink_alert_text']) : t('This link will take you to an external web site. We are not responsible for their content.')); + } else { + $extAlertText = ((isset($settings['extlink_alert_text']['value'])) ? Html::escape($settings['extlink_alert_text']['value']) : t('This link will take you to an external web site. We are not responsible for their content.')); + } + return [ 'extTarget' => ((isset($settings['extlink_target'])) ? $settings['extlink_target'] : FALSE), 'extTargetNoOverride' => ((isset($settings['extlink_target_no_override'])) ? $settings['extlink_target_no_override'] : FALSE), @@ -104,7 +112,7 @@ function _extlink_get_settings_from_config(Config $config) { 'extCssExclude' => ((isset($settings['extlink_css_exclude'])) ? $settings['extlink_css_exclude'] : ''), 'extCssExplicit' => ((isset($settings['extlink_css_explicit'])) ? $settings['extlink_css_explicit'] : ''), 'extAlert' => ((isset($settings['extlink_alert'])) ? $settings['extlink_alert'] : FALSE), - 'extAlertText' => ((isset($settings['extlink_alert_text'])) ? Xss::filterAdmin($settings['extlink_alert_text']) : t('This link will take you to an external web site. We are not responsible for their content.')), + 'extAlertText' => $extAlertText, 'mailtoClass' => ((isset($settings['extlink_mailto_class'])) ? $settings['extlink_mailto_class'] : 'mailto'), 'mailtoLabel' => ((isset($settings['extlink_mailto_label'])) ? Html::escape($settings['extlink_mailto_label']) : t('(link sends email)')), 'extUseFontAwesome' => ((isset($settings['extlink_use_font_awesome'])) ? $settings['extlink_use_font_awesome'] : FALSE), diff --git a/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php b/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php index 31d6242d1c1b1d6bcc3f0c055cf90dc84e48842d..f5d599c898ce86b22092265153f95f91f742b7a9 100644 --- a/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php +++ b/web/modules/contrib/extlink/tests/src/FunctionalJavascript/ExtlinkAdminTest.php @@ -36,7 +36,8 @@ public function testExtlinkDisabledOnAdminRoutes() { $this->assertRaw('/extlink/extlink.js'); // Disable Extlink on admin routes. - $this->drupalPostForm(self::EXTLINK_ADMIN_PATH, ['extlink_exclude_admin_routes' => TRUE], 'Save configuration'); + $this->drupalGet(self::EXTLINK_ADMIN_PATH); + $this->submitForm(['extlink_exclude_admin_routes' => TRUE], 'Save configuration'); $this->assertNoRaw('/extlink/extlink.js'); } diff --git a/web/modules/contrib/facets/facets.info.yml b/web/modules/contrib/facets/facets.info.yml index ac195b9f3d2c84def55894fe0c1dbe35895da7e3..c03abbff450b7385fe2dcd3221d03af4d74237ee 100644 --- a/web/modules/contrib/facets/facets.info.yml +++ b/web/modules/contrib/facets/facets.info.yml @@ -8,7 +8,7 @@ test_dependencies: - search_api:search_api - drupal:views -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/facets.module b/web/modules/contrib/facets/facets.module index 07b5f9d508a3065c2812c31cdde65f62e8805700..6c04f21a0d435d80108db763024387ebde96bec1 100644 --- a/web/modules/contrib/facets/facets.module +++ b/web/modules/contrib/facets/facets.module @@ -15,7 +15,6 @@ use Drupal\facets\Entity\Facet; use Drupal\facets\Entity\FacetSource; use Drupal\facets\FacetInterface; -use Drupal\search_api\Query\QueryInterface; use Drupal\views\Entity\View; use Drupal\Core\Entity\EntityInterface; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; @@ -71,25 +70,6 @@ function facets_theme($existing, $type, $theme, $path) { ]; } -/** - * Implements hook_search_api_query_alter(). - */ -function facets_search_api_query_alter(QueryInterface &$query) { - if ($query->getIndex()->getServerInstance()->supportsFeature('search_api_facets')) { - /** @var \Drupal\facets\FacetManager\DefaultFacetManager $facet_manager */ - $facet_manager = \Drupal::service('facets.manager'); - - // It's safe to hardcode this to the search api scheme because this is in a - // search_api_query_alter method. If this generated source is not correct, - // implementing the same alter and directly calling - // $manager->alterQuery($query, $your_facetsource_id); will fix that. - $facet_source = 'search_api:' . str_replace(':', '__', $query->getSearchId()); - - // Add the active filters. - $facet_manager->alterQuery($query, $facet_source); - } -} - /** * Implements hook_entity_presave(). * @@ -358,61 +338,12 @@ function facets_system_breadcrumb_alter(Breadcrumb &$breadcrumb, RouteMatchInter * Implements hook_language_switch_links_alter(). */ function facets_language_switch_links_alter(array &$links, $type, Url $url) { - /** @var \Drupal\Core\Language\LanguageManagerInterface $languageManager */ - $languageManager = \Drupal::languageManager(); - $language_interface = $languageManager->getCurrentLanguage(); - /** @var \Drupal\facets\FacetInterface[] $allFacets */ - $allFacets = \Drupal::entityTypeManager() - ->getStorage('facets_facet') - ->loadMultiple(); - - /** @var \Drupal\facets\UrlProcessor\UrlProcessorPluginManager $urlProcessorManager */ - $urlProcessorManager = \Drupal::service('plugin.manager.facets.url_processor'); - foreach ($links as &$link) { - if (empty($link['language']) || !($link['language'] instanceof LanguageInterface) || $link['language']->getId() === $language_interface->getId()) { - continue; - } - - foreach ($allFacets as $facet) { - if (!isset($link['query'][$facet->getFacetSourceConfig()->getFilterKey()]) || - !is_array($link['query'][$facet->getFacetSourceConfig()->getFilterKey()])) { - continue; - } - - $configName = 'facets.facet.' . $facet->id(); - $untranslatedAlias = $languageManager->getLanguageConfigOverride($language_interface->getId(), $configName)->get('url_alias'); - $translatedAlias = $languageManager->getLanguageConfigOverride($link['language']->getId(), $configName)->get('url_alias'); - - // If we don't have a translated alias, that means we're trying to create - // a link to the original language. - if ($translatedAlias === NULL) { - $translatedAlias = \Drupal::config($configName)->getOriginal('url_alias', FALSE); - } - // If we don't have an untranslated alias, we're trying to create a link - // from the original language. - if ($untranslatedAlias === NULL) { - $untranslatedAlias = \Drupal::config($configName)->getOriginal('url_alias', FALSE); - } - - /** @var \Drupal\facets\UrlProcessor\UrlProcessorInterface $urlProcessor */ - $urlProcessor = $urlProcessorManager - ->createInstance($facet - ->getFacetSourceConfig() - ->getUrlProcessorName(), ['facet' => $facet] - ); - - foreach ($link['query'][$facet->getFacetSourceConfig()->getFilterKey()] as &$filters) { - $separator = $urlProcessor->getSeparator(); - $filters = preg_replace( - '/(' . $untranslatedAlias . ")$separator/", - $translatedAlias . $separator, - $filters - ); - } - } - } + /** @var \Drupal\facets\LanguageSwitcherLinksAlterer $alterer */ + $alterer = \Drupal::service('facets.language_switcher_links_alterer'); + $alterer->alter($links, $type, $url); } + /** * Implements hook_form_FORM_ID_alter(). */ diff --git a/web/modules/contrib/facets/facets.services.yml b/web/modules/contrib/facets/facets.services.yml index bd4c6fb71a1a817bb0db3b1d7b20928952b6a94f..103f94a62c96b201291bfc2a307af489899931c6 100644 --- a/web/modules/contrib/facets/facets.services.yml +++ b/web/modules/contrib/facets/facets.services.yml @@ -33,8 +33,16 @@ services: arguments: - '@plugin.manager.facets.url_processor' - '@entity_type.manager' - facets.event_subscriber: - class: Drupal\facets\EventSubscriber + facets.configuration_subscriber: + class: Drupal\facets\EventSubscriber\ConfigurationSubscriber arguments: ['@plugin.manager.block'] tags: - { name: event_subscriber } + facets.search_api_subscriber: + class: Drupal\facets\EventSubscriber\SearchApiSubscriber + arguments: ['@facets.manager'] + tags: + - { name: event_subscriber } + facets.language_switcher_links_alterer: + class: Drupal\facets\LanguageSwitcherLinksAlterer + arguments: ['@language_manager', '@cache.default', '@entity_type.manager', '@plugin.manager.facets.url_processor'] diff --git a/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml b/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml index 9ab8977459178ab241a0303041fbfb3502e1da04..868d8c861a9076d8ee00e07395349d51a32fe174 100644 --- a/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml +++ b/web/modules/contrib/facets/modules/facets_range_widget/facets_range_widget.info.yml @@ -10,7 +10,7 @@ test_dependencies: - facets:facets - drupal:views -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php b/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php index 636900e1fbca6d29cca9e9054223770e3fbc62c3..62cf04afb18a81553f04311ef402039fb0ac74ab 100644 --- a/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php +++ b/web/modules/contrib/facets/modules/facets_range_widget/src/Plugin/facets/processor/RangeSliderProcessor.php @@ -55,7 +55,7 @@ public function build(FacetInterface $facet, array $results) { /** @var \Drupal\facets\Result\ResultInterface[] $results */ foreach ($results as &$result) { $new_active_filters = $active_filters; - unset($new_active_filters[$facet->getUrlAlias()]); + unset($new_active_filters[$facet->id()]); // Add one generic query filter with the min and max placeholder. $new_active_filters[$facet->id()][] = '(min:__range_slider_min__,max:__range_slider_max__)'; $url = \Drupal::service('facets.utility.url_generator')->getUrl($new_active_filters, FALSE); diff --git a/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml b/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml index 698b1919f238957468ab86ea798e0a699149c290..75284deb7eb67fed2b0bf3a8593c60bb2cca737d 100644 --- a/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml +++ b/web/modules/contrib/facets/modules/facets_rest/facets_rest.info.yml @@ -12,7 +12,7 @@ test_dependencies: - drupal:views - drupal:rest -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php b/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php index da35dfee99d40572ac9af096191052d579418cc2..ffbec259ed34146d1a20971d9d2225246dec190b 100644 --- a/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php +++ b/web/modules/contrib/facets/modules/facets_rest/src/Plugin/views/style/FacetsSerializer.php @@ -109,11 +109,23 @@ public function render() { $this->facetsManager->updateResults($facetsource_id); $processed_facets = []; + $facets_metadata = []; foreach ($facets as $facet) { $processed_facets[] = $this->facetsManager->build($facet); + $facets_metadata[$facet->id()] = array( + 'label' => $facet->label(), + 'weight' => $facet->getWeight(), + 'field_id' => $facet->getFieldIdentifier(), + 'url_alias' => $facet->getUrlAlias() + ); } + uasort($facets_metadata, function($a, $b) { + return $a['weight'] > $b['weight']; + }); $rows['facets'] = array_values($processed_facets); + $rows['facets_metadata'] = $facets_metadata; + if (!$this->options['show_facets']) { $rows = $rows['search_results']; } diff --git a/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml b/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml index 5e4d6814a2ce7aa04b54caa14ec97e33bc6f0f9b..c240c060ec1d7e5d59e776166d419d2efdf06db0 100644 --- a/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml +++ b/web/modules/contrib/facets/modules/facets_rest/tests/rest_view/rest_view.info.yml @@ -3,6 +3,7 @@ type: module description: 'Provides a Search API + rest dependency to execute tests.' package: 'Testing' hidden: true +core_version_requirement: ^8.8 || ^9 dependencies: - drupal:rest - drupal:views @@ -11,7 +12,7 @@ dependencies: - search_api:search_api_test_db - facets:facets_rest -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml b/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml index af59e521acee77c0dec90cb30c5d41a2aefefa2e..918416f5f4940e065de6f3485ca42e688ac725a2 100644 --- a/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml +++ b/web/modules/contrib/facets/modules/facets_summary/facets_summary.info.yml @@ -10,7 +10,7 @@ test_dependencies: - search_api:search_api - drupal:views -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/modules/facets_summary/facets_summary.module b/web/modules/contrib/facets/modules/facets_summary/facets_summary.module index bb8267fbc348473ca6d1624404af9f94d1716b25..6720862c63def0662fe5ed41a56af012ea26ae52 100644 --- a/web/modules/contrib/facets/modules/facets_summary/facets_summary.module +++ b/web/modules/contrib/facets/modules/facets_summary/facets_summary.module @@ -5,8 +5,6 @@ * Hook implementations for the facets summary module. */ -use Drupal\search_api\Query\QueryInterface; - /** * Implements hook_theme(). */ @@ -55,25 +53,6 @@ function facets_summary_theme($existing, $type, $theme, $path) { ]; } -/** - * Implements hook_search_api_query_alter(). - */ -function facets_summary_search_api_query_alter(QueryInterface &$query) { - $facet_source_id = 'search_api:' . str_replace(':', '__', $query->getSearchId()); - $storage = \Drupal::entityTypeManager()->getStorage('facets_summary'); - // Get all the facet summaries for the facet source. - $facet_summaries = $storage->loadByProperties(['facet_source_id' => $facet_source_id]); - /** @var \Drupal\facets_summary\FacetsSummaryInterface $facet_summary */ - foreach ($facet_summaries as $facet_summary) { - $processors = $facet_summary->getProcessors(); - // If the count processor is enabled, results count must not be skipped. - if (in_array('show_count', array_keys($processors))) { - $query->setOption('skip result count', FALSE); - break; - } - } -} - /** * Implements hook_theme_suggestions_HOOK(). */ diff --git a/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml b/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml index dc1268cc5d808b64f83d48d39ca182b3873a4bcd..ba1a6f5fb55e539047032bacf85b86f6c3947d79 100644 --- a/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml +++ b/web/modules/contrib/facets/modules/facets_summary/facets_summary.services.yml @@ -8,3 +8,8 @@ services: - '@plugin.manager.facets.facet_source' - '@plugin.manager.facets_summary.processor' - '@facets.manager' + facets_summary.search_api_subscriber: + class: Drupal\facets_summary\EventSubscriber\SearchApiSubscriber + arguments: ['@entity_type.manager'] + tags: + - { name: event_subscriber } diff --git a/web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php b/web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..4a154c4c130778abf76462a438e5615feb010ae4 --- /dev/null +++ b/web/modules/contrib/facets/modules/facets_summary/src/EventSubscriber/SearchApiSubscriber.php @@ -0,0 +1,60 @@ +<?php + +namespace Drupal\facets_summary\EventSubscriber; + +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\search_api\Event\QueryPreExecuteEvent; +use Drupal\search_api\Event\SearchApiEvents; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +class SearchApiSubscriber implements EventSubscriberInterface { + + /** + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + private $entityTypeManager; + + /** + * Constructs a new class instance. + * + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager. + */ + public function __construct(EntityTypeManagerInterface $entityTypeManager) { + $this->entityTypeManager = $entityTypeManager; + } + + /** + * Reacts to the query alter event. + * + * @param \Drupal\search_api\Event\QueryPreExecuteEvent $event + * The query alter event. + */ + public function queryAlter(QueryPreExecuteEvent $event) { + $query = $event->getQuery(); + + $facet_source_id = 'search_api:' . str_replace(':', '__', $query->getSearchId()); + $storage = $this->entityTypeManager->getStorage('facets_summary'); + // Get all the facet summaries for the facet source. + $facet_summaries = $storage->loadByProperties(['facet_source_id' => $facet_source_id]); + /** @var \Drupal\facets_summary\FacetsSummaryInterface $facet_summary */ + foreach ($facet_summaries as $facet_summary) { + $processors = $facet_summary->getProcessors(); + // If the count processor is enabled, results count must not be skipped. + if (in_array('show_count', array_keys($processors))) { + $query->setOption('skip result count', FALSE); + break; + } + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return [ + SearchApiEvents::QUERY_PRE_EXECUTE => 'queryAlter', + ]; + } + +} diff --git a/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php b/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php index 993a64792d40073ecc38ea300a661b6a746dfe9c..d1d446d1f87bf193c1982dd1a455b261f4001209 100644 --- a/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php +++ b/web/modules/contrib/facets/src/Controller/FacetBlockAjaxController.php @@ -118,13 +118,13 @@ public function ajaxFacetBlockView(Request $request) { $path = $request->request->get('facet_link'); $facets_blocks = $request->request->get('facets_blocks'); - // Make sure we are not updating blocks multiple times. - $facets_blocks = array_unique($facets_blocks); - if (empty($path) || empty($facets_blocks)) { throw new NotFoundHttpException('No facet link or facet blocks found.'); } + // Make sure we are not updating blocks multiple times. + $facets_blocks = array_unique($facets_blocks); + $new_request = Request::create($path); $request_stack = new RequestStack(); $processed = $this->pathProcessor->processInbound($path, $new_request); diff --git a/web/modules/contrib/facets/src/EventSubscriber.php b/web/modules/contrib/facets/src/EventSubscriber/ConfigurationSubscriber.php similarity index 91% rename from web/modules/contrib/facets/src/EventSubscriber.php rename to web/modules/contrib/facets/src/EventSubscriber/ConfigurationSubscriber.php index 7902cdd5286c728602e657cad66e4ffd1245ada5..bfb2567e5849a1f38bc7b07ef6da6ea1bdefeac8 100644 --- a/web/modules/contrib/facets/src/EventSubscriber.php +++ b/web/modules/contrib/facets/src/EventSubscriber/ConfigurationSubscriber.php @@ -1,6 +1,6 @@ <?php -namespace Drupal\facets; +namespace Drupal\facets\EventSubscriber; use Drupal\Core\Block\BlockManagerInterface; use Drupal\Core\Config\ConfigCrudEvent; @@ -10,7 +10,7 @@ /** * Config subscriber for facet delete. */ -class EventSubscriber implements EventSubscriberInterface { +class ConfigurationSubscriber implements EventSubscriberInterface { /** * Drupal core's block manager. diff --git a/web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php b/web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..93f578c81e59377bcd4f13a6edeb5f447c079a17 --- /dev/null +++ b/web/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php @@ -0,0 +1,63 @@ +<?php + +namespace Drupal\facets\EventSubscriber; + +use Drupal\facets\FacetManager\DefaultFacetManager; +use Drupal\search_api\Event\QueryPreExecuteEvent; +use Drupal\search_api\Event\SearchApiEvents; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +class SearchApiSubscriber implements EventSubscriberInterface { + + /** + * @var \Drupal\facets\FacetManager\DefaultFacetManager + */ + private $facetManager; + + /** + * Constructs a new class instance. + * + * @param \Drupal\facets\FacetManager\DefaultFacetManager $facetManager + * The messenger. + */ + public function __construct(DefaultFacetManager $facetManager) { + $this->facetManager = $facetManager; + } + + /** + * Reacts to the query alter event. + * + * @param \Drupal\search_api\Event\QueryPreExecuteEvent $event + * The query alter event. + */ + public function queryAlter(QueryPreExecuteEvent $event) { + $query = $event->getQuery(); + + if ($query->getIndex()->getServerInstance()->supportsFeature('search_api_facets')) { + // It's safe to hardcode this to the search api scheme because this is in + // an event subscriber. If this generated source is not correct, + // implementing the same subscriber and directly calling + // $manager->alterQuery($query, $your_facetsource_id); will fix that. + $facet_source = 'search_api:' . str_replace(':', '__', $query->getSearchId()); + + // Add the active filters. + $this->facetManager->alterQuery($query, $facet_source); + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + // Workaround to avoid a fatal error during site install from existing config. + // @see https://www.drupal.org/project/facets/issues/3199156 + if (!class_exists('\Drupal\search_api\Event\SearchApiEvents', TRUE)) { + return []; + } + + return [ + SearchApiEvents::QUERY_PRE_EXECUTE => 'queryAlter', + ]; + } + +} diff --git a/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php b/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php index 3d2540c566f0b51ffc32860b68f11b8d9affca93..8c436e196691a40a9a97b8e202c90e0f08bd45d5 100644 --- a/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php +++ b/web/modules/contrib/facets/src/FacetSource/FacetSourcePluginManager.php @@ -22,8 +22,10 @@ class FacetSourcePluginManager extends DefaultPluginManager { */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/facets/facet_source', $namespaces, $module_handler, FacetSourcePluginInterface::class, FacetsFacetSource::class); + $this->setCacheBackend($cache_backend, 'facet_source_plugins'); } + /** * {@inheritdoc} */ diff --git a/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php b/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php index a000c15676d98ab372554af44bfb025bcc0200f5..2b418d9aff2763a016cc20528fabb591e2bbc1b5 100644 --- a/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php +++ b/web/modules/contrib/facets/src/Hierarchy/HierarchyInterface.php @@ -40,4 +40,19 @@ public function getNestedChildIds($id); */ public function getChildIds(array $ids); + /** + * Retrieve the siblings for an array of ids. + * + * @param array $ids + * An array of ids. + * @param array $activeIds + * An array of currently active ids. + * @param bool $parentSiblings + * Show parent siblings. + * + * @return array + * Given sibling ids as key, value is an array of ids. + */ + public function getSiblingIds(array $ids, array $activeIds = [], bool $parentSiblings = TRUE); + } diff --git a/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php b/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php index 96dc4dc4298ef7efc13f8f025e765f59c6ce8a1d..505ecddf1821b55854bf3fdfdfa3d02fe77c2d26 100644 --- a/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php +++ b/web/modules/contrib/facets/src/Hierarchy/HierarchyPluginBase.php @@ -20,4 +20,13 @@ public static function create(ContainerInterface $container, array $configuratio return new static($configuration, $plugin_id, $plugin_definition, $request); } + /** + * Provide a default implementation for backward compatibility. + * + * {@inheritdoc} + */ + public function getSiblingIds(array $ids, array $activeIds = [], bool $parentSiblings = TRUE) { + return []; + } + } diff --git a/web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php b/web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php new file mode 100644 index 0000000000000000000000000000000000000000..de2574227707631421544d4783dc6c576b97e63a --- /dev/null +++ b/web/modules/contrib/facets/src/LanguageSwitcherLinksAlterer.php @@ -0,0 +1,187 @@ +<?php + +namespace Drupal\facets; + +use Drupal\Core\Cache\Cache; +use Drupal\Core\Cache\CacheBackendInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Language\LanguageManagerInterface; +use Drupal\Core\Url; +use Drupal\facets\UrlProcessor\UrlProcessorPluginManager; + +/** + * Helper service that alters the language switcher links. + * + * Facet URL aliases can be translated so we need to make sure that if we are + * on a page that has facet filters in the URL, we replace the language switcher + * links filters with the translated facet URL aliases for the target language. + */ +class LanguageSwitcherLinksAlterer { + + /** + * The language manager. + * + * @var \Drupal\Core\Language\LanguageManagerInterface + */ + protected $languageManager; + + /** + * The cache backend. + * + * @var \Drupal\Core\Cache\CacheBackendInterface + */ + protected $cacheBackend; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The URL processor plugin manager. + * + * @var \Drupal\facets\UrlProcessor\UrlProcessorPluginManager + */ + protected $urlProcessorManager; + + /** + * The data needed to alter the language switcher links. + * + * @var array + */ + protected $data = []; + + /** + * LanguageSwitcherLinksAlterer constructor. + * + * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager + * The language manager. + * @param \Drupal\Core\Cache\CacheBackendInterface $cacheBackend + * The cache backend. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager. + * @param \Drupal\facets\UrlProcessor\UrlProcessorPluginManager $urlProcessorManager + * The URL processor plugin manager. + */ + public function __construct(LanguageManagerInterface $languageManager, CacheBackendInterface $cacheBackend, EntityTypeManagerInterface $entityTypeManager, UrlProcessorPluginManager $urlProcessorManager) { + $this->languageManager = $languageManager; + $this->cacheBackend = $cacheBackend; + $this->entityTypeManager = $entityTypeManager; + $this->urlProcessorManager = $urlProcessorManager; + } + + /** + * Alters the language switcher links. + * + * @param array $links + * The links. + * @param $type + * The language type. + * @param \Drupal\Core\Url $url + * The URL the switch links will be relative to. + * + * @see facets_language_switch_links_alter() + */ + public function alter(array &$links, $type, Url $url) { + if (!$this->data) { + $this->initializeData(); + } + + $current_language = $this->languageManager->getCurrentLanguage(); + + foreach ($links as &$link) { + if (empty($link['language']) || !($link['language'] instanceof LanguageInterface) || $link['language']->getId() === $current_language->getId()) { + continue; + } + + foreach ($this->data as $facet_id => $facet_info) { + $filter_key = $facet_info['filter_key']; + $separator = $facet_info['separator']; + $url_aliases = $facet_info['url_aliases']; + $original_language = $url_aliases['original']; + + if (!isset($link['query'][$filter_key]) || !is_array($link['query'][$filter_key])) { + continue; + } + + $untranslated_alias = $url_aliases[$this->languageManager->getCurrentLanguage()->getId()]; + $translated_alias = $url_aliases[$link['language']->getId()]; + + // If we don't have a translated alias, that means we're trying to create + // a link to the original language. + if ($translated_alias === NULL) { + $translated_alias = $url_aliases[$original_language]; + } + // If we don't have an untranslated alias, we're trying to create a link + // from the original language. + if ($untranslated_alias === NULL) { + $untranslated_alias = $url_aliases[$original_language]; + } + + foreach ($link['query'][$filter_key] as &$filters) { + $filters = preg_replace( + '/(' . $untranslated_alias . ")$separator/", + $translated_alias . $separator, + $filters + ); + } + } + } + } + + /** + * Initializes the data needed for altering the language switcher links. + * + * It runs through all the facets on the site and all the languages and + * creates a cache of the URL aliases for all the languages. + */ + protected function initializeData() { + $cache = $this->cacheBackend->get('facets_language_switcher_links'); + if ($cache) { + $this->data = $cache->data; + return; + } + + $data = []; + + /** @var \Drupal\facets\FacetInterface[] $facets */ + $facets = $this->entityTypeManager->getStorage('facets_facet')->loadMultipleOverrideFree(); + + $cache_tags = []; + foreach ($facets as $facet) { + $cache_tags = Cache::mergeTags($cache_tags, $facet->getCacheTags()); + + /** @var \Drupal\facets\UrlProcessor\UrlProcessorInterface $urlProcessor */ + $id = $facet->getFacetSourceConfig()->getUrlProcessorName(); + $url_processor = $this->urlProcessorManager->createInstance($id, ['facet' => $facet]); + + if (!isset($data[$facet->id()])) { + $data[$facet->id()] = [ + 'separator' => $url_processor->getSeparator(), + 'filter_key' => $facet->getFacetSourceConfig()->getFilterKey(), + 'url_aliases' => [ + 'original' => $facet->language()->getId(), + $facet->language()->getId() => $facet->getUrlAlias(), + ], + ]; + } + + foreach ($this->languageManager->getLanguages() as $language) { + if ($language->getId() === $facet->language()->getId()) { + // Skip the original facet language as it's covered above. + continue; + } + + $config_name = 'facets.facet.' . $facet->id(); + $translated_alias = $this->languageManager->getLanguageConfigOverride($language->getId(), $config_name)->get('url_alias'); + $data[$facet->id()]['url_aliases'][$language->getId()] = $translated_alias; + } + } + + $this->data = $data; + $this->cacheBackend->set('facets_language_switcher_links', $data, Cache::PERMANENT, $cache_tags); + } +} diff --git a/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php b/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php index e57d3b4838ee07a4e8d6b342e1e89fd6b69da8fa..e9e4a1fe4a17a41264a0384a69a9cdb5cdeede1b 100644 --- a/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php +++ b/web/modules/contrib/facets/src/Plugin/facets/hierarchy/Taxonomy.php @@ -114,6 +114,48 @@ public function getChildIds(array $ids) { return $parents; } + /** + * {@inheritdoc} + */ + public function getSiblingIds(array $ids, array $activeIds = [], bool $parentSiblings = TRUE) { + if (empty($ids)) { + return []; + } + + $parentIds = []; + $topLevelTerms = []; + + foreach ($ids as $id) { + if (!$activeIds || in_array($id, $activeIds)) { + $currentParentIds = $this->getParentIds($id); + if (!$currentParentIds) { + if (!$topLevelTerms) { + /** @var \Drupal\taxonomy\Entity\Term $term */ + $term = $this->termStorage->load($id); + $topLevelTerms = array_map(function ($term) { + return $term->tid; + }, $this->termStorage->loadTree($term->bundle(), 0, 1)); + } + } + else { + $parentIds[] = $currentParentIds; + } + } + } + + $parentIds = array_unique(array_merge([], ...$parentIds)); + $childIds = array_merge([], ...$this->getChildIds($parentIds)); + + return array_diff( + array_merge( + $childIds, + $topLevelTerms, + (!$topLevelTerms && $parentSiblings) ? $this->getSiblingIds($ids, $parentIds) : [] + ), + $ids + ); + } + /** * Returns the parent tid for a given tid, or false if no parent exists. * diff --git a/web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php b/web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php new file mode 100644 index 0000000000000000000000000000000000000000..4d7f977ddb44737f9bde5949109ef3d2c1d40068 --- /dev/null +++ b/web/modules/contrib/facets/src/Plugin/facets/processor/ShowSiblingsProcessor.php @@ -0,0 +1,40 @@ +<?php + +namespace Drupal\facets\Plugin\facets\processor; + +use Drupal\facets\FacetInterface; +use Drupal\facets\Processor\BuildProcessorInterface; +use Drupal\facets\Processor\ProcessorPluginBase; +use Drupal\facets\Result\Result; + +/** + * Provides a processor that only shows deepest level items. + * + * @FacetsProcessor( + * id = "show_siblings_processor", + * label = @Translation("Show siblings"), + * description = @Translation("Show all siblings of a hierarchical facet item. In 'Advanced settings' this processor should be executed early in the processor chain, for example before ids get converted into titles. It is recommended to enable 'Use hierarchy' and 'Ensure that only one result can be displayed', too."), + * stages = { + * "build" = 40 + * } + * ) + */ +class ShowSiblingsProcessor extends ProcessorPluginBase implements BuildProcessorInterface { + + /** + * {@inheritdoc} + */ + public function build(FacetInterface $facet, array $results) { + /** @var \Drupal\facets\Result\ResultInterface[] $results */ + if ($facet->getUseHierarchy()) { + $rawValues = array_map(function ($result) { + return $result->getRawValue(); + }, $results); + foreach ($facet->getHierarchyInstance()->getSiblingIds($rawValues, $facet->getActiveItems()) as $siblingId) { + $results[] = new Result($facet, $siblingId, $siblingId, 0); + } + } + return $results; + } + +} diff --git a/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php b/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php index e38f1d5a24ed051e9f8c8f6b377fd9999e625c20..d1a50bba68ccb8d0344dd67166cb38c8a5647aa9 100644 --- a/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php +++ b/web/modules/contrib/facets/src/Plugin/facets/query_type/SearchApiRange.php @@ -60,6 +60,9 @@ public function build() { foreach ($this->results as $result) { if ($result['count'] || $query_operator == 'or') { $count = $result['count']; + while(is_array($result['filter'])) { + $result['filter'] = current($result['filter']); + } $result_filter = trim($result['filter'], '"'); $result = new Result($this->facet, $result_filter, $result_filter, $count); $facet_results[] = $result; diff --git a/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php b/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php index f3144807ebebec999126143ed01b4117880a56c9..6bdf7f2c9ee74ccad137c016c3e83c4d3c84c273 100644 --- a/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php +++ b/web/modules/contrib/facets/src/QueryType/QueryTypePluginManager.php @@ -17,6 +17,7 @@ class QueryTypePluginManager extends DefaultPluginManager { */ public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/facets/query_type', $namespaces, $module_handler, QueryTypeInterface::class, FacetsQueryType::class); + $this->setCacheBackend($cache_backend, 'facet_query_type_plugins'); } } diff --git a/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php b/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php index 939c6a02f5c13e62c6009467c6cecc6db3ab3c32..1dd50ed4c1ad9051c4c471b58df95a477640b3d2 100644 --- a/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php +++ b/web/modules/contrib/facets/src/Widget/WidgetPluginManager.php @@ -18,6 +18,7 @@ class WidgetPluginManager extends DefaultPluginManager { public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/facets/widget', $namespaces, $module_handler, WidgetPluginInterface::class, FacetsWidget::class); $this->alterInfo('widget_plugin_info'); + $this->setCacheBackend($cache_backend, 'facet_widget_plugins'); } } diff --git a/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml b/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml index fcd3a151ffb4ebcc938b0087535e8142586195b7..784c94a89b285d54b7817d8bbe3b10d01162415c 100644 --- a/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml +++ b/web/modules/contrib/facets/tests/facets_custom_widget/facets_custom_widget.info.yml @@ -3,8 +3,8 @@ type: module description: 'Facets custom widget' package: 'Testing' hidden: true - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml b/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml index b362da18143073ad273be6bb3cea27e3f690c816..b3988fd62a7b8f76d79d345d2625a6fa40a5da53 100644 --- a/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml +++ b/web/modules/contrib/facets/tests/facets_events_test/facets_events_test.info.yml @@ -3,8 +3,8 @@ type: module description: 'Facets events test' package: 'Testing' hidden: true - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml b/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml index e4a53bbafb8ede21070db3ab536d4cc50f635a0b..72a91837c6585abf297e121839c133a723d7a358 100644 --- a/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml +++ b/web/modules/contrib/facets/tests/facets_query_processor/facets_query_processor.info.yml @@ -3,8 +3,8 @@ type: module description: 'Facets query processor' package: 'Testing' hidden: true - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml b/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml index 180180ac60ba3210110c3e87b785e147aa134d67..475858218998c6f10462a8bfa394869d3ca58fe3 100644 --- a/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml +++ b/web/modules/contrib/facets/tests/facets_search_api_dependency/facets_search_api_dependency.info.yml @@ -7,8 +7,8 @@ dependencies: - search_api:search_api - search_api:search_api_test_db - drupal:views - -# Information added by Drupal.org packaging script on 2020-11-03 -version: '8.x-1.6' +core_version_requirement: ^8.8 || ^9 +# Information added by Drupal.org packaging script on 2021-02-19 +version: '8.x-1.7' project: 'facets' -datestamp: 1604397982 +datestamp: 1613751462 diff --git a/web/modules/contrib/ludwig/3195655-11.patch b/web/modules/contrib/ludwig/3195655-11.patch new file mode 100644 index 0000000000000000000000000000000000000000..f969367b5ecf45f0e00c89f6a44d1cab30ebaa09 --- /dev/null +++ b/web/modules/contrib/ludwig/3195655-11.patch @@ -0,0 +1,281 @@ +diff --git a/src/PackageManager.php b/src/PackageManager.php +index cb4918a..de8e04e 100644 +--- a/src/PackageManager.php ++++ b/src/PackageManager.php +@@ -48,139 +48,154 @@ class PackageManager implements PackageManagerInterface { + $packages = []; + foreach ($extensions as $extension_name => $extension) { + $extension_path = $extension->getPath(); +- $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); +- $config += [ +- 'require' => [], +- ]; +- +- foreach ($config['require'] as $package_name => $package_data) { +- $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; +- $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; +- $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); +- $description = !empty($package['description']) ? $package['description'] : ''; +- $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; +- // Create the base package data array. +- $package_base = [ +- 'name' => $package_name, +- 'version' => $package_data['version'], +- 'description' => $description, +- 'homepage' => $homepage, +- 'provider' => $extension_name, +- 'provider_path' => $extension_path, +- 'download_url' => $package_data['url'], +- 'disable_warnings' => $disable_warnings, +- 'path' => $package_path, ++ // Let's check if this module has ludwig.json file and ++ // proceed only if it does. ++ if (is_file($this->root . '/' . $extension_path . '/ludwig.json')) { ++ $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); ++ $config += [ ++ 'require' => [], + ]; +- if (empty($package)) { +- // Add new package. This one needs a download. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => FALSE, +- 'resource' => '', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); +- continue; ++ // Let's check if this module has .module file and ++ // load its content if it has. We will need it later. ++ if (is_file($this->root . '/' . $extension_path . '/' . $extension_name . '.module')) { ++ $module_file = file_get_contents($this->root . '/' . $extension_path . '/' . $extension_name . '.module'); ++ $has_ludwig_service = strpos($module_file, 'ludwig.require_once') !== FALSE; + } +- if (!empty($package['autoload'])) { +- $resources = array_keys($package['autoload']); +- // Iterate through all autoload types. +- foreach ($resources as $resource) { +- if (!empty($package['autoload'][$resource])) { +- if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { +- $autoload = $package['autoload']; +- $package_namespaces = [$resource]; +- } +- elseif ($resource == 'psr-4' || $resource == 'psr-0') { +- $autoload = $package['autoload'][$resource]; +- $package_namespaces = array_keys($autoload); +- } +- else { +- // The unknown library type. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => TRUE, +- 'resource' => 'unknown', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); +- continue; +- } +- // Iterate through all the resources inside single autoload type. +- foreach ($package_namespaces as $namespace) { +- $paths_raw = $autoload[$namespace]; +- // Support for both single path (string) and multiple +- // paths (array) inside one resource. +- $paths = []; +- if (is_array($paths_raw)) { +- $paths = $paths_raw; +- } +- elseif (is_string($paths_raw)) { +- $paths[] = $paths_raw; ++ foreach ($config['require'] as $package_name => $package_data) { ++ $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; ++ $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; ++ // Disable the 'classmap' or 'files' warning if this ++ // module's .module file is calling ludwig.require_once ++ // service with this package name as an argument. ++ if (!empty($has_ludwig_service) && !empty($module_file) && ((strpos($module_file, "requireOnce('".$package_name) !== FALSE) || (strpos($module_file, "requireOnce( '".$package_name) !== FALSE) || (strpos($module_file, 'requireOnce("'.$package_name) !== FALSE) || (strpos($module_file, 'requireOnce( "'.$package_name) !== FALSE))) { ++ $disable_warnings = TRUE; ++ } ++ $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); ++ $description = !empty($package['description']) ? $package['description'] : ''; ++ $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; ++ // Create the base package data array. ++ $package_base = [ ++ 'name' => $package_name, ++ 'version' => $package_data['version'], ++ 'description' => $description, ++ 'homepage' => $homepage, ++ 'provider' => $extension_name, ++ 'provider_path' => $extension_path, ++ 'download_url' => $package_data['url'], ++ 'disable_warnings' => $disable_warnings, ++ 'path' => $package_path, ++ ]; ++ if (empty($package)) { ++ // Add new package. This one needs a download. ++ $package_append = [ ++ 'namespace' => '', ++ 'paths' => [], ++ 'installed' => FALSE, ++ 'resource' => '', ++ ]; ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ continue; ++ } ++ if (!empty($package['autoload'])) { ++ $resources = array_keys($package['autoload']); ++ // Iterate through all autoload types. ++ foreach ($resources as $resource) { ++ if (!empty($package['autoload'][$resource])) { ++ if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { ++ $autoload = $package['autoload']; ++ $package_namespaces = [$resource]; + } +- // Autoloading fails if the namespace ends with a backslash. +- $namespace = trim($namespace, '\\'); +- // Iterate through all the paths inside this resource. +- foreach ($paths as $key => $value) { +- $paths[$key] = rtrim($paths[$key], './'); +- // Core only assumes that LudwigServiceProvider is adding +- // PSR-4 paths, each PSR-0 path needs to be converted +- // in order to work. +- if ($resource == 'psr-0' && !empty($namespace)) { +- if (!empty($paths[$key])) { +- $paths[$key] .= '/'; +- } +- $paths[$key] .= str_replace('\\', '/', $namespace); +- } ++ elseif ($resource == 'psr-4' || $resource == 'psr-0') { ++ $autoload = $package['autoload'][$resource]; ++ $package_namespaces = array_keys($autoload); + } +- // Combine $package_name an $paths into uniuqe $name_path value. +- $name_path = $package_name . '_' . implode('-', $paths); +- // Two versions of the same package are not possible. +- // If multiple providers require the same package +- // we keep the highest required version only, since it has +- // the best probability to work for all providers, and +- // it is the most secure. +- if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { +- // If the current item is going to be replaced with the new +- // one, unset the current item first to keep all packages +- // nicely sorted by provider name inside the 'Packages' table. +- if (isset($packages[$name_path])) { +- unset($packages[$name_path]); +- } +- // Add new package. ++ else { ++ // The unknown library type. + $package_append = [ +- 'namespace' => $namespace, +- 'paths' => $paths, ++ 'namespace' => '', ++ 'paths' => [], + 'installed' => TRUE, +- 'resource' => $resource, ++ 'resource' => 'unknown', + ]; +- $packages[$name_path] = array_merge($package_base, $package_append); ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ continue; ++ } ++ // Iterate through all the resources inside single autoload type. ++ foreach ($package_namespaces as $namespace) { ++ $paths_raw = $autoload[$namespace]; ++ // Support for both single path (string) and multiple ++ // paths (array) inside one resource. ++ $paths = []; ++ if (is_array($paths_raw)) { ++ $paths = $paths_raw; ++ } ++ elseif (is_string($paths_raw)) { ++ $paths[] = $paths_raw; ++ } ++ // Autoloading fails if the namespace ends with a backslash. ++ $namespace = trim($namespace, '\\'); ++ // Iterate through all the paths inside this resource. ++ foreach ($paths as $key => $value) { ++ $paths[$key] = rtrim($paths[$key], './'); ++ // Core only assumes that LudwigServiceProvider is adding ++ // PSR-4 paths, each PSR-0 path needs to be converted ++ // in order to work. ++ if ($resource == 'psr-0' && !empty($namespace)) { ++ if (!empty($paths[$key])) { ++ $paths[$key] .= '/'; ++ } ++ $paths[$key] .= str_replace('\\', '/', $namespace); ++ } ++ } ++ // Combine $package_name an $paths into uniuqe $name_path value. ++ $name_path = $package_name . '_' . implode('-', $paths); ++ // Two versions of the same package are not possible. ++ // If multiple providers require the same package ++ // we keep the highest required version only, since it has ++ // the best probability to work for all providers, and ++ // it is the most secure. ++ if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { ++ // If the current item is going to be replaced with the new ++ // one, unset the current item first to keep all packages ++ // nicely sorted by provider name inside the 'Packages' table. ++ if (isset($packages[$name_path])) { ++ unset($packages[$name_path]); ++ } ++ // Add new package. ++ $package_append = [ ++ 'namespace' => $namespace, ++ 'paths' => $paths, ++ 'installed' => TRUE, ++ 'resource' => $resource, ++ ]; ++ $packages[$name_path] = array_merge($package_base, $package_append); ++ } + } + } + } + } +- } +- elseif (!empty($package['include-path'])) { +- // This is the Legacy library (depricated type). +- // They do not have autoload composer.json section +- // but "include-path" section instead. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => TRUE, +- 'resource' => 'legacy', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); +- } +- else { +- // The unknown library type. +- $package_append = [ +- 'namespace' => '', +- 'paths' => [], +- 'installed' => TRUE, +- 'resource' => 'unknown', +- ]; +- $packages[$package_name] = array_merge($package_base, $package_append); ++ elseif (!empty($package['include-path'])) { ++ // This is the Legacy library (depricated type). ++ // They do not have autoload composer.json section ++ // but "include-path" section instead. ++ $package_append = [ ++ 'namespace' => '', ++ 'paths' => [], ++ 'installed' => TRUE, ++ 'resource' => 'legacy', ++ ]; ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ } ++ else { ++ // The unknown library type. ++ $package_append = [ ++ 'namespace' => '', ++ 'paths' => [], ++ 'installed' => TRUE, ++ 'resource' => 'unknown', ++ ]; ++ $packages[$package_name] = array_merge($package_base, $package_append); ++ } + } + } + } diff --git a/web/modules/contrib/ludwig/ludwig.info.yml b/web/modules/contrib/ludwig/ludwig.info.yml index 3261807f632fb80ebe3e2e0f495f8f26fc5ff601..202042e04e461927af9c92ef54328caf2e935ed6 100644 --- a/web/modules/contrib/ludwig/ludwig.info.yml +++ b/web/modules/contrib/ludwig/ludwig.info.yml @@ -6,7 +6,7 @@ core: 8.x core_version_requirement: ^8 || ^9 configure: ludwig.packages -# Information added by Drupal.org packaging script on 2021-01-29 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-15 +version: '8.x-1.7' project: 'ludwig' -datestamp: 1611958527 +datestamp: 1613389170 diff --git a/web/modules/contrib/ludwig/src/Controller/PackageController.php b/web/modules/contrib/ludwig/src/Controller/PackageController.php index 1cb04f6b4fb2bfe6a782af5c2abdf2a47f4787dc..3ba49694d11d5dea6762db86bdcb26de900db1ca 100644 --- a/web/modules/contrib/ludwig/src/Controller/PackageController.php +++ b/web/modules/contrib/ludwig/src/Controller/PackageController.php @@ -118,19 +118,31 @@ public function page() { if ($package['installed'] === FALSE) { $missing++; } + + $guide_link = 'https://www.drupal.org/docs/contributed-modules/ludwig/ludwig-errors-warnings-and-notices'; + if (($package['resource'] == 'classmap' || $package['resource'] == 'files') && empty($package['disable_warnings'])) { - $package['description'] = $this->t('<strong>Warning! The @resource autoload type libraries are not supported by Ludwig yet.</strong>', [ + $package['description'] .= $this->t('<br><strong>Warning! The @resource type libraries are not supported by Ludwig automatically. @read_more.</strong>', [ + '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), + ]); + } + elseif ($package['resource'] == 'exclude-from-classmap' && empty($package['disable_warnings'])) { + $package['description'] .= $this->t('<br><strong>Notice! The @resource property is not supported by Ludwig.</strong> Despite this notice, the library is loaded properly and the module should work nicely. @read_more.', [ '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), ]); } - elseif (($package['resource'] == 'exclude-from-classmap' || $package['resource'] == 'target-dir') && empty($package['disable_warnings'])) { - $package['description'] = $this->t('<strong>Warning! The @resource autoload property is not supported by Ludwig yet.</strong>', [ + elseif ($package['resource'] == 'target-dir' && empty($package['disable_warnings'])) { + $package['description'] .= $this->t('<br><strong>Warning! The @resource property is not supported by Ludwig.</strong> This module may lack some functionality. @read_more.', [ '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), ]); } elseif (($package['resource'] == 'legacy' || $package['resource'] == 'unknown') && empty($package['disable_warnings'])) { - $package['description'] = $this->t('<strong>Warning! The @resource library type. Not supported by Ludwig.</strong>', [ + $package['description'] .= $this->t('<br><strong>Warning! The @resource library type. Not supported by Ludwig. @read_more.</strong>', [ '@resource' => strtoupper($package['resource']), + '@read_more' => Link::fromTextAndUrl($this->t('Read more'), Url::fromUri($guide_link))->toString(), ]); } elseif (!$package['installed']) { @@ -184,9 +196,8 @@ public function page() { } if (!empty($missing)) { - // There are some missing packages, so render - // the "Download all missing packages" button - // as clickable link to the download page. + // There are some missing packages, so render the + // "Download all missing packages" clickable button. $build['#markup'] = $this->t('<div class="button"><a href="@packages-url">Download and unpack all missing packages (@missing)</a></div><div> </div>', [ '@packages-url' => Url::fromRoute('ludwig.packages')->toString() . '?missing=download', '@missing' => $missing, diff --git a/web/modules/contrib/ludwig/src/PackageManager.php b/web/modules/contrib/ludwig/src/PackageManager.php index cb4918aa444b0aa8cb40f2787a3904997071afe0..de8e04e02bf166d5b399614a54147c069324a1bf 100644 --- a/web/modules/contrib/ludwig/src/PackageManager.php +++ b/web/modules/contrib/ludwig/src/PackageManager.php @@ -48,139 +48,154 @@ public function getPackages() { $packages = []; foreach ($extensions as $extension_name => $extension) { $extension_path = $extension->getPath(); - $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); - $config += [ - 'require' => [], - ]; - - foreach ($config['require'] as $package_name => $package_data) { - $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; - $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; - $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); - $description = !empty($package['description']) ? $package['description'] : ''; - $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; - // Create the base package data array. - $package_base = [ - 'name' => $package_name, - 'version' => $package_data['version'], - 'description' => $description, - 'homepage' => $homepage, - 'provider' => $extension_name, - 'provider_path' => $extension_path, - 'download_url' => $package_data['url'], - 'disable_warnings' => $disable_warnings, - 'path' => $package_path, + // Let's check if this module has ludwig.json file and + // proceed only if it does. + if (is_file($this->root . '/' . $extension_path . '/ludwig.json')) { + $config = $this->jsonRead($this->root . '/' . $extension_path . '/ludwig.json'); + $config += [ + 'require' => [], ]; - if (empty($package)) { - // Add new package. This one needs a download. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => FALSE, - 'resource' => '', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); - continue; + // Let's check if this module has .module file and + // load its content if it has. We will need it later. + if (is_file($this->root . '/' . $extension_path . '/' . $extension_name . '.module')) { + $module_file = file_get_contents($this->root . '/' . $extension_path . '/' . $extension_name . '.module'); + $has_ludwig_service = strpos($module_file, 'ludwig.require_once') !== FALSE; } - if (!empty($package['autoload'])) { - $resources = array_keys($package['autoload']); - // Iterate through all autoload types. - foreach ($resources as $resource) { - if (!empty($package['autoload'][$resource])) { - if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { - $autoload = $package['autoload']; - $package_namespaces = [$resource]; - } - elseif ($resource == 'psr-4' || $resource == 'psr-0') { - $autoload = $package['autoload'][$resource]; - $package_namespaces = array_keys($autoload); - } - else { - // The unknown library type. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => TRUE, - 'resource' => 'unknown', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); - continue; - } - // Iterate through all the resources inside single autoload type. - foreach ($package_namespaces as $namespace) { - $paths_raw = $autoload[$namespace]; - // Support for both single path (string) and multiple - // paths (array) inside one resource. - $paths = []; - if (is_array($paths_raw)) { - $paths = $paths_raw; - } - elseif (is_string($paths_raw)) { - $paths[] = $paths_raw; + foreach ($config['require'] as $package_name => $package_data) { + $package_path = $extension_path . '/lib/' . str_replace('/', '-', $package_name) . '/' . $package_data['version']; + $disable_warnings = isset($package_data['disable_warnings']) ? $package_data['disable_warnings'] : FALSE; + // Disable the 'classmap' or 'files' warning if this + // module's .module file is calling ludwig.require_once + // service with this package name as an argument. + if (!empty($has_ludwig_service) && !empty($module_file) && ((strpos($module_file, "requireOnce('".$package_name) !== FALSE) || (strpos($module_file, "requireOnce( '".$package_name) !== FALSE) || (strpos($module_file, 'requireOnce("'.$package_name) !== FALSE) || (strpos($module_file, 'requireOnce( "'.$package_name) !== FALSE))) { + $disable_warnings = TRUE; + } + $package = $this->jsonRead($this->root . '/' . $package_path . '/composer.json'); + $description = !empty($package['description']) ? $package['description'] : ''; + $homepage = !empty($package['homepage']) ? $package['homepage'] : ''; + // Create the base package data array. + $package_base = [ + 'name' => $package_name, + 'version' => $package_data['version'], + 'description' => $description, + 'homepage' => $homepage, + 'provider' => $extension_name, + 'provider_path' => $extension_path, + 'download_url' => $package_data['url'], + 'disable_warnings' => $disable_warnings, + 'path' => $package_path, + ]; + if (empty($package)) { + // Add new package. This one needs a download. + $package_append = [ + 'namespace' => '', + 'paths' => [], + 'installed' => FALSE, + 'resource' => '', + ]; + $packages[$package_name] = array_merge($package_base, $package_append); + continue; + } + if (!empty($package['autoload'])) { + $resources = array_keys($package['autoload']); + // Iterate through all autoload types. + foreach ($resources as $resource) { + if (!empty($package['autoload'][$resource])) { + if ($resource == 'files' || $resource == 'classmap' || $resource == 'exclude-from-classmap' || $resource == 'target-dir') { + $autoload = $package['autoload']; + $package_namespaces = [$resource]; } - // Autoloading fails if the namespace ends with a backslash. - $namespace = trim($namespace, '\\'); - // Iterate through all the paths inside this resource. - foreach ($paths as $key => $value) { - $paths[$key] = rtrim($paths[$key], './'); - // Core only assumes that LudwigServiceProvider is adding - // PSR-4 paths, each PSR-0 path needs to be converted - // in order to work. - if ($resource == 'psr-0' && !empty($namespace)) { - if (!empty($paths[$key])) { - $paths[$key] .= '/'; - } - $paths[$key] .= str_replace('\\', '/', $namespace); - } + elseif ($resource == 'psr-4' || $resource == 'psr-0') { + $autoload = $package['autoload'][$resource]; + $package_namespaces = array_keys($autoload); } - // Combine $package_name an $paths into uniuqe $name_path value. - $name_path = $package_name . '_' . implode('-', $paths); - // Two versions of the same package are not possible. - // If multiple providers require the same package - // we keep the highest required version only, since it has - // the best probability to work for all providers, and - // it is the most secure. - if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { - // If the current item is going to be replaced with the new - // one, unset the current item first to keep all packages - // nicely sorted by provider name inside the 'Packages' table. - if (isset($packages[$name_path])) { - unset($packages[$name_path]); - } - // Add new package. + else { + // The unknown library type. $package_append = [ - 'namespace' => $namespace, - 'paths' => $paths, + 'namespace' => '', + 'paths' => [], 'installed' => TRUE, - 'resource' => $resource, + 'resource' => 'unknown', ]; - $packages[$name_path] = array_merge($package_base, $package_append); + $packages[$package_name] = array_merge($package_base, $package_append); + continue; + } + // Iterate through all the resources inside single autoload type. + foreach ($package_namespaces as $namespace) { + $paths_raw = $autoload[$namespace]; + // Support for both single path (string) and multiple + // paths (array) inside one resource. + $paths = []; + if (is_array($paths_raw)) { + $paths = $paths_raw; + } + elseif (is_string($paths_raw)) { + $paths[] = $paths_raw; + } + // Autoloading fails if the namespace ends with a backslash. + $namespace = trim($namespace, '\\'); + // Iterate through all the paths inside this resource. + foreach ($paths as $key => $value) { + $paths[$key] = rtrim($paths[$key], './'); + // Core only assumes that LudwigServiceProvider is adding + // PSR-4 paths, each PSR-0 path needs to be converted + // in order to work. + if ($resource == 'psr-0' && !empty($namespace)) { + if (!empty($paths[$key])) { + $paths[$key] .= '/'; + } + $paths[$key] .= str_replace('\\', '/', $namespace); + } + } + // Combine $package_name an $paths into uniuqe $name_path value. + $name_path = $package_name . '_' . implode('-', $paths); + // Two versions of the same package are not possible. + // If multiple providers require the same package + // we keep the highest required version only, since it has + // the best probability to work for all providers, and + // it is the most secure. + if (!isset($packages[$name_path]) || $packages[$name_path]['version'] < $package_data['version']) { + // If the current item is going to be replaced with the new + // one, unset the current item first to keep all packages + // nicely sorted by provider name inside the 'Packages' table. + if (isset($packages[$name_path])) { + unset($packages[$name_path]); + } + // Add new package. + $package_append = [ + 'namespace' => $namespace, + 'paths' => $paths, + 'installed' => TRUE, + 'resource' => $resource, + ]; + $packages[$name_path] = array_merge($package_base, $package_append); + } } } } } - } - elseif (!empty($package['include-path'])) { - // This is the Legacy library (depricated type). - // They do not have autoload composer.json section - // but "include-path" section instead. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => TRUE, - 'resource' => 'legacy', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); - } - else { - // The unknown library type. - $package_append = [ - 'namespace' => '', - 'paths' => [], - 'installed' => TRUE, - 'resource' => 'unknown', - ]; - $packages[$package_name] = array_merge($package_base, $package_append); + elseif (!empty($package['include-path'])) { + // This is the Legacy library (depricated type). + // They do not have autoload composer.json section + // but "include-path" section instead. + $package_append = [ + 'namespace' => '', + 'paths' => [], + 'installed' => TRUE, + 'resource' => 'legacy', + ]; + $packages[$package_name] = array_merge($package_base, $package_append); + } + else { + // The unknown library type. + $package_append = [ + 'namespace' => '', + 'paths' => [], + 'installed' => TRUE, + 'resource' => 'unknown', + ]; + $packages[$package_name] = array_merge($package_base, $package_append); + } } } } diff --git a/web/modules/contrib/ludwig/src/RequireOnce.php b/web/modules/contrib/ludwig/src/RequireOnce.php index 9d8d5bab905e921a66374ecfe6675c40eda24f49..432539f93392421d17e5249a0bed7219977ae913 100644 --- a/web/modules/contrib/ludwig/src/RequireOnce.php +++ b/web/modules/contrib/ludwig/src/RequireOnce.php @@ -3,6 +3,7 @@ namespace Drupal\ludwig; use GuzzleHttp\Exception\RequestException; +use Drupal\Core\StringTranslation\StringTranslationTrait; /** * Provides service for ludwig require_once calls. @@ -14,6 +15,8 @@ */ class RequireOnce { + use StringTranslationTrait; + /** * The helper function for Ludwig integration. * @@ -44,7 +47,9 @@ public function requireOnce($package_name, $file_to_require, $dir_name) { require_once $require; } else { - throw new \Exception(sprintf('File not found: %s.', $require)); + \Drupal::logger('ludwig')->error($this->t('File not found: @require.', [ + '@require' => $require, + ])); } } diff --git a/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml b/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml index cfdf533f392f4dd1ebc4ed8e9c3e62515e4701f7..95b7ba22dd805070a7335c79ab9dd88517d6d89d 100644 --- a/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml +++ b/web/modules/contrib/ludwig/tests/modules/ludwig_test/ludwig_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8 || ^9 dependencies: - ludwig -# Information added by Drupal.org packaging script on 2021-01-29 -version: '8.x-1.6' +# Information added by Drupal.org packaging script on 2021-02-15 +version: '8.x-1.7' project: 'ludwig' -datestamp: 1611958527 +datestamp: 1613389170 diff --git a/web/modules/contrib/memcache/composer.json b/web/modules/contrib/memcache/composer.json index 02d744c5585e9680a8a5d2005886fc84d52e78bf..8b46e877b4964f9ff068ad14dbb2aa639ec30733 100644 --- a/web/modules/contrib/memcache/composer.json +++ b/web/modules/contrib/memcache/composer.json @@ -7,9 +7,6 @@ "issues": "https://www.drupal.org/project/issues/memcache" }, "license": "GPL-2.0-or-later", - "require": { - "drupal/core": "^8.8 || ^9" - }, "extra": { "branch-alias": { "dev-8.x-2.x": "2.x-dev" diff --git a/web/modules/contrib/memcache/memcache.info.yml b/web/modules/contrib/memcache/memcache.info.yml index eba9a3a079e15244f639644ea09353b4e02b59f7..d7ece05f00688de4c3cab4d9eb9d3488c77e7666 100644 --- a/web/modules/contrib/memcache/memcache.info.yml +++ b/web/modules/contrib/memcache/memcache.info.yml @@ -2,9 +2,9 @@ name: Memcache description: 'High performance integration with memcache.' type: module package: 'Performance and scalability' -core_version_requirement: ^8.8 || ^9 +core_version_requirement: ^8.9 || ^9 -# Information added by Drupal.org packaging script on 2020-09-25 -version: '8.x-2.2' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-2.3' project: 'memcache' -datestamp: 1601053268 +datestamp: 1614802367 diff --git a/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml b/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml index 83f84c277035d47ef15ccb4d85e5aa3d015a9748..a842173dc24c6c8a2690486841f4bfca480f3654 100644 --- a/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml +++ b/web/modules/contrib/memcache/memcache_admin/memcache_admin.info.yml @@ -2,14 +2,14 @@ name: Memcache Admin description: Adds a User Interface to monitor the Memcache for this site. package: Performance and scalability type: module -core_version_requirement: ^8.8 || ^9 +core_version_requirement: ^8.9 || ^9 configure: memcache_admin.settings dependencies: - memcache:memcache -# Information added by Drupal.org packaging script on 2020-09-25 -version: '8.x-2.2' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-2.3' project: 'memcache' -datestamp: 1601053268 +datestamp: 1614802367 diff --git a/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml b/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml index 41de36ccfaac5c55327a98cc897e26222e28cfaa..c41f4d3dd7c44effa564fba96f5bb0c7c3c5e96a 100644 --- a/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml +++ b/web/modules/contrib/memcache/memcache_admin/memcache_admin.services.yml @@ -3,3 +3,11 @@ services: class: Drupal\memcache_admin\EventSubscriber\MemcacheAdminSubscriber tags: - { name: event_subscriber } + memcache_stats.memcached: + class: Drupal\memcache_admin\EventSubscriber\MemcacheServerStatsSubscriber + tags: + - { name: event_subscriber } + memcache_stats.mcrouter: + class: Drupal\memcache_admin\EventSubscriber\McrouterStatsSubscriber + tags: + - { name: event_subscriber } \ No newline at end of file diff --git a/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php b/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php index 7e119da5f836f1c4c04e98a6a11f1433ac976c89..2be90ba870430911c1d91b097933c7a43bbd6eed 100644 --- a/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php +++ b/web/modules/contrib/memcache/memcache_admin/src/Controller/MemcacheStatisticsController.php @@ -3,12 +3,11 @@ namespace Drupal\memcache_admin\Controller; use Drupal\Core\Controller\ControllerBase; -use Drupal\Core\Datetime\DateFormatter; use Drupal\Core\Link; use Drupal\Core\Messenger\MessengerTrait; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\Url; -use Drupal\Component\Render\HtmlEscapedText; +use Drupal\memcache_admin\Event\MemcacheStatsEvent; /** * Memcache Statistics. @@ -24,136 +23,35 @@ class MemcacheStatisticsController extends ControllerBase { * @param string $bin * The bin name. * - * @return string + * @return array * The page output. */ public function statsTable($bin = 'default') { - $output = []; - $servers = []; - - // Get the statistics. - $bin = $this->binMapping($bin); + $bin = $this->getBinMapping($bin); /** @var $memcache \Drupal\memcache\DrupalMemcacheInterface */ $memcache = \Drupal::service('memcache.factory')->get($bin, TRUE); - $stats = $memcache->stats($bin, 'default', TRUE); - - if (empty($stats[$bin])) { - // Failed to load statistics. Provide a useful error about where to get - // more information and help. - $this->messenger()->addError( - $this->t( - 'There may be a problem with your Memcache configuration. Please review @readme for more information.', - [ - '@readme' => 'README.txt', - ] - ) - ); - } - else { - if (count($stats[$bin])) { - $stats = $stats[$bin]; - $aggregate = array_pop($stats); - - if ($memcache->getMemcache() instanceof \Memcached) { - $version = $this->t('Memcached v@version', ['@version' => phpversion('Memcached')]); - } - elseif ($memcache->getMemcache() instanceof \Memcache) { - $version = $this->t('Memcache v@version', ['@version' => phpversion('Memcache')]); - } - else { - $version = $this->t('Unknown'); - $this->messenger()->addError($this->t('Failed to detect the memcache PECL extension.')); - } - foreach ($stats as $server => $statistics) { - if (empty($statistics['uptime'])) { - $this->messenger()->addError($this->t('Failed to connect to server at :address.', [':address' => $server])); - } - else { - $servers[] = $server; - - $data['server_overview'][$server] = $this->t('v@version running @uptime', ['@version' => $statistics['version'], '@uptime' => \Drupal::service('date.formatter')->formatInterval($statistics['uptime'])]); - $data['server_pecl'][$server] = $this->t('n/a'); - $data['server_time'][$server] = \Drupal::service('date.formatter')->format($statistics['time']); - $data['server_connections'][$server] = $this->statsConnections($statistics); - $data['cache_sets'][$server] = $this->statsSets($statistics); - $data['cache_gets'][$server] = $this->statsGets($statistics); - $data['cache_counters'][$server] = $this->statsCounters($statistics); - $data['cache_transfer'][$server] = $this->statsTransfer($statistics); - $data['cache_average'][$server] = $this->statsAverage($statistics); - $data['memory_available'][$server] = $this->statsMemory($statistics); - $data['memory_evictions'][$server] = number_format($statistics['evictions']); - } - } - } + // Instantiate our event. + $event = new MemcacheStatsEvent($memcache, $bin); - // Build a custom report array. - $report = [ - 'uptime' => [ - 'uptime' => [ - 'label' => $this->t('Uptime'), - 'servers' => $data['server_overview'], - ], - 'extension' => [ - 'label' => $this->t('PECL extension'), - 'servers' => [$servers[0] => $version], - ], - 'time' => [ - 'label' => $this->t('Time'), - 'servers' => $data['server_time'], - ], - 'connections' => [ - 'label' => $this->t('Connections'), - 'servers' => $data['server_connections'], - ], - ], - 'stats' => [], - 'memory' => [ - 'memory' => [ - 'label' => $this->t('Available memory'), - 'servers' => $data['memory_available'], - ], - 'evictions' => [ - 'label' => $this->t('Evictions'), - 'servers' => $data['memory_evictions'], - ], - ], - ]; + // Get the event_dispatcher service and dispatch the event. + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_dispatcher->dispatch(MemcacheStatsEvent::BUILD_MEMCACHE_STATS, $event); - // Don't display aggregate totals if there's only one server. - if (count($servers) > 1) { - $report['uptime']['uptime']['total'] = $this->t('n/a'); - $report['uptime']['extension']['servers'] = $data['server_pecl']; - $report['uptime']['extension']['total'] = $version; - $report['uptime']['time']['total'] = $this->t('n/a'); - $report['uptime']['connections']['total'] = $this->statsConnections($aggregate); - $report['memory']['memory']['total'] = $this->statsMemory($aggregate); - $report['memory']['evictions']['total'] = number_format($aggregate['evictions']); - } - - // Report on stats. - $stats = [ - 'sets' => $this->t('Sets'), - 'gets' => $this->t('Gets'), - 'counters' => $this->t('Counters'), - 'transfer' => $this->t('Transferred'), - 'average' => $this->t('Per-connection average'), - ]; + // Report the PHP Memcache(d) driver version. + if ($memcache->getMemcache() instanceof \Memcached) { + $raw_stats['driver_version'] = $this->t('PECL Driver in Use: Memcached v@version', ['@version' => phpversion('Memcached')]); + } + elseif ($memcache->getMemcache() instanceof \Memcache) { + $raw_stats['driver_version'] = $this->t('PECL Driver in Use: Memcache v@version', ['@version' => phpversion('Memcache')]); + } - foreach ($stats as $type => $label) { - $report['stats'][$type] = [ - 'label' => $label, - 'servers' => $data["cache_{$type}"], - ]; + // Get the event_dispatcher service and dispatch the event. + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_dispatcher->dispatch(MemcacheStatsEvent::REPORT_MEMCACHE_STATS, $event); - if (count($servers) > 1) { - $func = 'stats' . ucfirst($type); - $report['stats'][$type]['total'] = $this->{$func}($aggregate); - } - } - - $output = $this->statsTablesOutput($bin, $servers, $report); - } + $output = ['#markup' => '<p>' . $raw_stats['driver_version']]; + $output[] = $this->statsTablesOutput($bin, $event->getServers(), $event->getReport()); return $output; } @@ -229,17 +127,6 @@ private function binMapping($bin = 'cache') { } } - /** - * Helper function. Returns the bin name. - */ - private function defaultBin($bin) { - if ($bin == 'default') { - return 'cache'; - } - - return $bin; - } - /** * Statistics report: format total and open connections. */ @@ -253,63 +140,6 @@ private function statsConnections($stats) { ); } - /** - * Statistics report: calculate # of set cmds and total cmds. - */ - private function statsSets($stats) { - if (($stats['cmd_set'] + $stats['cmd_get']) == 0) { - $sets = 0; - } - else { - $sets = $stats['cmd_set'] / ($stats['cmd_set'] + $stats['cmd_get']) * 100; - } - if (empty($stats['uptime'])) { - $average = 0; - } - else { - $average = $sets / $stats['uptime']; - } - return $this->t( - '@average/s; @set sets (@sets%) of @total commands', - [ - '@average' => number_format($average, 2), - '@sets' => number_format($sets, 2), - '@set' => number_format($stats['cmd_set']), - '@total' => number_format($stats['cmd_set'] + $stats['cmd_get']), - ] - ); - } - - /** - * Statistics report: calculate # of get cmds, broken down by hits and misses. - */ - private function statsGets($stats) { - if (($stats['cmd_set'] + $stats['cmd_get']) == 0) { - $gets = 0; - } - else { - $gets = $stats['cmd_get'] / ($stats['cmd_set'] + $stats['cmd_get']) * 100; - } - if (empty($stats['uptime'])) { - $average = 0; - } - else { - $average = $stats['cmd_get'] / $stats['uptime']; - } - return $this->t( - '@average/s; @total gets (@gets%); @hit hits (@percent_hit%) @miss misses (@percent_miss%)', - [ - '@average' => number_format($average, 2), - '@gets' => number_format($gets, 2), - '@hit' => number_format($stats['get_hits']), - '@percent_hit' => ($stats['cmd_get'] > 0 ? number_format($stats['get_hits'] / $stats['cmd_get'] * 100, 2) : '0.00'), - '@miss' => number_format($stats['get_misses']), - '@percent_miss' => ($stats['cmd_get'] > 0 ? number_format($stats['get_misses'] / $stats['cmd_get'] * 100, 2) : '0.00'), - '@total' => number_format($stats['cmd_get']), - ] - ); - } - /** * Statistics report: calculate # of increments and decrements. */ @@ -334,73 +164,6 @@ private function statsCounters($stats) { ); } - /** - * Statistics report: calculate bytes transferred. - */ - private function statsTransfer($stats) { - if ($stats['bytes_written'] == 0) { - $written = 0; - } - else { - $written = $stats['bytes_read'] / $stats['bytes_written'] * 100; - } - return $this->t( - '@to:@from (@written% to cache)', - [ - '@to' => format_size((int) $stats['bytes_read']), - '@from' => format_size((int) $stats['bytes_written']), - '@written' => number_format($written, 2), - ] - ); - } - - /** - * Statistics report: calculate per-connection averages. - */ - private function statsAverage($stats) { - if ($stats['total_connections'] == 0) { - $get = 0; - $set = 0; - $read = 0; - $write = 0; - } - else { - $get = $stats['cmd_get'] / $stats['total_connections']; - $set = $stats['cmd_set'] / $stats['total_connections']; - $read = $stats['bytes_written'] / $stats['total_connections']; - $write = $stats['bytes_read'] / $stats['total_connections']; - } - return $this->t( - '@read in @get gets; @write in @set sets', - [ - '@get' => number_format($get, 2), - '@set' => number_format($set, 2), - '@read' => format_size(number_format($read, 2)), - '@write' => format_size(number_format($write, 2)), - ] - ); - } - - /** - * Statistics report: calculate available memory. - */ - private function statsMemory($stats) { - if ($stats['limit_maxbytes'] == 0) { - $percent = 0; - } - else { - $percent = 100 - $stats['bytes'] / $stats['limit_maxbytes'] * 100; - } - return $this->t( - '@available (@percent%) of @total', - [ - '@available' => format_size($stats['limit_maxbytes'] - $stats['bytes']), - '@percent' => number_format($percent, 2), - '@total' => format_size($stats['limit_maxbytes']), - ] - ); - } - /** * Generates render array for output. */ @@ -409,6 +172,9 @@ private function statsTablesOutput($bin, $servers, $stats) { $memcache_bins = $memcache->getBins(); $links = []; + if (!is_array($servers)) { + return; + } foreach ($servers as $server) { // Convert socket file path so it works with an argument, this should @@ -546,4 +312,31 @@ private function statsTablesRawOutput($cluster, $server, $stats, $type) { return $build; } + /** + * Helper function, reverse map the memcache_bins variable. + */ + protected function getBinMapping($bin = 'cache') { + $memcache = \Drupal::service('memcache.factory')->get(NULL, TRUE); + $memcache_bins = $memcache->getBins(); + + $bins = array_flip($memcache_bins); + if (isset($bins[$bin])) { + return $bins[$bin]; + } + else { + return $this->defaultBin($bin); + } + } + + /** + * Helper function. Returns the bin name. + */ + protected function defaultBin($bin) { + if ($bin == 'default') { + return 'cache'; + } + + return $bin; + } + } diff --git a/web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php b/web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..4b8fc07c59b9c34d995a30dda98e03ab2cea501a --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Event/MemcacheStatsEvent.php @@ -0,0 +1,190 @@ +<?php + +namespace Drupal\memcache_admin\Event; + +use Drupal\memcache\DrupalMemcacheInterface; +use Symfony\Component\EventDispatcher\Event; + +/** + * Memcache Stats Event + * + * The memcache stats event stores all the attributes generated by the different + * types of memcache servers. Currently memcache_admin supports memcache and + * mcrouter. + */ +class MemcacheStatsEvent extends Event { + + /** + * Event used to build the memcache stats array. + * + * When the stats array is created, this event allows modules to inject extra + * data to be contained within the array. + */ + const BUILD_MEMCACHE_STATS = 'memcache_build_memcache_stats'; + + /** + * Event used to report out the memcache stats array. + * + * When the stats array is created, this event allows modules to inject extra + * data to be contained within the array. + */ + const REPORT_MEMCACHE_STATS = 'memcache_report_memcache_stats'; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $rawStats; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $formattedStats = []; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $totals; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $report; + + /** + * The Stats Array for which to create attributes. + * + * @var array + */ + protected $servers; + + /** + * Cache Bin To Retrieve + * @var string $bin + */ + protected $bin; + + protected $memcache; + + /** + * MemcacheStatsEvent constructor. + * + * @param array $raw_stats + * The Stats Data. + * @param string $bin + * The cache bin. + * + */ + public function __construct(DrupalMemcacheInterface $memcache, string $bin = 'default') { + $this->memcache = $memcache; + $this->rawStats = $memcache->stats($bin, 'default', TRUE); + $this->formattedStats = []; + $this->bin = $bin; + } + + /** + * Get the Stats Array being created. + * + * @return array + * The Stats Object. + */ + public function getRawStats() { + return $this->rawStats; + } + + /** + * Gets the stats formatted from a MemcacheStatsInterface. + * @param $server_type + * + * @return array|mixed + */ + public function getFormattedStats($server_type) { + if (isset($this->formattedStats[$server_type])) { + return $this->formattedStats[$server_type]; + } + return []; + } + + /** + * Returns the memcache connection. + */ + public function getMemcache() { + return $this->memcache; + } + + /** + * Returns the cache bin from this event. + */ + public function getCacheBin() { + return $this->bin; + } + + /** + * Sets the formatted stats array with relevant data. + * + * @param string $format + * @param string $bin + * @param string $server + * @param \Drupal\memcache_admin\Stats\MemcacheStatsInterface $data + */ + public function updateFormattedStats($format, $bin, $server, $data) { + $this->formattedStats[$format][$bin][$server] = $data; + } + + /** + * Update the total column when multiple memcache servers exist. + * @param $total + */ + public function updateTotals($total) { + $this->totals = $total; + } + + /** + * Return the total values from all memcache servers. + * @return array + */ + public function getTotals() { + return $this->totals; + } + + /** + * Add a new server to the servers array. + * @param string $server + */ + public function updateServers($server) { + $this->servers[] = $server; + } + + /** + * Retrieve all servers from the servers array. + * + * @return array + */ + public function getServers() { + return $this->servers; + } + + /** + * Update the full report from the event. + * @param $report + */ + public function updateReport($report) { + $this->report = $report; + } + + /** + * Returns the stats report. + * @return array + */ + public function getReport() { + return $this->report; + } + +} diff --git a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..6432ba94b65ee32b8bc53becffa71bf866d65bb1 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/McrouterStatsSubscriber.php @@ -0,0 +1,68 @@ +<?php + +namespace Drupal\memcache_admin\EventSubscriber; + +use Drupal\Core\Messenger\MessengerTrait; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\memcache_admin\Event\MemcacheStatsEvent; +use Drupal\memcache_admin\Stats\McrouterStatsObject; +use Drupal\memcache_admin\Stats\MemcacheStatsObject; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Adds memcache server specific details to the stats array. + */ +class McrouterStatsSubscriber implements EventSubscriberInterface { + + use StringTranslationTrait; + use MessengerTrait; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[MemcacheStatsEvent::BUILD_MEMCACHE_STATS][] = [ + 'onPopulateStats', + 100 + ]; + return $events; + } + + /** + * Adds stats to the memcache event. + * + * @param \Drupal\memcache_admin\Event\MemcacheStatsEvent $event + * The event being dispatched. + * + * @throws \Exception + */ + public function onPopulateStats(MemcacheStatsEvent $event) { + $memcache = $event->getMemcache(); + if (!$memcache->getMemcache()->get('__mcrouter__.version')) { + return; + } + + $raw_stats = $event->getRawStats(); + $bin = $event->getCacheBin(); + + // No cache bin data, return. + if (!isset($raw_stats[$bin])) { + return; + } + // No servers found, return. + if (!is_array($raw_stats[$bin])) { + return; + } + $servers = array_keys($raw_stats[$bin]); + foreach ($servers as $server) { + if ($server =='total') { + continue; + } + // McRouter reports num_servers use that for detecting stats. + if (isset($raw_stats[$bin][$server]['num_servers'])) { + $event->updateFormattedStats('memcache', $bin, $server, new McrouterStatsObject($raw_stats[$bin][$server])); + $event->updateServers($server); + } + } + } +} diff --git a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php index e0a967627203a3c3357228d17964b1259b21342e..03ae73981360e2acb9715dc073fd5cd4f1e95697 100644 --- a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php +++ b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheAdminSubscriber.php @@ -32,16 +32,6 @@ public static function getSubscribedEvents() { public function displayStatistics(FilterResponseEvent $event) { $user = \Drupal::currentUser(); - // Removed exclusion criteria, untested. Will likely need to add some of - // these back in. - // @codingStandardsIgnoreStart - // strstr($_SERVER['PHP_SELF'], '/update.php') - // substr($_GET['q'], 0, strlen('batch')) == 'batch' - // strstr($_GET['q'], 'autocomplete') - // substr($_GET['q'], 0, strlen('system/files')) == 'system/files' - // in_array($_GET['q'], ['upload/js', 'admin/content/node-settings/rebuild']) - // @codingStandardsIgnoreEnd - // @todo validate these checks if ($user->id() == 0) { // Suppress for the above criteria. } diff --git a/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..758221bd49c43c0e4be225dd2b08250f1c6fe9f8 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/EventSubscriber/MemcacheServerStatsSubscriber.php @@ -0,0 +1,190 @@ +<?php + +namespace Drupal\memcache_admin\EventSubscriber; + +use Drupal\Core\Messenger\MessengerTrait; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\memcache_admin\Event\MemcacheStatsEvent; +use Drupal\memcache_admin\Stats\MemcacheStatsObject; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Adds memcache server specific details to the stats array. + */ +class MemcacheServerStatsSubscriber implements EventSubscriberInterface { + + use StringTranslationTrait; + use MessengerTrait; + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[MemcacheStatsEvent::BUILD_MEMCACHE_STATS][] = [ + 'onPopulateStats', + 100 + ]; + $events[MemcacheStatsEvent::REPORT_MEMCACHE_STATS][] = [ + 'onReportStats', + 100 + ]; + return $events; + } + + /** + * Populates the Memcache Server Stats + * + * @param \Drupal\memcache_admin\Event\MemcacheStatsEvent $event + * The event being dispatched. + * + * @throws \Exception + */ + public function onPopulateStats(MemcacheStatsEvent $event) { + $raw_stats = $event->getRawStats(); + $bin = $event->getCacheBin(); + + // No cache bin data, return. + if (!isset($raw_stats[$bin])) { + return; + } + // No servers found, return. + if (!is_array($raw_stats[$bin])) { + return; + } + $servers = array_keys($raw_stats[$bin]); + $memcache_servers = []; + foreach ($servers as $server) { + // Memcache servers report libevent version, use that for detecting stats. + if (isset($raw_stats[$bin][$server]['libevent'])) { + $event->updateFormattedStats('memcache', $bin, $server, new MemcacheStatsObject($raw_stats[$bin][$server])); + $event->updateServers($server); + } + } + if (isset($raw_stats[$bin]['total'])) { + $event->updateTotals([$bin => new MemcacheStatsObject($raw_stats[$bin]['total'])]); + } + } + + /** + * Populates the reporting of a stored set of stats. + * + * @param \Drupal\memcache_admin\Event\MemcacheStatsEvent $event + */ + public function onReportStats(MemcacheStatsEvent $event) { + $stats = $event->getFormattedStats('memcache'); + $bin = $event->getCacheBin(); + + // No cache bin data, return. + if (empty($stats[$bin])) { + // Failed to load statistics. Provide a useful error about where to get + // more information and help. + $this->messenger()->addError( + $this->t( + 'There may be a problem with your Memcache configuration. Please review @readme for more information.', + [ + '@readme' => 'README.txt', + ] + ) + ); + return; + } + // No servers found, return. + if (!is_array($stats[$bin])) { + return; + } + + /** + * @var string $server + * @var MemcacheStatsObject $statistics + */ + foreach ($stats[$bin] as $server => $statistics) { + if (empty($statistics->getUptime())) { + $this->messenger() + ->addError($this->t('Failed to connect to server at :address.', [':address' => $server])); + } + else { + $data['server_overview'][$server] = $this->t('v@version running @uptime', [ + '@version' => $statistics->getVersion(), + '@uptime' => $statistics->getUptime() + ]); + $data['server_time'][$server] = $statistics->getServerTime(); + $data['server_connections'][$server] = $statistics->getConnections(); + $data['cache_sets'][$server] = $statistics->getSets(); + $data['cache_gets'][$server] = $statistics->getGets(); + $data['cache_counters'][$server] = $statistics->getCounters(); + $data['cache_transfer'][$server] = $statistics->getTransferred(); + $data['cache_average'][$server] = $statistics->getConnectionAvg(); + $data['memory_available'][$server] = $statistics->getMemory(); + $data['memory_evictions'][$server] = $statistics->getEvictions(); + } + } + + // Build a custom report array. + $report = [ + 'uptime' => [ + 'uptime' => [ + 'label' => $this->t('Uptime'), + 'servers' => $data['server_overview'], + ], + 'time' => [ + 'label' => $this->t('Time'), + 'servers' => $data['server_time'], + ], + 'connections' => [ + 'label' => $this->t('Connections'), + 'servers' => $data['server_connections'], + ], + ], + 'stats' => [ + 'sets' => [ + 'label' => $this->t('Sets'), + 'servers' => $data["cache_sets"], + ], + 'gets' => [ + 'label' => $this->t('Gets'), + 'servers' => $data["cache_gets"], + ], + 'counters' => [ + 'label' => $this->t('Counters'), + 'servers' => $data["cache_counters"], + ], + 'transfer' => [ + 'label' => $this->t('Transferred'), + 'servers' => $data["cache_transfer"], + ], + 'average' => [ + 'label' => $this->t('Per-connection average'), + 'servers' => $data["cache_average"], + ], + ], + 'memory' => [ + 'memory' => [ + 'label' => $this->t('Available memory'), + 'servers' => $data['memory_available'], + ], + 'evictions' => [ + 'label' => $this->t('Evictions'), + 'servers' => $data['memory_evictions'], + ], + ], + ]; + + // Don't display aggregate totals if there's only one server. + if (count($stats[$bin]) > 1) { + /** @var MemcacheStatsObject $totals */ + $totals = $event->getTotals(); + $report['uptime']['uptime']['total'] = $this->t('n/a'); + $report['uptime']['time']['total'] = $this->t('n/a'); + $report['uptime']['connections']['total'] = $totals[$bin]->getConnections(); + $report['stats']['sets']['total'] = $totals[$bin]->getSets(); + $report['stats']['gets']['total'] = $totals[$bin]->getGets(); + $report['stats']['counters']['total'] = $totals[$bin]->getCounters(); + $report['stats']['transfer']['total'] = $totals[$bin]->getTransferred(); + $report['stats']['average']['total'] = $totals[$bin]->getConnectionAvg(); + $report['memory']['memory']['total'] = $totals[$bin]->getMemory(); + $report['memory']['evictions']['total'] = $totals[$bin]->getEvictions(); + } + + $event->updateReport($report); + } +} diff --git a/web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php b/web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php new file mode 100644 index 0000000000000000000000000000000000000000..4651bdf23578786294c791f667edfeb08be29f40 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Stats/McrouterStatsObject.php @@ -0,0 +1,123 @@ +<?php + +namespace Drupal\memcache_admin\Stats; + +use Drupal\Core\StringTranslation\StringTranslationTrait; + +/** + * Class MemcacheStats. + * + * @package Drupal\memcache_admin\Stats + */ +class McrouterStatsObject extends MemcacheStatsObject implements MemcacheStatsInterface { + + use StringTranslationTrait; + + /** + * @var array $stats + */ + protected $stats; + + public function __construct(array $raw_stats) { + $this->stats = $raw_stats; + } + + /** + * @inheritDoc + */ + public function getExtension(): string { + return isset($this->stats['version']) ?? self::NA; + } + + /** + * @inheritDoc + */ + public function getServerTime(): string { + return isset($this->stats['time']) ? \Drupal::service('date.formatter')->format($this->stats['time']) : self::NA; + } + + /** + * Statistics report: format total and open connections. + */ + public function getConnections() { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getCurrentConnections(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getTotalConnections(): string { + return self::NA; + } + + /** + * Statistics report: calculate # of get cmds, broken down by hits and misses. + */ + public function getGets(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getCounters(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getTransferred(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getConnectionAvg(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getMemory(): string { + return self::NA; + } + + /** + * @inheritDoc + */ + public function getEvictions(): string { + return isset($this->stats['evictions']) ? number_format($this->stats['evictions']) : self::NA; + } + + /** + * @inheritDoc + */ + public function setRaw(array $raw_data) { + $this->stats = $raw_data; + } + + /** + * @inheritDoc + */ + public function getRaw(): array { + return $this->stats; + } + + /** + * @inheritDoc + */ + public function getVersion(): string { + return isset($this->stats['version']) ? (string)$this->stats['version'] : self::NA; + } + +} \ No newline at end of file diff --git a/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..7659558974552d2563e4ed0928deb2620fda9717 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsInterface.php @@ -0,0 +1,103 @@ +<?php + +namespace Drupal\memcache_admin\Stats; + +/** + * Defines the Memcache connection interface. + */ +interface MemcacheStatsInterface { + + /** + * Sets an array of raw data for the memcache server. + * + * @param array $raw_data + * + * @return void + */ + public function setRaw(array $raw_data); + + /** + * Returns raw data from the memcache server. + * + * @return array + */ + public function getRaw(): array; + + /** + * Returns the memcache server version. + * + * @return string + */ + public function getVersion(): string; + + /** + * Returns the uptime for the memcache server. + * + * @return string + */ + public function getUptime(): string; + + /** + * Returns the PECL extension for the memcache server. + * + * @return string + */ + public function getExtension(): string; + + /** + * Returns the total connections for the memcache server. + * + * @return string + */ + public function getTotalConnections(): string; + + /** + * Returns the cache sets for the memcache server. + * + * @return string + */ + public function getSets(): string; + + /** + * Returns the cache gets for the memcache server. + * + * @return string + */ + public function getGets(): string; + + /** + * Returns the counters for the memcache server. + * + * @return string + */ + public function getCounters(): string; + + /** + * Returns the data transferred for the memcache server. + * + * @return string + */ + public function getTransferred(): string; + + /** + * Returns the connection averages for the memcache server. + * + * @return string + */ + public function getConnectionAvg(): string; + + /** + * Returns the memory available for the memcache server. + * + * @return string + */ + public function getMemory(): string; + + /** + * Returns the evictions for the memcache server. + * + * @return string + */ + public function getEvictions(): string; + +} \ No newline at end of file diff --git a/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php new file mode 100644 index 0000000000000000000000000000000000000000..4a4d51677504ea56862b18ba936ec869a73501d0 --- /dev/null +++ b/web/modules/contrib/memcache/memcache_admin/src/Stats/MemcacheStatsObject.php @@ -0,0 +1,285 @@ +<?php + +namespace Drupal\memcache_admin\Stats; + +use Drupal\Core\StringTranslation\StringTranslationTrait; + +/** + * Class MemcacheStats. + * + * @package Drupal\memcache_admin\Stats + */ +class MemcacheStatsObject implements MemcacheStatsInterface { + + use StringTranslationTrait; + + /** + * Stat Not Available + */ + CONST NA = 'n/a'; + + /** + * @var array $stats + */ + protected $stats; + + public function __construct(array $raw_stats) { + $this->stats = $raw_stats; + } + + /** + * @inheritDoc + */ + public function getUptime(): string { + return isset($this->stats['uptime']) ? \Drupal::service('date.formatter')->formatInterval($this->stats['uptime']) : self::NA; + } + + /** + * @inheritDoc + */ + public function getExtension(): string { + return isset($this->stats['extension']) ?? self::NA; + } + + /** + * @inheritDoc + */ + public function getServerTime(): string { + return isset($this->stats['time']) ? \Drupal::service('date.formatter')->format($this->stats['time']) : self::NA; + } + + /** + * Statistics report: format total and open connections. + */ + public function getConnections() { + if (!isset($this->stats['curr_connections']) || + !isset($this->stats['total_connections']) + ) { + return self::NA; + } + + return $this->t( + '@current open of @total total', + [ + '@current' => number_format($this->stats['curr_connections']), + '@total' => number_format($this->stats['total_connections']), + ] + ); + } + + /** + * @inheritDoc + */ + public function getCurrentConnections(): string { + return isset($this->stats['curr_connections']) ?? '0'; + } + + /** + * @inheritDoc + */ + public function getTotalConnections(): string { + return isset($this->stats['total_connections']) ?? '0'; + } + + /** + * Statistics report: calculate # of set cmds and total cmds. + */ + public function getSets(): string { + if (!isset($this->stats['cmd_set'])) { + return self::NA; + } + + if (($this->stats['cmd_set'] + $this->stats['cmd_get']) == 0) { + $sets = 0; + } + else { + $sets = $this->stats['cmd_set'] / ($this->stats['cmd_set'] + $this->stats['cmd_get']) * 100; + } + if (!isset($this->stats['uptime'])) { + $average = 0; + } + else { + $average = $sets / $this->stats['uptime']; + } + return $this->t( + '@average/s; @set sets (@sets%) of @total commands', + [ + '@average' => number_format($average, 2), + '@sets' => number_format($sets, 2), + '@set' => number_format($this->stats['cmd_set']), + '@total' => number_format($this->stats['cmd_set'] + $this->stats['cmd_get']), + ] + ); + } + + /** + * Statistics report: calculate # of get cmds, broken down by hits and misses. + */ + public function getGets(): string { + if (!isset($this->stats['cmd_set']) || !isset($this->stats['cmd_get'])) { + return self::NA; + } + else { + $get = $this->stats['cmd_get']; + $set = $this->stats['cmd_set']; + $hits = isset($this->stats['get_hits']) ?? 0; + $misses = isset($this->stats['get_misses']) ?? 0; + } + + if (($set + $get) == 0) { + $gets = 0; + } + else { + $gets = $get / ($set + $get) * 100; + } + if (empty($stats['uptime'])) { + $average = 0; + } + else { + $average = $get / $stats['uptime']; + } + return $this->t( + '@average/s; @total gets (@gets%); @hit hits (@percent_hit%) @miss misses (@percent_miss%)', + [ + '@average' => number_format($average, 2), + '@gets' => number_format($gets, 2), + '@hit' => number_format($hits), + '@percent_hit' => ($get > 0 ? number_format($hits / $get * 100, 2) : '0.00'), + '@miss' => number_format($misses), + '@percent_miss' => ($get > 0 ? number_format($misses / $get * 100, 2) : '0.00'), + '@total' => number_format($get), + ] + ); + } + + /** + * @inheritDoc + */ + public function getCounters(): string { + $incr_hits = isset($this->stats['incr_hits']) ?? 0; + $incr_misses = isset($this->stats['incr_misses']) ?? 0; + $decr_hits = isset($this->stats['decr_hits']) ?? 0; + $decr_misses = isset($this->stats['decr_misses']) ?? 0; + + return $this->t( + '@incr increments, @decr decrements', + [ + '@incr' => number_format($incr_hits + $incr_misses), + '@decr' => number_format($decr_hits + $decr_misses), + ] + ); + } + + /** + * @inheritDoc + */ + public function getTransferred(): string { + $read = isset($this->stats['bytes_read']) ?? 0; + $write = isset($this->stats['bytes_written']) ?? 0; + + if ($write == 0) { + $written = 0; + } + else { + $written = $read / $write * 100; + } + return $this->t( + '@to:@from (@written% to cache)', + [ + '@to' => format_size((int) $read), + '@from' => format_size((int) $write), + '@written' => number_format($written, 2), + ] + ); + } + + /** + * @inheritDoc + */ + public function getConnectionAvg(): string { + if (!isset($this->stats['total_connections']) || + !isset($this->stats['cmd_get']) || + !isset($this->stats['cmd_set']) || + !isset($this->stats['bytes_written']) || + !isset($this->stats['bytes_read']) + ) { + return self::NA; + } + if ($this->stats['total_connections'] == 0) { + $get = 0; + $set = 0; + $read = 0; + $write = 0; + } + else { + $get = $this->stats['cmd_get'] / $this->stats['total_connections']; + $set = $this->stats['cmd_set'] / $this->stats['total_connections']; + $read = $this->stats['bytes_written'] / $this->stats['total_connections']; + $write = $this->stats['bytes_read'] / $this->stats['total_connections']; + } + return $this->t( + '@read in @get gets; @write in @set sets', + [ + '@get' => number_format($get, 2), + '@set' => number_format($set, 2), + '@read' => format_size((int) number_format($read, 2)), + '@write' => format_size((int) number_format($write, 2)), + ] + ); + } + + /** + * @inheritDoc + */ + public function getMemory(): string { + if (!isset($this->stats['limit_maxbytes']) || + !isset($this->stats['bytes']) + ) { + return self::NA; + } + + if ($this->stats['limit_maxbytes'] == 0) { + $percent = 0; + } + else { + $percent = 100 - $this->stats['bytes'] / $this->stats['limit_maxbytes'] * 100; + } + return $this->t( + '@available (@percent%) of @total', + [ + '@available' => format_size($this->stats['limit_maxbytes'] - $this->stats['bytes']), + '@percent' => number_format($percent, 2), + '@total' => format_size($this->stats['limit_maxbytes']), + ] + ); + } + + /** + * @inheritDoc + */ + public function getEvictions(): string { + return isset($this->stats['evictions']) ? number_format($this->stats['evictions']) : self::NA; + } + + /** + * @inheritDoc + */ + public function setRaw(array $raw_data) { + $this->stats = $raw_data; + } + + /** + * @inheritDoc + */ + public function getRaw(): array { + return $this->stats; + } + + /** + * @inheritDoc + */ + public function getVersion(): string { + return isset($this->stats['version']) ? (string)$this->stats['version'] : self::NA; + } + +} \ No newline at end of file diff --git a/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php b/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php index 8cb844075a218d5bee6036459bd07c031bc7dbfb..2b2f8185463b7a59cc42123100e489ce896079f1 100644 --- a/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php +++ b/web/modules/contrib/memcache/src/Cache/TimestampCacheTagsChecksum.php @@ -3,7 +3,6 @@ namespace Drupal\memcache\Cache; use Drupal\Core\Cache\CacheTagsChecksumInterface; -use Drupal\Core\Cache\CacheTagsChecksumTrait; use Drupal\Core\Cache\CacheTagsInvalidatorInterface; use Drupal\memcache\Invalidator\TimestampInvalidatorInterface; @@ -12,10 +11,6 @@ */ class TimestampCacheTagsChecksum implements CacheTagsChecksumInterface, CacheTagsInvalidatorInterface { - use CacheTagsChecksumTrait { - getCurrentChecksum as traitGetCurrentChecksum; - } - /** * The timestamp invalidator object. * @@ -23,6 +18,22 @@ class TimestampCacheTagsChecksum implements CacheTagsChecksumInterface, CacheTag */ protected $invalidator; + /** + * Contains already loaded cache invalidations from the backend. + * + * @var array + */ + protected $tagCache = []; + + /** + * A list of tags that have already been invalidated in this request. + * + * Used to prevent the invalidation of the same cache tag multiple times. + * + * @var array + */ + protected $invalidatedTags = []; + /** * Constructs a TimestampCacheTagsChecksum object. * @@ -36,8 +47,14 @@ public function __construct(TimestampInvalidatorInterface $invalidator) { /** * {@inheritdoc} */ - public function doInvalidateTags(array $tags) { + public function invalidateTags(array $tags) { foreach ($tags as $tag) { + // @todo Revisit this behavior and determine a better way to handle. + // Only invalidate tags once per request unless they are written again. + if (isset($this->invalidatedTags[$tag])) { + continue; + } + $this->invalidatedTags[$tag] = TRUE; $this->tagCache[$tag] = $this->invalidator->invalidateTimestamp($tag); } } @@ -46,7 +63,19 @@ public function doInvalidateTags(array $tags) { * {@inheritdoc} */ public function getCurrentChecksum(array $tags) { - return min($this->invalidator->getCurrentTimestamp(), $this->traitGetCurrentChecksum($tags)); + // @todo Revisit the invalidatedTags hack. + // Remove tags that were already invalidated during this request from the + // static caches so that another invalidation can occur later in the same + // request. Without that, written cache items would not be invalidated + // correctly. + foreach ($tags as $tag) { + unset($this->invalidatedTags[$tag]); + } + // Taking the minimum of the current timestamp and the checksum is used to + // ensure that items that are not valid yet are identified properly as not + // valid. The checksum will change continuously until the item is valid, + // at which point the checksum will match and freeze at that value. + return min($this->invalidator->getCurrentTimestamp(), $this->calculateChecksum($tags)); } /** @@ -73,9 +102,9 @@ protected function calculateChecksum(array $tags) { $query_tags = array_diff($tags, array_keys($this->tagCache)); if ($query_tags) { - $tag_invalidations = $this->invalidator->getLastInvalidationTimestamps($query_tags); - $this->tagCache += $tag_invalidations; - $invalid = array_diff($query_tags, array_keys($tag_invalidations)); + $backend_tags = $this->invalidator->getLastInvalidationTimestamps($query_tags); + $this->tagCache += $backend_tags; + $invalid = array_diff($query_tags, array_keys($backend_tags)); if (!empty($invalid)) { // Invalidate any missing tags now. This is necessary because we cannot // zero-optimize our tag list -- we can't tell the difference between @@ -110,21 +139,9 @@ protected function calculateChecksum(array $tags) { /** * {@inheritdoc} */ - protected function getTagInvalidationCounts(array $tags) { - // Note that the CacheTagsChecksumTrait assumes that the checksum strategy - // uses integer counters on each cache tag, but here we use timestamps. We - // return an empty array since we don't fit that mould. Currently only - // \Drupal\Core\Cache\CacheTagsChecksumTrait::calculateChecksum uses this - // method, which we override. - return []; + public function reset() { + $this->tagCache = []; + $this->invalidatedTags = []; } - /** - * {@inheritdoc} - */ - protected function getDatabaseConnection() { - // This is not injected to avoid a dependency on the database in the - // critical path. It is only needed during cache tag invalidations. - return \Drupal::database(); - } } diff --git a/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php b/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php index f6a9a699c8c8abd3d5244ecf7e19a55f4d4d1dcb..07df5bf012bb7cddb974210ac91d1a5800305419 100755 --- a/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php +++ b/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php @@ -68,7 +68,7 @@ public function getMulti(array $keys) { } } - if (PHP_MAJOR_VERSION === 7) { + if (PHP_MAJOR_VERSION >= 7) { $results = $this->memcache->getMulti($full_keys, \Memcached::GET_PRESERVE_ORDER); } else { diff --git a/web/modules/contrib/memcache/src/MemcacheBackend.php b/web/modules/contrib/memcache/src/MemcacheBackend.php index 32db0c17abdfa3e4a6c03dd703efd0dc33a9a2f4..b80bf2eac0a7702a205caf2d2653b57a72a9a9b9 100644 --- a/web/modules/contrib/memcache/src/MemcacheBackend.php +++ b/web/modules/contrib/memcache/src/MemcacheBackend.php @@ -74,13 +74,6 @@ class MemcacheBackend implements CacheBackendInterface { */ protected $timestampInvalidator; - /** - * Delayed deletions for deletions during a transaction. - * - * @var string[] - */ - protected $delayedDeletions = []; - /** * Constructs a MemcacheBackend object. * @@ -319,56 +312,18 @@ public function setMultiple(array $items) { * {@inheritdoc} */ public function delete($cid) { - $this->deleteMultiple([$cid]); + $this->memcache->delete($cid); } /** * {@inheritdoc} */ public function deleteMultiple(array $cids) { - $in_transaction = \Drupal::database()->inTransaction(); - if ($in_transaction) { - if (empty($this->delayedDeletions)) { - \Drupal::database()->addRootTransactionEndCallback([$this, 'postRootTransactionCommit']); - } - $this->delayedDeletions = array_unique(array_merge($this->delayedDeletions, $cids)); - } - else { - $this->doDeleteMultiple($cids); - } - } - - /** - * Execute the deletion. - * - * This can be delayed to avoid race conditions. - * - * @param array $cids - * An array of cache IDs to delete. - * - * @see static::deleteMultiple() - */ - public function doDeleteMultiple(array $cids) { foreach ($cids as $cid) { $this->memcache->delete($cid); } } - /** - * Callback to be invoked after a database transaction gets committed. - * - * Invalidates all delayed cache deletions. - * - * @param bool $success - * Whether or not the transaction was successful. - */ - public function postRootTransactionCommit($success) { - if ($success) { - $this->doDeleteMultiple($this->delayedDeletions); - } - $this->delayedDeletions = []; - } - /** * {@inheritdoc} */ diff --git a/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml b/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml index ec7b0ff6e2f80bab9647ad64d3807b84803bb7c1..6e4d6daeacec8a41f08c165513ed1ffd33f370ba 100644 --- a/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml +++ b/web/modules/contrib/memcache/tests/modules/memcache_test/memcache_test.info.yml @@ -5,7 +5,7 @@ package: Testing dependencies: - memcache:memcache -# Information added by Drupal.org packaging script on 2020-09-25 -version: '8.x-2.2' +# Information added by Drupal.org packaging script on 2021-03-03 +version: '8.x-2.3' project: 'memcache' -datestamp: 1601053268 +datestamp: 1614802367 diff --git a/web/modules/contrib/metatag/CHANGELOG.txt b/web/modules/contrib/metatag/CHANGELOG.txt index e5549ef09e1afdad0c6d23fcd1ba16fd8b3b7926..0631fc90050f28d0e1065af0fe840e448bd58431 100644 --- a/web/modules/contrib/metatag/CHANGELOG.txt +++ b/web/modules/contrib/metatag/CHANGELOG.txt @@ -1,3 +1,50 @@ +Metatag 8.x-1.16, 2021-03-15 +---------------------------- +#3186893 by DamienMcKenna: Document how to update from Metatag Access to Metatag + Extended Perms. +#3187583 by jrb: Syntax error when running PHP 7.0. +#3187898 by rutiolma: Comply with migrations using migrate_upgrade. +#3182548 by DamienMcKenna: Fix tests on 8.x-1.x branch for D9.1. +#3158186 by siddhant.bhosale, rahulrasgon, rokzabukovec, sabina.h, + DamienMcKenna: Replace usages of assertions that are deprecated. +#3186770 by mortim07: System status report page indicates Metatag's token types + do not have any tokens defined. +#3188806 by mortim07, acbramley, DamienMcKenna: Check if the entity being viewed + is the route entity. +#3188839 by mortim07, DamienMcKenna, mrshowerman, FiNeX, bwaindwain: Node tokens + missing. +#3189138 by bwaindwain, DamienMcKenna: Form element still visible even though + permissions turned off. +#3191109 by thalles: Replace deprecated Drupal\KernelTests\AssertLegacyTrait + ::assertEqual by $this->assertEquals(). +#3190808 by Wim Leers, DamienMcKenna: Do not run a "table exists" query for + every migrated row of data (regardless of whether it's a metatag row or not!). +#3193523 by DamienMcKenna: Removed files accidentally committed. +#3189850 by cmod, DamienMcKenna, J-Lee: Undefined index: href in + metatag_page_attachments(). +#3077781 by thejimbirch, DamienMcKenna, mmbk, cindytwilliams: Remove references + to the amphtml meta tag. +#3193502 by DaliaMoh, aritrika.d, DamienMcKenna: Extra if() statement in + _metatag_is_migration_plugin_supported(). +#3123583 by DamienMcKenna, Berdir, jonathan1055: Add Devel dependency, tests + back again. +#3199122 by DamienMcKenna, thejimbirch: Fix compatibility with Drupal 9. +#3199060 by Santhosh-Kumar-Rengasamy, DamienMcKenna: Custom Migration dependency + issue for d7 migrate process plugin. +#2930291 by dobe, trobey, DamienMcKenna, sylus: Expand all text fields to allow + 1,024 characters. +#3202865 by stmh, DamienMcKenna: logic in generateRawElements does not work with + hreflangs. +#2941632 by bgilhome, rokzabukovec, DamienMcKenna, yannickoo, thejimbirch: + og:latitude/longitude have been replaced by place:location:latitude/longitude. +#3196133 by leopathu, DamienMcKenna: Exclusive robots metatags (index, noindex, + follow, nofollow) in Entity Form. +#3145078 by DamienMcKenna, mrinalini9, amjad1233, vijaycs85, dww: Possibly wrong + use of $modules array in setUp() for functional tests. +#3196067 by Ruslan Piskarov, DamienMcKenna, mohit.bansal623: Notice: Undefined + offset: 2 in metatag_tokens() (line 218 of metatag.tokens.inc). + + Metatag 8.x-1.15, 2020-12-05 ---------------------------- #3165112 by Wim Leers, tim.plunkett: Metatag migrations should be tagged diff --git a/web/modules/contrib/metatag/composer.json b/web/modules/contrib/metatag/composer.json index 88b6bbd6fba57bdedb37071ce3df22798f43d345..c43f531a9321cceb132396da54196ac62595b140 100644 --- a/web/modules/contrib/metatag/composer.json +++ b/web/modules/contrib/metatag/composer.json @@ -26,6 +26,7 @@ "drupal/token": "^1.0" }, "require-dev": { + "drupal/devel": "^4.0", "drupal/redirect": "1.x-dev", "drupal/page_manager": "4.x-dev", "drupal/panelizer": "4.x-dev" diff --git a/web/modules/contrib/metatag/metatag.info.yml b/web/modules/contrib/metatag/metatag.info.yml index bf207cb89a8ab498844687bf86c3cb6bcc94f511..cbfc297dfb7cd99a8b11e7c8c4f2cd3436f2f7eb 100644 --- a/web/modules/contrib/metatag/metatag.info.yml +++ b/web/modules/contrib/metatag/metatag.info.yml @@ -7,8 +7,10 @@ configure: entity.metatag_defaults.collection dependencies: - drupal:field - token:token +test_dependencies: + - devel:devel -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag.module b/web/modules/contrib/metatag/metatag.module index a5fc44b39782eb66fc6234a0e5854ae298dc8ce6..565298c83a6c681187b6bd378f7c678a84457745 100644 --- a/web/modules/contrib/metatag/metatag.module +++ b/web/modules/contrib/metatag/metatag.module @@ -156,15 +156,18 @@ function metatag_page_attachments(array &$attachments) { // Also add a HTTP header "Link:" for canonical URLs and shortlinks. // See HtmlResponseAttachmentsProcessor::processHtmlHeadLink() for the // implementation of the functionality in core. - if (in_array($item[1], ['canonical_url', 'shortlink'])) { - $attributes = $item[0]['#attributes']; - - $href = '<' . Html::escape($attributes['href']) . '>'; - unset($attributes['href']); - if ($param = HtmlResponseAttachmentsProcessor::formatHttpHeaderAttributes($attributes)) { - $href .= ';' . $param; + if (isset($item[0]['#attributes']['href'])) { + if (in_array($item[1], ['canonical_url', 'shortlink'])) { + $attributes = $item[0]['#attributes']; + + $href = '<' . Html::escape($attributes['href']) . '>'; + unset($attributes['href']); + $param = HtmlResponseAttachmentsProcessor::formatHttpHeaderAttributes($attributes); + if (!empty($param)) { + $href .= ';' . $param; + } + $head_links[] = $href; } - $head_links[] = $href; } } @@ -209,6 +212,12 @@ function metatag_page_attachments_alter(array &$attachments) { * Implements hook_entity_view_alter(). */ function metatag_entity_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) { + // Don't proceed any further if the entity being viewed isn't the route + // entity. + if (!_metatag_is_entity_route_entity($entity)) { + return; + } + if (!$entity->getEntityType()->hasLinkTemplate('canonical')) { return; } @@ -234,6 +243,29 @@ function metatag_entity_view_alter(array &$build, EntityInterface $entity, Entit _metatag_remove_duplicate_entity_tags($build); } +/** + * A function to determine whether the entity in question is the route entity. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * The entity. + * + * @return bool + * The result. + */ +function _metatag_is_entity_route_entity(EntityInterface $entity): bool { + static $cached_entity_uuid; + if (!$cached_entity_uuid) { + foreach (\Drupal::routeMatch()->getParameters() as $route_parameter) { + if ($route_parameter instanceof EntityInterface) { + if ($route_parameter->uuid() === $entity->uuid()) { + $cached_entity_uuid = $entity->uuid(); + } + } + } + } + return ($cached_entity_uuid === $entity->uuid()); +} + /** * Pre render callback for entities processed by Panelizer. * @@ -669,9 +701,16 @@ function metatag_migrate_prepare_row(Row $row, MigrateSourceInterface $source, M return; } - // Work out what sort of migration to do. - // Metatag-D7. - if ($source->getDatabase()->schema()->tableExists('metatag')) { + // Work out what sort of migration to do. Cache the results of this logic so + // that it isn't checked on every single row being processed. + static $metatag_table_exists, $nodewords_table_exists; + if (!isset($metatag_table_exists)) { + $metatag_table_exists = $source->getDatabase()->schema()->tableExists('metatag'); + $nodewords_table_exists = $source->getDatabase()->schema()->tableExists('nodewords'); + } + + // The source is Metatag-D7. + if ($metatag_table_exists) { // @todo Write a more general version rather than hard-coded. // Support a know subset of D7 sources. if (is_a($source, Node7::class)) { @@ -735,8 +774,8 @@ function metatag_migrate_prepare_row(Row $row, MigrateSourceInterface $source, M } } - // Nodewords-D6. - elseif ($source->getDatabase()->schema()->tableExists('nodewords')) { + // The source is Nodewords-D6. + elseif ($nodewords_table_exists) { // @todo Write a more general version rather than hard-coded. // Support a know subset of D6 sources. if (is_a($source, Node6::class)) { @@ -858,14 +897,14 @@ function metatag_migration_plugins_alter(array &$definitions) { // d7_node_complete, which has dependencies on d7_field_instance and // d7_comment_field_instance to ensure correct migration order. if ($bundle_id && isset($definitions["d7_metatag_field_instance:$entity_type_id:$bundle_id"])) { - $definition['migration_dependencies']['required'][] = "d7_metatag_field:$entity_type_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance:$entity_type_id:$bundle_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id:$bundle_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance:$entity_type_id:$bundle_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id:$bundle_id"; } elseif (isset($definitions["d7_metatag_field_instance:$entity_type_id"])) { - $definition['migration_dependencies']['required'][] = "d7_metatag_field:$entity_type_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance:$entity_type_id"; - $definition['migration_dependencies']['required'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance:$entity_type_id"; + $definition['migration_dependencies']['optional'][] = "d7_metatag_field_instance_widget_settings:$entity_type_id"; } } } @@ -891,10 +930,19 @@ function _metatag_is_migration_plugin_supported(array $definition) { if (empty($definition['migration_tags'])) { return FALSE; } + if (!is_array($definition['migration_tags'])) { + return FALSE; + } if (!array_intersect(['Drupal 6', 'Drupal 7'], $definition['migration_tags'])) { return FALSE; } + // Support for migrate_upgrade module, to avoid adding dependencies on already + // processed migration procedures. + if (!empty($definition['migration_group'])) { + return FALSE; + } + // This migration has destination plugins defined. if (!empty($definition['destination']['plugin'])) { // Follow logic on hook_entity_base_field_info() and exclude the metatag diff --git a/web/modules/contrib/metatag/metatag.tokens.inc b/web/modules/contrib/metatag/metatag.tokens.inc index 836bfd7e90eafef500731ae1f3977396fa143064..8b1674d35c747e3c9286c16ecaf9bd4772a38c2e 100644 --- a/web/modules/contrib/metatag/metatag.tokens.inc +++ b/web/modules/contrib/metatag/metatag.tokens.inc @@ -54,6 +54,12 @@ function metatag_token_info() { 'nested' => TRUE, ]; + $info['tokens'][$metatag_token_name]['value'] = [ + 'name' => Html::escape($label), + 'module' => 'metatag', + 'description' => $description, + ]; + // Tag list token type. if ($multiple) { $info['types']["list<$metatag_token_name>"] = [ @@ -200,7 +206,7 @@ function metatag_tokens($type, $tokens, array $data, array $options, BubbleableM // For [metatag:tag_name:0], [metatag:tag_name:0:value] and // [metatag:tag_name:value] tokens. else { - [$tag_name, $delta] = explode(':', $name, 2); + list($tag_name, $delta) = explode(':', $name, 2); if (!is_numeric($delta)) { unset($delta); } @@ -215,10 +221,15 @@ function metatag_tokens($type, $tokens, array $data, array $options, BubbleableM // Render only one delta. if (isset($delta)) { - $replacements[$original] = $processed_tags[$tag_name][$delta]; + $replacements[$original] = $processed_tags[$tag_name][$delta] ?? NULL; } else { - $replacements[$original] = is_array($processed_tags[$tag_name]) ? implode(',', $processed_tags[$tag_name]) : $processed_tags[$tag_name]; + if (is_array($processed_tags[$tag_name])) { + $replacements[$original] = implode(',', $processed_tags[$tag_name]); + } + else { + $replacements[$original] = $processed_tags[$tag_name]; + } } } break; diff --git a/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml b/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml index 6953e156bb4a03221e267918d2dd51023e91b27d..b5a57a087c4c9b778da787184bcd57eed9c6dc48 100644 --- a/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml +++ b/web/modules/contrib/metatag/metatag_app_links/metatag_app_links.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php b/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php index ac47a66d072a5aa7705a528fcdd2cc4ef530573c..9935b482d45c5e812e2ff8f664ecb477ace6ccce 100644 --- a/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php +++ b/web/modules/contrib/metatag/metatag_app_links/tests/src/Functional/MetatagAppLinksTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagAppLinksTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_app_links']; + /** * {@inheritdoc} */ @@ -46,14 +51,6 @@ class MetatagAppLinksTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_app_links'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml b/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml index 59c782f66a0c5eafc3d9ccfab20a58c1b4b1cec1..e084b6bf31801655157da36fe8ef0f385e5010a0 100644 --- a/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml +++ b/web/modules/contrib/metatag/metatag_dc/metatag_dc.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php b/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php index 963a3315fb8601c99ec418e9f92517653c071edb..032834b3bfbfbd17f375e1ed32a6548967c85d9f 100644 --- a/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php +++ b/web/modules/contrib/metatag/metatag_dc/tests/src/Functional/MetatagDublinCoreTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagDublinCoreTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_dc']; + /** * {@inheritdoc} */ @@ -32,14 +37,6 @@ class MetatagDublinCoreTagsTest extends MetatagTagsTestBase { 'dcterms_type', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_dc'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml b/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml index 598e9c5073193eab84c7e532b443884968d5d95e..73aa8bae7a611373de4e91094ac4bf637d3946f4 100644 --- a/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml +++ b/web/modules/contrib/metatag/metatag_dc_advanced/metatag_dc_advanced.info.yml @@ -7,7 +7,7 @@ dependencies: - metatag:metatag - metatag:metatag_dc -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php b/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php index 03d8bf7e6c946d1ee10551b60817a4d67978283e..7df9b3a242879602c07eaefc5c46ad48406a4d83 100644 --- a/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php +++ b/web/modules/contrib/metatag/metatag_dc_advanced/tests/src/Functional/MetatagDublinCoreAdvancedTagsTest.php @@ -12,6 +12,11 @@ */ class MetatagDublinCoreAdvancedTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_dc_advanced']; + /** * {@inheritdoc} */ @@ -58,14 +63,6 @@ class MetatagDublinCoreAdvancedTagsTest extends MetatagTagsTestBase { 'dcterms_valid', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_dc_advanced'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_extended_perms/README.txt b/web/modules/contrib/metatag/metatag_extended_perms/README.txt index ba2d609c96ff4ca9d127066f03e683f2b99c5ebb..4bd5059c2fe9fa77498f54bcd312a4a3fcbd5774 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/README.txt +++ b/web/modules/contrib/metatag/metatag_extended_perms/README.txt @@ -25,6 +25,48 @@ before enabling it on production, to help ensure these problems are not encountered. +Updating from Metatag Access +-------------------------------------------------------------------------------- +The original sandbox module for this functionality was called "Metatag Access". +Sites which used that submodule should switch to this module. Rather than +loosing their configuration, use the following update script to convert the +permissions. + +/** + * Replace Metatag Access with Metatag Extended Perms. + */ +function mysite_update_9001() { + $installer = \Drupal::service('module_installer'); + + // Install the Metatag Extended Permissions module. + $installer->install(['metatag_extended_perms']); + + // Update the permissions. + foreach (Role::loadMultiple() as $role) { + // Keep track of whether the permissions changed for this role. + $changed = FALSE; + foreach ($role->getPermissions() as $key => $perm) { + // Look for permissions that started with the old permission string. + if (strpos($perm, 'access metatag tag') !== FALSE) { + // Grand the new permission. + $role->grantPermission(str_replace('access metatag tag', 'access metatag', $perm)); + + // Track that the role's permissions changed. + $changed = TRUE; + } + } + + // If the permissions changed, save the role. + if ($changed) { + $role->trustData()->save(); + } + } + + // Uninstall the Metatag Access module. + $installer->uninstall(['metatag_access']); +} + + Credits / contact -------------------------------------------------------------------------------- Originally written by Michael Petri [1]. diff --git a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml index f2d6d1f7869c1facc533940f42915a6cdb70f1f3..928385acb9b475259ae2d134c58e2524689f38ac 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml +++ b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module index fb0ff5706eea8ed80557c88c6474c5d13126d5c1..9061ab9594ed1e1ffba8d568db5d57c24d31c55c 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module +++ b/web/modules/contrib/metatag/metatag_extended_perms/metatag_extended_perms.module @@ -16,6 +16,8 @@ function metatag_extended_perms_field_widget_form_alter(&$element, FormStateInte if ($context['widget'] instanceof MetatagFirehose) { $group_manager = \Drupal::getContainer()->get('plugin.manager.metatag.group'); + // Prevent access to the element until at least one permission is granted. + $element['#access'] = FALSE; foreach (Element::children($element) as $group_id) { $group = $group_manager->getDefinition($group_id, FALSE); if ($group === NULL) { @@ -33,9 +35,10 @@ function metatag_extended_perms_field_widget_form_alter(&$element, FormStateInte $element[$group_id][$tag_id]['#access'] = \Drupal::currentUser() ->hasPermission('access metatag ' . $group_id . '__' . $tag_id); - // Make the group accessible if user has access to the tag. + // Make the parent and group accessible if user has access to the tag. if ($element[$group_id][$tag_id]['#access']) { $element[$group_id]['#access'] = TRUE; + $element['#access'] = TRUE; } } } diff --git a/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php b/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php index 830a4d3d98045b5a50f2f96de5924f516d0ab384..392cb0c960c53939274353ed66fbe76b42d93e93 100644 --- a/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php +++ b/web/modules/contrib/metatag/metatag_extended_perms/tests/src/Functional/PermissionsTest.php @@ -104,9 +104,12 @@ public function testPermissionsExist() { $session = $this->assertSession(); $session->statusCodeEquals(200); - // Confirm that the page contains the standard text iddicating this is the + // Confirm that the page contains the standard text indicating this is the // permissions page. - $session->pageTextContains('Administer menus and menu items'); + $session->pageTextContains('Administer modules'); + $session->pageTextContains('Administer site configuration'); + $session->pageTextContains('Administer themes'); + $session->pageTextContains('Administer software updates'); // Look for each of the meta tags. foreach ($this->permissions as $group => $perms) { diff --git a/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml b/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml index 11944e97e8d4f9271d60b96a125a910a73d57dc7..ed5f9b5d5649c7dba354bd245b307ea0ead725c1 100644 --- a/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml +++ b/web/modules/contrib/metatag/metatag_facebook/metatag_facebook.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php b/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php index c71799d9bfd1c772e2118337951b80d58e0686c4..f3f6c7380d49f2343e5b49e583b8d4e9f4c7f98b 100644 --- a/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php +++ b/web/modules/contrib/metatag/metatag_facebook/tests/src/Functional/MetatagFacebookTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagFacebookTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_facebook']; + /** * {@inheritdoc} */ @@ -25,14 +30,6 @@ class MetatagFacebookTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_facebook'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml b/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml index b5179b53f7c81c9aa6f70778ebafda30efca2bdd..4b3940f9344b251b737187cc8b00da137c1906af 100644 --- a/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml +++ b/web/modules/contrib/metatag/metatag_favicons/metatag_favicons.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php b/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php index 96fcc70adbafde9cd03e044a55bb5ab7ed0197dd..aec9f6bf6ab85ed128bb3baef2965cceab8d3b20 100644 --- a/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php +++ b/web/modules/contrib/metatag/metatag_favicons/tests/src/Functional/MetatagFaviconsTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagFaviconsTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_favicons']; + /** * {@inheritdoc} */ @@ -54,14 +59,6 @@ class MetatagFaviconsTagsTest extends MetatagTagsTestBase { */ protected $testValueAttribute = 'href'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_favicons'; - parent::setUp(); - } - /** * Implements {tag_name}TestValueAttribute() for 'shortcut icon'. */ diff --git a/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml b/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml index beb9dbe7dd650b2e58776fdb3db16f990487b4c3..9cfe7ce4d10b4d1b536670df21b0a7b5898ee70c 100644 --- a/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml +++ b/web/modules/contrib/metatag/metatag_google_cse/metatag_google_cse.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php b/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php index 0787e251297eea20723ca06c5cadb075cdb97bfd..4867b6db138619946c79fed5d29aa9c8f6237ce3 100644 --- a/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php +++ b/web/modules/contrib/metatag/metatag_google_cse/tests/src/Functional/MetatagGoogleCSETagsTest.php @@ -11,6 +11,11 @@ */ class MetatagGoogleCSETagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_google_cse']; + /** * {@inheritdoc} */ @@ -22,14 +27,6 @@ class MetatagGoogleCSETagsTest extends MetatagTagsTestBase { 'thumbnail', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_google_cse'; - parent::setUp(); - } - /** * Implements {tag_name}TestTagName() for 'google_rating'. */ diff --git a/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml b/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml index e9c4e69c5df6f9581c8fafcc02ab301c83e776ec..746077905af562fd4dc0ebc3dfcf755bda138dd9 100644 --- a/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml +++ b/web/modules/contrib/metatag/metatag_google_plus/metatag_google_plus.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php b/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php index 4109d043ae6610a4b4bd1c0ef3bb586e816a629a..c85c3adf6568f9d6a51295c780305b5a6b24b447 100644 --- a/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php +++ b/web/modules/contrib/metatag/metatag_google_plus/tests/src/Functional/MetatagGooglePlusTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagGooglePlusTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_google_plus']; + /** * {@inheritdoc} */ @@ -27,14 +32,6 @@ class MetatagGooglePlusTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'itemprop'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_google_plus'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml b/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml index 2c14c44d6981e967c081364710ff2f85f39c697a..08f4d821bd22099fa8607f6ced07539e01337da4 100644 --- a/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml +++ b/web/modules/contrib/metatag/metatag_hreflang/metatag_hreflang.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php b/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php index 040bd7dfce07fd59b051169af78fec00f877a538..8423cf4ba1b36917efd42713d57d91ea36e39450 100644 --- a/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php +++ b/web/modules/contrib/metatag/metatag_hreflang/tests/src/Functional/MetatagHreflangTagsTest.php @@ -12,6 +12,11 @@ */ class MetatagHreflangTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['language', 'metatag_hreflang']; + /** * {@inheritdoc} */ @@ -42,10 +47,6 @@ class MetatagHreflangTagsTest extends MetatagTagsTestBase { * {@inheritdoc} */ protected function setUp() { - // Need the Language module in order for any of this to work. - parent::$modules[] = 'language'; - // This module. - parent::$modules[] = 'metatag_hreflang'; parent::setUp(); // Enable additional languages. diff --git a/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml b/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml index 856d0a3e7d19a68684e498294c94bbaef6aa05c9..d572a64b87e16694139699076eb3086c4064871b 100644 --- a/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml +++ b/web/modules/contrib/metatag/metatag_mobile/metatag_mobile.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php b/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php index b7d8fc543c6d5cdd63384d84931b507541748139..ccb246fd4d21db4006f3fdc76852f765388bb35d 100644 --- a/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php +++ b/web/modules/contrib/metatag/metatag_mobile/tests/src/Functional/MetatagMobileTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagMobileTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_mobile']; + /** * {@inheritdoc} */ @@ -55,14 +60,6 @@ class MetatagMobileTagsTest extends MetatagTagsTestBase { 'x_ua_compatible', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_mobile'; - parent::setUp(); - } - /** * {@inheritdoc} */ @@ -92,20 +89,6 @@ protected function alternateHandheldTestValueAttribute() { return 'href'; } - /** - * Implements {tag_name}TestOutputXpath() for 'amphtml'. - */ - protected function amphtmlTestOutputXpath() { - return "//link[@rel='amphtml']"; - } - - /** - * Implements {tag_name}TestValueAttribute() for 'amphtml'. - */ - protected function amphtmlTestValueAttribute() { - return 'href'; - } - /** * Implements {tag_name}TestValue() for 'android_app_link_alternative'. */ diff --git a/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml b/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml index 5e4d81943605008cbf2a5a9cc8a5d9ed1c5cc169..01bfba11eb24340c9600bf471355e7b5126f4354 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml +++ b/web/modules/contrib/metatag/metatag_open_graph/metatag_open_graph.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php index e1db6f070ff287219b70d92f7f29c646514db59c..b84745d016d0fd88d0c01ec5adaba05578b4223b 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php +++ b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLatitude.php @@ -11,7 +11,7 @@ * id = "og_latitude", * label = @Translation("Latitude"), * description = @Translation(""), - * name = "og:latitude", + * name = "place:location:latitude", * group = "open_graph", * weight = 16, * type = "string", diff --git a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php index a25c59cf40352c9aed2a27b727cfcca5a4eff77f..551bac4b852086ab07eb62ffb16add10a78def38 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php +++ b/web/modules/contrib/metatag/metatag_open_graph/src/Plugin/metatag/Tag/OgLongitude.php @@ -11,7 +11,7 @@ * id = "og_longitude", * label = @Translation("Longitude"), * description = @Translation(""), - * name = "og:longitude", + * name = "place:location:longitude", * group = "open_graph", * weight = 16, * type = "string", diff --git a/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php b/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php index b2346f74c8155d4905cbf4c0e7b43a1e5fdf6563..e00f85030004003d60c69191ba812fd4f487e3ef 100644 --- a/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php +++ b/web/modules/contrib/metatag/metatag_open_graph/tests/src/Functional/MetatagOpenGraphTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagOpenGraphTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_open_graph']; + /** * {@inheritdoc} */ @@ -86,18 +91,17 @@ class MetatagOpenGraphTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_open_graph'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ protected function getTestTagName($tag_name) { + if ($tag_name == 'og_latitude') { + $tag_name = 'place:location:latitude'; + } + elseif ($tag_name == 'og_longitude') { + $tag_name = 'place:location:longitude'; + } + // Replace the first underline with a colon. $tag_name = str_replace('og_', 'og:', $tag_name); $tag_name = str_replace('article_', 'article:', $tag_name); diff --git a/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml b/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml index 49e50b7371ff2528ba235c3846bca02454266617..8c6c2c020b575e80c1aaf82a64bbace840b5cdd1 100644 --- a/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml +++ b/web/modules/contrib/metatag/metatag_open_graph_products/metatag_open_graph_products.info.yml @@ -7,7 +7,7 @@ dependencies: - metatag:metatag - metatag:metatag_open_graph -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php b/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php index 87f169e4321a5b57574af5c109d3be9d5a052194..3f1acdfa5205d7a27937d8e244e765a18ea27ccd 100644 --- a/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php +++ b/web/modules/contrib/metatag/metatag_open_graph_products/tests/src/Functional/MetatagOpenGraphProductsTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagOpenGraphProductsTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_open_graph_products']; + /** * {@inheritdoc} */ @@ -29,14 +34,6 @@ class MetatagOpenGraphProductsTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_open_graph_products'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml b/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml index b266b506d4dcf1a9b906effd7438c662ad584cca..c469bb375ae113b39dcd5659f368488765f7c85f 100644 --- a/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml +++ b/web/modules/contrib/metatag/metatag_page_manager/metatag_page_manager.info.yml @@ -7,7 +7,7 @@ dependencies: - page_manager:page_manager - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php b/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php index 674da434c91396bcc48299a5efee398484fda4ce..5cccbb4af81d6617546b123281ab3414f4c81d82 100644 --- a/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php +++ b/web/modules/contrib/metatag/metatag_page_manager/tests/src/Functional/MetatagPageManagerTest.php @@ -19,7 +19,7 @@ class MetatagPageManagerTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // This module. 'metatag_page_manager', 'page_manager_ui', diff --git a/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml b/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml index fbd29135f4ac6224c1d056e75d00707402bac858..f870cf8761c7576f68079ba439eb07f1aad55770 100644 --- a/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml +++ b/web/modules/contrib/metatag/metatag_pinterest/metatag_pinterest.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php b/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php index 09edba973acf80f61a5217294316170221148519..791149f4e35deb4c3b3360e8da257eb2347ea84d 100644 --- a/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php +++ b/web/modules/contrib/metatag/metatag_pinterest/tests/src/Functional/MetatagPinterestTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagPinterestTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_pinterest']; + /** * {@inheritdoc} */ @@ -35,14 +40,6 @@ class MetatagPinterestTagsTest extends MetatagTagsTestBase { */ protected $testNameAttribute = 'property'; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_pinterest'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml b/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml index 75987c56b424f52f4bcc77b603bf6b0c86563144..48fbb2accf10b3f2bed538335c3e06dbfc72faf2 100644 --- a/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml +++ b/web/modules/contrib/metatag/metatag_twitter_cards/metatag_twitter_cards.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php b/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php index fa41edc8135965d508f01a146a49d5164e30890e..9bd0ee1127dba4d02d63ad3c32a821be60031730 100644 --- a/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php +++ b/web/modules/contrib/metatag/metatag_twitter_cards/tests/src/Functional/MetatagTwitterCardsTagsTest.php @@ -11,6 +11,11 @@ */ class MetatagTwitterCardsTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = ['metatag_twitter_cards']; + /** * {@inheritdoc} */ @@ -54,14 +59,6 @@ class MetatagTwitterCardsTagsTest extends MetatagTagsTestBase { // 'twitter_cards_player', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_twitter_cards'; - parent::setUp(); - } - /** * Twitter meta tags (almost) all have colons instead of underlines. * diff --git a/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml b/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml index 7bc07262576578b51200112f05c2e471d2faba1f..b575b8036bc0c112db19fc591686c8a26b83ca3f 100644 --- a/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml +++ b/web/modules/contrib/metatag/metatag_verification/metatag_verification.info.yml @@ -6,7 +6,7 @@ package: SEO dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php b/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php index 4ebc2882eef8de8715895f086365a88629fb0686..9e01deb5dc23735aa414cdccc9ccb4342bf8bd3c 100644 --- a/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php +++ b/web/modules/contrib/metatag/metatag_verification/tests/src/Functional/MetatagVerificationTagsTest.php @@ -11,6 +11,13 @@ */ class MetatagVerificationTagsTest extends MetatagTagsTestBase { + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'metatag_verification', + ]; + /** * {@inheritdoc} */ @@ -23,17 +30,9 @@ class MetatagVerificationTagsTest extends MetatagTagsTestBase { 'pinterest', 'pocket', 'yandex', - 'zoom_domain_verification' + 'zoom_domain_verification', ]; - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::$modules[] = 'metatag_verification'; - parent::setUp(); - } - /** * Each of these meta tags has a different tag name vs its internal name. */ diff --git a/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml b/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml index eb0f40ff725b91ee721c7d45cf11178cfad28536..66c98dd3a14102ff56c8fa4409fa2d4b975009e4 100644 --- a/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml +++ b/web/modules/contrib/metatag/metatag_views/metatag_views.info.yml @@ -7,7 +7,7 @@ dependencies: - metatag:metatag - drupal:views -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php b/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php index 6757e5c3e3e051d36cc0296e430dbda42d5203b4..728295d4a8d27b16209701a3a34d38e02db549ff 100644 --- a/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php +++ b/web/modules/contrib/metatag/metatag_views/tests/src/Functional/MetatagViewsBasicsTest.php @@ -17,7 +17,7 @@ class MetatagViewsBasicsTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'block', 'field', diff --git a/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php b/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php index bbbbc88d4b2ac7d08b36b086edeaac94157a9da0..98212411d760972dc7eb254d8a439063a823a941 100644 --- a/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php +++ b/web/modules/contrib/metatag/src/Form/MetatagDefaultsForm.php @@ -117,6 +117,9 @@ public function form(array $form, FormStateInterface $form_state) { $token_types = empty($default_type) ? [] : [explode('__', $default_type)[0]]; + // Add the token browser at the top. + $form += $this->metatagToken->tokenBrowser($token_types); + // If this is a new Metatag defaults, then list available bundles. if ($metatag_defaults->isNew()) { $options = $this->getAvailableBundles(); diff --git a/web/modules/contrib/metatag/src/MetatagManager.php b/web/modules/contrib/metatag/src/MetatagManager.php index 53399bc9a8079c9cb99afef31b97d19588fd68e5..18cac1947f29c1aa15094c2e914a6258a2da2d05 100644 --- a/web/modules/contrib/metatag/src/MetatagManager.php +++ b/web/modules/contrib/metatag/src/MetatagManager.php @@ -553,9 +553,9 @@ public function generateRawElements(array $tags, $entity = NULL, BubbleableMetad array_multisort($group, SORT_ASC, $weight, SORT_ASC, $metatag_tags); $ordered_tags = []; - foreach ($metatag_tags as $metatag) { - if (isset($tags[$metatag['id']])) { - $ordered_tags[$metatag['id']] = $tags[$metatag['id']]; + foreach ($metatag_tags as $id => $metatag) { + if (isset($tags[$id])) { + $ordered_tags[$id] = $tags[$id]; } } diff --git a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php index 0c2ba09a654dbcfca984554ef262576842a74b2b..ee2866ed09bf28c673191d3fb41cbdf584d28dee 100644 --- a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php +++ b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Description.php @@ -19,14 +19,5 @@ * ) */ class Description extends MetaNameBase { - - /** - * {@inheritdoc} - */ - public function form(array $element = []) { - $form = parent::form($element); - $form['#maxlength'] = 320; - return $form; - } - + // Nothing here yet. Just a placeholder class for a plugin. } diff --git a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php index 1c46c9a5fbaee2db49d27f2e8f8d8c40e7edf0f3..da00613588a5968030229883730966ffb4786ea4 100644 --- a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php +++ b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/MetaNameBase.php @@ -265,7 +265,7 @@ public function form(array $element = []) { '#type' => $this->isLong() ? 'textarea' : 'textfield', '#title' => $this->label(), '#default_value' => $this->value(), - '#maxlength' => 255, + '#maxlength' => 1024, '#required' => isset($element['#required']) ? $element['#required'] : FALSE, '#description' => $this->description(), '#element_validate' => [[get_class($this), 'validateTag']], diff --git a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php index bd333e0ff63df28bd8772dce19357a5e53a0626f..492546a67e4914a12341369fb938a28cf38dad50 100644 --- a/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php +++ b/web/modules/contrib/metatag/src/Plugin/metatag/Tag/Robots.php @@ -69,28 +69,36 @@ public function form(array $element = []) { 'index' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[noindex]"]' => ['checked' => TRUE], + [':input[name="robots[noindex]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][noindex]"]' => ['checked' => TRUE]], ], ], ], 'noindex' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[index]"]' => ['checked' => TRUE], + [':input[name="robots[index]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][index]"]' => ['checked' => TRUE]], ], ], ], 'follow' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[nofollow]"]' => ['checked' => TRUE], + [':input[name="robots[nofollow]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][nofollow]"]' => ['checked' => TRUE]], ], ], ], 'nofollow' => [ '#states' => [ 'disabled' => [ - ':input[name="robots[follow]"]' => ['checked' => TRUE], + [':input[name="robots[follow]"]' => ['checked' => TRUE]], + 'or', + [':input[name*="[robots][follow]"]' => ['checked' => TRUE]], ], ], ], diff --git a/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php b/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php index 4121c442ee4de6f2b96c60c21c56ae6bf4c73a5a..b6544d1b5a22237874dd8c02cc48787a72836c62 100644 --- a/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php +++ b/web/modules/contrib/metatag/src/Plugin/migrate/process/d6/NodewordsEntities.php @@ -261,8 +261,6 @@ public function tagsMap() { // 'hreflang_' . $langcode => 'hreflang_per_language', // From metatag_mobile.metatag.inc: 'alternate_handheld' => 'alternate_handheld', - // @todo https://www.drupal.org/project/metatag/issues/3077781 - // 'amphtml' => '', 'android-app-link-alternative' => 'android_app_link_alternative', 'android-manifest' => 'android_manifest', 'apple-itunes-app' => 'apple_itunes_app', diff --git a/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php b/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php index c5df768f8a521991d94e0721c91076d2aa7aebfd..d8ea723993078910cda5787b241e66aeb3e2948b 100644 --- a/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php +++ b/web/modules/contrib/metatag/src/Plugin/migrate/process/d7/MetatagEntities.php @@ -247,8 +247,6 @@ protected function tagsMap() { // 'hreflang_' . $langcode => 'hreflang_per_language', // From metatag_mobile.metatag.inc: 'alternate_handheld' => 'alternate_handheld', - // @todo https://www.drupal.org/project/metatag/issues/3077781 - // 'amphtml' => '', 'android-app-link-alternative' => 'android_app_link_alternative', 'android-manifest' => 'android_manifest', 'apple-itunes-app' => 'apple_itunes_app', diff --git a/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml b/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml index dc263b855278e883973063cccd99998098a45683..9d53e177698de88e6463341ee22f3845307a1f89 100644 --- a/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml +++ b/web/modules/contrib/metatag/tests/modules/metatag_test_custom_route/metatag_test_custom_route.info.yml @@ -6,7 +6,7 @@ package: Testing dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml b/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml index ac185d1e1b797011c25fdfd544435acd9ed50a74..faf3cf0561c6cb8963a27918d57a28ceb37f5fdc 100644 --- a/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml +++ b/web/modules/contrib/metatag/tests/modules/metatag_test_integration/metatag_test_integration.info.yml @@ -5,7 +5,7 @@ package: Testing dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml b/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml index 94ea3713404798d00b7629d2d3ea5cffe870e9c6..12d764ca311f446836508f00e05e1344313d4bc2 100644 --- a/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml +++ b/web/modules/contrib/metatag/tests/modules/metatag_test_tag/metatag_test_tag.info.yml @@ -6,7 +6,7 @@ package: Testing dependencies: - metatag:metatag -# Information added by Drupal.org packaging script on 2020-12-05 -version: '8.x-1.15' +# Information added by Drupal.org packaging script on 2021-03-15 +version: '8.x-1.16' project: 'metatag' -datestamp: 1607188982 +datestamp: 1615820871 diff --git a/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php b/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php index 53abe27dde56d4c3025f87be2eac1534801a1fdf..6375b2530e334a73de47a15bc01380d2548152ca 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php +++ b/web/modules/contrib/metatag/tests/src/Functional/DefaultTags.php @@ -17,7 +17,7 @@ class DefaultTags extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'taxonomy', @@ -153,7 +153,7 @@ public function testUserLoginPages() { // Check the meta tags. $xpath = $this->xpath("//link[@rel='canonical']"); - $this->assertNotEqual((string) $xpath[0]->getAttribute('href'), $front_url); + $this->assertNotEquals((string) $xpath[0]->getAttribute('href'), $front_url); self::assertEquals((string) $xpath[0]->getAttribute('href'), $this_page_url); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php b/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php index 66817a4eca619dc4b216ed20098b2086c35df759..52a23c189a27f60e039780284af0eda7c2f3dce9 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php +++ b/web/modules/contrib/metatag/tests/src/Functional/DisabledDefaultTags.php @@ -17,7 +17,7 @@ class DisabledDefaultTags extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'taxonomy', diff --git a/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php new file mode 100644 index 0000000000000000000000000000000000000000..901dc0d045bf9317b2f027e8f8ab43dc9624df84 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWebProfilerWorks.php @@ -0,0 +1,36 @@ +<?php + +namespace Drupal\Tests\metatag\Functional; + +/** + * Verify that enabling WebProfiler won't cause the site to blow up. + * + * @group metatag + */ +class EnsureDevelWebProfilerWorks extends EnsureDevelWorks { + + /** + * {@inheritdoc} + */ + public static $modules = [ + // Modules for core functionality. + 'node', + 'field', + 'field_ui', + 'user', + + // Contrib dependencies. + 'token', + + // This module. + 'metatag', + + // Use the custom route to verify the site works. + 'metatag_test_custom_route', + + // The modules to test. + 'devel', + 'webprofiler', + ]; + +} diff --git a/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php new file mode 100644 index 0000000000000000000000000000000000000000..7fb43a271b99d51d582f2be9e86e2d764ed28d45 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/Functional/EnsureDevelWorks.php @@ -0,0 +1,63 @@ +<?php + +namespace Drupal\Tests\metatag\Functional; + +use Drupal\Tests\BrowserTestBase; + +/** + * Verify that enabling Devel won't cause the site to blow up. + * + * @group metatag + */ +class EnsureDevelWorks extends BrowserTestBase { + + // Contains helper methods. + use MetatagHelperTrait; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * {@inheritdoc} + */ + public static $modules = [ + // Modules for core functionality. + 'node', + 'field', + 'field_ui', + 'user', + + // Contrib dependencies. + 'token', + + // This module. + 'metatag', + + // Use the custom route to verify the site works. + 'metatag_test_custom_route', + + // The modules to test. + 'devel', + ]; + + /** + * Load the custom route, make sure something is output. + */ + public function testCustomRoute() { + $this->drupalGet('metatag_test_custom_route'); + $this->assertResponse(200); + $this->assertText('Hello world!'); + } + + /** + * Make sure that the system still works when some example content exists. + */ + public function testNode() { + $node = $this->createContentTypeNode(); + $this->drupalGet($node->toUrl()); + $this->assertResponse(200); + } + +} diff --git a/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php b/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php index 680f05da9957917f7dded41be47fe199efc299b4..1bd3cd8f0e1922278e3c576acaf9f9102ccd0494 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MaintenanceMode.php @@ -18,7 +18,7 @@ class MaintenanceMode extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'field', @@ -43,10 +43,11 @@ class MaintenanceMode extends BrowserTestBase { public function testUser1() { // Load the user 1 profile page. $this->drupalGet('/user/1'); + $session = $this->assertSession(); // Confirm the page title is correct. - $this->assertRaw('<title>Access denied | '); - $this->assertNoRaw('<title>admin | '); - $this->assertNoRaw('<title>Site under maintenance | '); + $session->responseContains('<title>Access denied | '); + $session->responseNotContains('<title>admin | '); + $session->responseNotContains('<title>Site under maintenance | '); // Put the site into maintenance mode. \Drupal::state()->set('system.maintenance_mode', TRUE); @@ -55,9 +56,9 @@ public function testUser1() { // Load the user 1 profile page again. $this->drupalGet('/user/1'); // Confirm the page title has changed. - $this->assertNoRaw('<title>Access denied | '); - $this->assertNoRaw('<title>admin | '); - $this->assertRaw('<title>Site under maintenance | '); + $session->responseNotContains('<title>Access denied | '); + $session->responseNotContains('<title>admin | '); + $session->responseContains('<title>Site under maintenance | '); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php index 79e0e292a4cfdd10c2b5d3d6e8462e7c0b811e10..867e0c30560fa61c065f1b283a7453c5936d5564 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagAdminTest.php @@ -20,7 +20,7 @@ class MetatagAdminTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Core modules. // @see testAvailableConfigEntities 'block', @@ -85,77 +85,77 @@ public function testDefaults() { // Check that the user can see the list of metatag defaults. $this->drupalGet('admin/config/search/metatag'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); // Check that the Global defaults were created. - $this->assertLinkByHref('admin/config/search/metatag/global', 0, $this->t('Global defaults were created on installation.')); + $session->linkByHrefExists('admin/config/search/metatag/global'); // Check that Global and entity defaults can't be deleted. - $this->assertNoLinkByHref('admin/config/search/metatag/global/delete', 0, $this->t("Global defaults can't be deleted")); - $this->assertNoLinkByHref('admin/config/search/metatag/node/delete', 0, $this->t("Entity defaults can't be deleted")); + $session->linkByHrefNotExists('admin/config/search/metatag/global/delete'); + $session->linkByHrefNotExists('admin/config/search/metatag/node/delete'); // Check that the module defaults were injected into the Global config // entity. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->assertFieldById('edit-title', $metatag_defaults->get('title'), $this->t('Metatag defaults were injected into the Global configuration entity.')); - // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => 'Test title', 'description' => 'Test description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Updated metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Updated metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); } // Check that tokens are processed. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => '[site:name] | Test title', 'description' => '[site:name] | Test description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); foreach ($values as $metatag => $value) { $processed_value = \Drupal::token()->replace($value); - $this->assertRaw($processed_value, $this->t('Processed token for metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); + $session->responseContains($processed_value, $this->t('Processed token for metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); } // Test the Robots plugin. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $robots_values = ['index', 'follow', 'noydir']; $values = []; foreach ($robots_values as $value) { $values['robots[' . $value . ']'] = TRUE; } $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); // Trigger a 404 request. $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); $robots_value = implode(', ', $robots_values); - $this->assertRaw($robots_value, $this->t('Robots metatag has the expected values.')); + $session->responseContains($robots_value, $this->t('Robots metatag has the expected values.')); // Test reverting global configuration to its defaults. $this->drupalGet('admin/config/search/metatag/global/revert'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], 'Revert'); - $this->assertText('Reverted Global defaults.'); - $this->assertText($default_title, 'Global title was reverted to its default value.'); + $session->pageTextContains('Reverted Global defaults.'); + $session->pageTextContains($default_title); $this->drupalLogout(); } @@ -174,10 +174,11 @@ public function testAvailableConfigEntities() { // Load the default-add page. $this->drupalGet('admin/config/search/metatag/add'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); // Confirm the 'type' field exists. - $this->assertFieldByName('id'); + $session->fieldExists('id'); // Compile a list of entities from the list. $options = $this->cssSelect('select[name="id"] option'); @@ -208,41 +209,42 @@ public function testSpecialPages() { // Adjust the front page and test it. $this->drupalGet('admin/config/search/metatag/front'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'description' => 'Front page description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Front page Metatag defaults.'); + $session->pageTextContains('Saved the Front page Metatag defaults.'); $this->drupalGet('<front>'); - $this->assertSession()->statusCodeEquals(200); - $this->assertRaw($values['description'], $this->t('Front page defaults are used at the front page.')); + $session->statusCodeEquals(200); + $session->responseContains($values['description'], $this->t('Front page defaults are used at the front page.')); // Adjust the 403 page and test it. $this->drupalGet('admin/config/search/metatag/403'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'description' => '403 page description.', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the 403 access denied Metatag defaults.'); + $session->pageTextContains('Saved the 403 access denied Metatag defaults.'); $this->drupalLogout(); $this->drupalGet('admin/config/search/metatag'); - $this->assertSession()->statusCodeEquals(403); - $this->assertRaw($values['description'], $this->t('403 page defaults are used at 403 pages.')); + $session->statusCodeEquals(403); + $session->responseContains($values['description'], $this->t('403 page defaults are used at 403 pages.')); // Adjust the 404 page and test it. $this->drupalLogin($account); $this->drupalGet('admin/config/search/metatag/404'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'description' => '404 page description.', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the 404 page not found Metatag defaults.'); + $session->pageTextContains('Saved the 404 page not found Metatag defaults.'); $this->drupalGet('foo'); - $this->assertSession()->statusCodeEquals(404); - $this->assertRaw($values['description'], $this->t('404 page defaults are used at 404 pages.')); + $session->statusCodeEquals(404); + $session->responseContains($values['description'], $this->t('404 page defaults are used at 404 pages.')); $this->drupalLogout(); } @@ -265,13 +267,14 @@ public function testOverrides() { // Update the Metatag Node defaults. $this->drupalGet('admin/config/search/metatag/node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'title' => 'Test title for a node.', 'description' => 'Test description for a node.', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Content Metatag defaults.'); + $session->pageTextContains('Saved the Content Metatag defaults.'); // Create a test node. $node = $this->drupalCreateNode([ @@ -281,32 +284,32 @@ public function testOverrides() { // Check that the new values are found in the response. $this->drupalGet('node/' . $node->id()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Node metatag @tag overrides Global defaults.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Node metatag @tag overrides Global defaults.', ['@tag' => $metatag])); } // Check that when the node defaults don't define a metatag, the Global one // is used. // First unset node defaults. $this->drupalGet('admin/config/search/metatag/node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => '', 'description' => '', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Content Metatag defaults.'); + $session->pageTextContains('Saved the Content Metatag defaults.'); // Then, set global ones. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'title' => 'Global title', 'description' => 'Global description', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Next, test that global defaults are rendered since node ones are empty. // We are creating a new node as doing a get on the previous one would @@ -319,21 +322,21 @@ public function testOverrides() { 'type' => 'article', ]); $this->drupalGet('node/' . $node->id()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Found global @tag tag as Node does not set it.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Found global @tag tag as Node does not set it.', ['@tag' => $metatag])); } // Now create article overrides and then test them. $this->drupalGet('admin/config/search/metatag/add'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'id' => 'node__article', 'title' => 'Article title override', 'description' => 'Article description override', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText(strip_tags($this->t('Created the %label Metatag defaults.', ['%label' => 'Content: Article']))); + $session->pageTextContains(strip_tags('Created the Content: Article Metatag defaults.')); // Confirm the fields load properly on the node/add/article page. $node = $this->drupalCreateNode([ @@ -341,17 +344,17 @@ public function testOverrides() { 'type' => 'article', ]); $this->drupalGet('node/' . $node->id()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); unset($values['id']); foreach ($values as $metatag => $value) { - $this->assertRaw($value, $this->t('Found bundle override for tag @tag.', ['@tag' => $metatag])); + $session->responseContains($value, $this->t('Found bundle override for tag @tag.', ['@tag' => $metatag])); } // Test deleting the article defaults. $this->drupalGet('admin/config/search/metatag/node__article/delete'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], 'Delete'); - $this->assertText($this->t('Deleted @label defaults.', ['@label' => 'Content: Article'])); + $session->pageTextContains('Deleted Content: Article defaults.'); } /** @@ -377,7 +380,8 @@ public function testEntityDefaultInheritence() { // Add a Metatag field to the Article content type. $this->drupalGet('admin/structure/types/manage/article/fields/add-field'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'new_storage_type' => 'metatag', 'label' => 'Meta tags', @@ -385,33 +389,33 @@ public function testEntityDefaultInheritence() { ]; $this->drupalPostForm(NULL, $edit, $this->t('Save and continue')); $this->drupalPostForm(NULL, [], $this->t('Save field settings')); - $this->assertText(strip_tags($this->t('Updated field %label field settings.', ['%label' => 'Meta tags']))); + $session->pageTextContains(strip_tags('Updated field Meta tags field settings.')); $this->drupalPostForm(NULL, [], $this->t('Save settings')); - $this->assertText(strip_tags($this->t('Saved %label configuration.', ['%label' => 'Meta tags']))); + $session->pageTextContains(strip_tags('Saved Meta tags configuration.')); // Try creating an article, confirm the fields are present. This should be // the node default values that are shown. $this->drupalGet('node/add/article'); - $this->assertSession()->statusCodeEquals(200); - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]'); + $session->statusCodeEquals(200); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); // Customize the Article content type defaults. $this->drupalGet('admin/config/search/metatag/add'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'id' => 'node__article', 'title' => 'Article title override', 'description' => 'Article description override', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText(strip_tags($this->t('Created the %label Metatag defaults.', ['%label' => 'Content: Article']))); + $session->pageTextContains(strip_tags('Created the Content: Article Metatag defaults.')); // Try creating an article, this time with the overridden defaults. $this->drupalGet('node/add/article'); - $this->assertSession()->statusCodeEquals(200); - $this->assertFieldByName('field_meta_tags[0][basic][title]', 'Article title override'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', 'Article description override'); + $session->statusCodeEquals(200); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', 'Article title override'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', 'Article description override'); } /** @@ -422,6 +426,7 @@ public function testDefaultProtected() { $permissions = ['administer site configuration', 'administer meta tags']; $account = $this->drupalCreateUser($permissions); $this->drupalLogin($account); + $session = $this->assertSession(); // Add default metatag for Articles. $edit = [ @@ -431,25 +436,25 @@ public function testDefaultProtected() { // Check that protected defaults contains "Revert" link instead of "Delete". foreach (MetatagManager::protectedDefaults() as $protected) { - $this->assertLinkByHref('/admin/config/search/metatag/' . $protected); - $this->assertLinkByHref('/admin/config/search/metatag/' . $protected . '/revert'); - $this->assertNoLinkByHref('/admin/config/search/metatag/' . $protected . '/delete'); + $session->linkByHrefExists('/admin/config/search/metatag/' . $protected); + $session->linkByHrefExists('/admin/config/search/metatag/' . $protected . '/revert'); + $session->linkByHrefNotExists('/admin/config/search/metatag/' . $protected . '/delete'); } // Confirm that non protected defaults can be deleted. - $this->assertLinkByHref('/admin/config/search/metatag/node__article'); - $this->assertNoLinkByHref('/admin/config/search/metatag/node__article/revert'); - $this->assertLinkByHref('/admin/config/search/metatag/node__article/delete'); + $session->linkByHrefExists('/admin/config/search/metatag/node__article'); + $session->linkByHrefNotExists('/admin/config/search/metatag/node__article/revert'); + $session->linkByHrefExists('/admin/config/search/metatag/node__article/delete'); // Visit each protected default page to confirm "Delete" button is hidden. foreach (MetatagManager::protectedDefaults() as $protected) { $this->drupalGet('/admin/config/search/metatag/' . $protected); - $this->assertNoLink('Delete'); + $session->linkNotExists('Delete'); } // Confirm that non protected defaults can be deleted. $this->drupalGet('/admin/config/search/metatag/node__article'); - $this->assertLink('Delete'); + $session->linkExists('Delete'); } /** @@ -457,16 +462,17 @@ public function testDefaultProtected() { */ public function testListPager() { $this->loginUser1(); + $session = $this->assertSession(); $this->drupalGet('admin/config/search/metatag'); - $this->assertSession()->statusCodeEquals(200); - $this->assertLinkByHref('/admin/config/search/metatag/global'); - $this->assertLinkByHref('/admin/config/search/metatag/front'); - $this->assertLinkByHref('/admin/config/search/metatag/403'); - $this->assertLinkByHref('/admin/config/search/metatag/404'); - $this->assertLinkByHref('/admin/config/search/metatag/node'); - $this->assertLinkByHref('/admin/config/search/metatag/taxonomy_term'); - $this->assertLinkByHref('/admin/config/search/metatag/user'); + $session->statusCodeEquals(200); + $session->linkByHrefExists('/admin/config/search/metatag/global'); + $session->linkByHrefExists('/admin/config/search/metatag/front'); + $session->linkByHrefExists('/admin/config/search/metatag/403'); + $session->linkByHrefExists('/admin/config/search/metatag/404'); + $session->linkByHrefExists('/admin/config/search/metatag/node'); + $session->linkByHrefExists('/admin/config/search/metatag/taxonomy_term'); + $session->linkByHrefExists('/admin/config/search/metatag/user'); // Create 50 vocabularies and generate metatag defaults for all of them. for ($i = 0; $i < 50; $i++) { @@ -479,27 +485,26 @@ public function testListPager() { // Reload the page. $this->drupalGet('admin/config/search/metatag'); - $this->assertLinkByHref('/admin/config/search/metatag/global'); - $this->assertLinkByHref('/admin/config/search/metatag/front'); - $this->assertLinkByHref('/admin/config/search/metatag/403'); - $this->assertLinkByHref('/admin/config/search/metatag/404'); - $this->assertLinkByHref('/admin/config/search/metatag/node'); - $this->assertLinkByHref('/admin/config/search/metatag/taxonomy_term'); + $session->linkByHrefExists('/admin/config/search/metatag/global'); + $session->linkByHrefExists('/admin/config/search/metatag/front'); + $session->linkByHrefExists('/admin/config/search/metatag/403'); + $session->linkByHrefExists('/admin/config/search/metatag/404'); + $session->linkByHrefExists('/admin/config/search/metatag/node'); + $session->linkByHrefExists('/admin/config/search/metatag/taxonomy_term'); // User entity not visible because it has been pushed to the next page. - $this->assertNoLinkByHref('/admin/config/search/metatag/user'); + $session->linkByHrefNotExists('/admin/config/search/metatag/user'); $this->clickLink('Next'); // Go to next page and confirm that parents are loaded and user us present. - $this->assertLinkByHref('/admin/config/search/metatag/global'); - $this->assertLinkByHref('/admin/config/search/metatag/taxonomy_term'); + $session->linkByHrefExists('/admin/config/search/metatag/global'); + $session->linkByHrefExists('/admin/config/search/metatag/taxonomy_term'); // Main links not visible in the 2nd page. - $this->assertNoLinkByHref('/admin/config/search/metatag/front'); - $this->assertNoLinkByHref('/admin/config/search/metatag/403'); - $this->assertNoLinkByHref('/admin/config/search/metatag/404'); - $this->assertNoLinkByHref('/admin/config/search/metatag/node'); + $session->linkByHrefNotExists('/admin/config/search/metatag/front'); + $session->linkByHrefNotExists('/admin/config/search/metatag/403'); + $session->linkByHrefNotExists('/admin/config/search/metatag/404'); + $session->linkByHrefNotExists('/admin/config/search/metatag/node'); // User is present because was pushed to page 2. - $this->assertLinkByHref('/admin/config/search/metatag/user'); - + $session->linkByHrefExists('/admin/config/search/metatag/user'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php index a3179c09e79627dcee05b6f5d08d114385e540b8..43388a082b22e9a3aa6de8d564ecc9dceab39dd7 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagConfigTranslationTest.php @@ -31,11 +31,9 @@ class MetatagConfigTranslationTest extends BrowserTestBase { protected $adminUser; /** - * Modules to enable. - * - * @var array + * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'metatag', 'language', 'config_translation', @@ -84,14 +82,15 @@ protected function setUp() { public function testConfigTranslationsExist() { // Ensure the config shows on the admin form. $this->drupalGet('admin/config/regional/config-translation'); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Metatag defaults')); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->pageTextContains('Metatag defaults'); // Load the main metatag_defaults config translation page. $this->drupalGet('admin/config/regional/config-translation/metatag_defaults'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // @todo Update this to confirm the H1 is loaded. - $this->assertRaw($this->t('Metatag defaults')); + $session->responseContains($this->t('Metatag defaults')); // Load all of the Metatag defaults. $defaults = \Drupal::configFactory()->listAll('metatag.metatag_defaults'); @@ -102,7 +101,7 @@ public function testConfigTranslationsExist() { // Confirm each of the configs is available on the translation form. foreach ($defaults as $config_name) { if ($config_entity = $config_manager->loadConfigEntityByName($config_name)) { - $this->assertText($config_entity->label()); + $session->pageTextContains($config_entity->label()); } } @@ -110,7 +109,7 @@ public function testConfigTranslationsExist() { foreach ($defaults as $config_name) { if ($config_entity = $config_manager->loadConfigEntityByName($config_name)) { $this->drupalGet('admin/config/search/metatag/' . $config_entity->id() . '/translate'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); } else { $this->error('Unable to load a Metatag default config: ' . $config_name); @@ -124,30 +123,31 @@ public function testConfigTranslationsExist() { public function testConfigTranslations() { // Add something to the Global config. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title', 'description' => 'Test description', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Saved the Global Metatag defaults.')); + $session->statusCodeEquals(200); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Confirm the config has languages available to translate into. $this->drupalGet('admin/config/search/metatag/global/translate'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Load the translation form. $this->drupalGet('admin/config/search/metatag/global/translate/fr/add'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Confirm the meta tag fields are shown on the form. Confirm the fields and // values separately to make it easier to pinpoint where the problem is if // one should fail. - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][title]'); - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][title]', $edit['title']); - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][description]'); - $this->assertFieldByName('translation[config_names][metatag.metatag_defaults.global][tags][description]', $edit['description']); + $session->fieldExists('translation[config_names][metatag.metatag_defaults.global][tags][title]'); + $session->fieldValueEquals('translation[config_names][metatag.metatag_defaults.global][tags][title]', $edit['title']); + $session->fieldExists('translation[config_names][metatag.metatag_defaults.global][tags][description]'); + $session->fieldValueEquals('translation[config_names][metatag.metatag_defaults.global][tags][description]', $edit['description']); // Confirm the form can be saved correctly. $edit = [ @@ -155,8 +155,8 @@ public function testConfigTranslations() { 'translation[config_names][metatag.metatag_defaults.global][tags][description]' => 'Le description', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save translation')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Successfully saved French translation')); + $session->statusCodeEquals(200); + $session->pageTextContains('Successfully saved French translation'); // Delete the node metatag defaults to simplify the test. MetatagDefaults::load('node')->delete(); diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php index bd3d2eaaaaef8d26f4418d3e71d778a75e573b85..7a426b2f61159fa4a18ed6d53fb78f0269fb9dd5 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagCustomRouteTest.php @@ -18,7 +18,7 @@ class MetatagCustomRouteTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'node', // Dependencies. 'token', @@ -35,7 +35,6 @@ class MetatagCustomRouteTest extends BrowserTestBase { */ protected $defaultTheme = 'stark'; - /** * Run tests on the custom route. */ @@ -57,7 +56,7 @@ public function testCustomRoute() { $this->assertSession()->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='keywords']"); $this->assertCount(1, $xpath); - $this->assertEqual($xpath[0]->getAttribute('content'), 'test'); + $this->assertEquals('test', $xpath[0]->getAttribute('content')); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php index 46301daf0596680665ed9a6905acfc5779da9b72..24645aeda73dbee16feb1f847f0577147c1ec747 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldNodeTest.php @@ -12,7 +12,7 @@ class MetatagFieldNodeTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php index b6d2b58bce2ab8aa2731221196c5ae5ac9b3caed..9ffa9f7e851eefb2ee56774cc3687c6f3d2c5d53 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTermTest.php @@ -16,7 +16,7 @@ class MetatagFieldTermTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php index 83dd14944248bcaea338818e3a900c263475e7dd..f84239fa1ed9cb3f14daefa75fa04e537f4d7527 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestBase.php @@ -21,11 +21,9 @@ abstract class MetatagFieldTestBase extends BrowserTestBase { protected $profile = 'testing'; /** - * Modules to enable. - * - * @var array + * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', @@ -209,12 +207,13 @@ protected function addField() { public function testGlobalDefaultsInheritance() { // First we set global defaults. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Add the field to this entity type. $this->addField(); @@ -222,8 +221,8 @@ public function testGlobalDefaultsInheritance() { // Now when we create an entity, global defaults are used to fill the form // fields. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag'], $this->t('The metatag_test_tag field has the global default as the field default does not define it.')); + $session->statusCodeEquals(200); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } /** @@ -237,29 +236,30 @@ public function testEntityDefaultsInheritance() { // Set a global default. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t('Global')]))); + $session->pageTextContains(strip_tags('Saved the Global Metatag defaults.')); // Set an entity default. $this->drupalGet('admin/config/search/metatag/' . $this->entityType); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $entity_values = [ 'metatag_test_tag' => 'Entity description', ]; $this->drupalPostForm(NULL, $entity_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t($this->entityLabel)]))); + $session->pageTextContains(strip_tags("Saved the $this->entityLabel Metatag defaults.")); // Add the field to this entity type. $this->addField(); // Load the entity form for this entity type. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); // Allow the fields to be customized if needed. $title = 'Barfoo'; @@ -272,8 +272,8 @@ public function testEntityDefaultsInheritance() { // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } /** @@ -291,8 +291,9 @@ public function testBundleDefaultsInheritance() { */ public function testFieldCanBeAdded() { $this->drupalGet($this->entityFieldAdminPath . '/add-field'); - $this->assertSession()->statusCodeEquals(200); - $this->assertRaw('<option value="metatag">' . $this->t('Meta tags') . '</option>'); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->responseContains('<option value="metatag">' . $this->t('Meta tags') . '</option>'); } /** @@ -304,9 +305,10 @@ public function testEntityFieldsAvailable() { // Load the entity's form. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]'); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); + $session->fieldExists('field_metatag[0][basic][metatag_test_tag]'); } /** @@ -317,29 +319,30 @@ public function testEntityFieldsAvailable() { public function testEntityFieldValuesOldEntity() { // Set a global default. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t('Global')]))); + $session->pageTextContains(strip_tags('Saved the Global Metatag defaults.')); // Set an entity default if it's supported by the entity type. if ($this->entitySupportsDefaults) { $this->drupalGet('admin/config/search/metatag/' . $this->entityType); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $entity_values = [ 'metatag_test_tag' => 'Entity description', ]; $this->drupalPostForm(NULL, $entity_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t($this->entityLabel)]))); + $session->pageTextContains(strip_tags("Saved the $this->entityLabel Metatag defaults.")); } // Load the entity form for this entity type. $title = 'Barfoo'; $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); // Allow the fields to be customized if needed. $edit = $this->entityDefaultValues(); @@ -363,16 +366,16 @@ public function testEntityFieldValuesOldEntity() { // Open the 'edit' form for the entity. $this->drupalGet($entity->toUrl('edit-form')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. if ($this->entitySupportsDefaults) { - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); } else { - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } // @todo Confirm the values output correctly. @@ -386,22 +389,23 @@ public function testEntityFieldValuesOldEntity() { public function testEntityFieldValuesNewEntity() { // Set a global default. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $global_values = [ 'metatag_test_tag' => 'Global description', ]; $this->drupalPostForm(NULL, $global_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t('Global')]))); + $session->pageTextContains(strip_tags('Saved the Global Metatag defaults.')); // Set an entity default if it's supported by the entity type. if ($this->entitySupportsDefaults) { $this->drupalGet('admin/config/search/metatag/' . $this->entityType); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $entity_values = [ 'metatag_test_tag' => 'Entity description', ]; $this->drupalPostForm(NULL, $entity_values, 'Save'); - $this->assertText(strip_tags($this->t('Saved the %label Metatag defaults.', ['%label' => $this->t($this->entityLabel)]))); + $session->pageTextContains(strip_tags("Saved the $this->entityLabel Metatag defaults.")); } // Add a field to the entity type. @@ -410,17 +414,17 @@ public function testEntityFieldValuesNewEntity() { // Load the entity form for this entity type. $title = 'Barfoo'; $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. if ($this->entitySupportsDefaults) { - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); } else { - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } // Allow the fields to be customized if needed. @@ -442,16 +446,16 @@ public function testEntityFieldValuesNewEntity() { // @todo Confirm the values output correctly. // Open the 'edit' form for the entity. $this->drupalGet($entity->toUrl('edit-form')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // If this entity type supports defaults then verify the global default is // not present but that the entity default *is* present. if ($this->entitySupportsDefaults) { - $this->assertNoFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); + $session->fieldValueNotEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $entity_values['metatag_test_tag']); } else { - $this->assertFieldByName('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); + $session->fieldValueEquals('field_metatag[0][basic][metatag_test_tag]', $global_values['metatag_test_tag']); } // @todo Confirm the values output correctly. @@ -468,8 +472,9 @@ public function tofixTestEntityField() { // Create a test entity. $this->drupalGet($this->entityAddPath); - $this->assertSession()->statusCodeEquals(200); - $this->assertNoText('Fatal error'); + $session = $this->assertSession(); + $session->statusCodeEquals(200); + $session->pageTextNotContains('Fatal error'); $edit = $this->entityDefaultValues($title) + [ 'field_metatag[0][basic][metatag_test_tag]' => 'Kilimanjaro', ]; @@ -483,10 +488,10 @@ public function tofixTestEntityField() { // Make sure tags that have a field value but no default value still show // up. $this->drupalGet($entity->toUrl()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $elements = $this->cssSelect('meta[name=metatag_test_tag]'); $this->assertCount(1, $elements, 'Found keywords metatag_test_tag from defaults'); - $this->assertEqual((string) $elements[0]['content'], 'Kilimanjaro', 'Field value for metatag_test_tag found when no default set.'); + $this->assertEquals((string) $elements[0]['content'], 'Kilimanjaro', 'Field value for metatag_test_tag found when no default set.'); // @todo This should not be required, but meta tags does not invalidate // cache upon setting globals. @@ -494,18 +499,18 @@ public function tofixTestEntityField() { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $values = [ 'metatag_test_tag' => 'Purple monkey dishwasher', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); $this->drupalGet($entity->toUrl()); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $elements = $this->cssSelect('meta[name=metatag_test_tag]'); $this->assertCount(1, $elements, 'Found test metatag from defaults'); $this->verbose('<pre>' . print_r($elements, TRUE) . '</pre>'); - $this->assertEqual((string) $elements[0]['content'], $values['metatag_test_tag']); + $this->assertEquals((string) $elements[0]['content'], $values['metatag_test_tag']); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php index 41ca27ab4d0766d444ff4b24f6cc140807875ffd..fb54470a95ca3ba125dc9cfbb426ca00ab941e0c 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldTestTest.php @@ -12,7 +12,7 @@ class MetatagFieldTestTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php index 61c31715c10846b56f4dd647bf3673db4ab9838c..baa76318a1e3e863f6a4714efd3f084b40c68843 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFieldUserTest.php @@ -12,7 +12,7 @@ class MetatagFieldUserTest extends MetatagFieldTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php index 860e875d456c934ce2fd3111ed1a383874520621..a0b1c96df4ded38929a615d90cf0d7505b76cbbd 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagForumTest.php @@ -17,7 +17,7 @@ class MetatagForumTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'token', 'metatag', 'node', @@ -71,7 +71,8 @@ protected function setUp() { */ public function testForumPost() { $this->drupalGet('node/add/forum'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => 'Testing forums', 'taxonomy_forums' => 1, @@ -79,8 +80,8 @@ public function testForumPost() { ]; $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('@type @title has been created.', ['@type' => $this->t('Forum topic'), '@title' => 'Testing forums'])); + $session->statusCodeEquals(200); + $session->pageTextContains('Forum topic Testing forums has been created.'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php index 50deeec347dc3af2b24121c1903eef02d7a7990c..ae839d1f769c86363b569eed83c51a7b87191c07 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagFrontpageTest.php @@ -18,7 +18,7 @@ class MetatagFrontpageTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'token', 'metatag', 'node', @@ -64,15 +64,16 @@ protected function setUp() { public function testFrontPageMetatagsEnabledConfig() { // Add something to the front page config. $this->drupalGet('admin/config/search/metatag/front'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title', 'description' => 'Test description', 'keywords' => 'testing,keywords', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Saved the Front page Metatag defaults.')); + $session->statusCodeEquals(200); + $session->pageTextContains('Saved the Front page Metatag defaults.'); // Testing front page metatags. $this->drupalGet('<front>'); @@ -88,7 +89,7 @@ public function testFrontPageMetatagsEnabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } $node_path = '/node/' . $this->nodeId; @@ -106,7 +107,7 @@ public function testFrontPageMetatagsEnabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } // Change the front page to a valid custom route. @@ -114,19 +115,19 @@ public function testFrontPageMetatagsEnabledConfig() { 'site_frontpage' => '/test-page', ]; $this->drupalGet('admin/config/system/site-information'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, $site_edit, $this->t('Save configuration')); - $this->assertText($this->t('The configuration options have been saved.'), 'The front page path has been saved.'); + $session->pageTextContains('The configuration options have been saved.'); return; // @todo Finish this? $this->drupalGet('test-page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($edit as $metatag => $metatag_value) { $xpath = $this->xpath("//meta[@name='" . $metatag . "']"); $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } } @@ -136,20 +137,21 @@ public function testFrontPageMetatagsEnabledConfig() { public function testFrontPageMetatagDisabledConfig() { // Disable front page metatag, enable node metatag & check. $this->drupalGet('admin/config/search/metatag/front/delete'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], $this->t('Delete')); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('Deleted Front page defaults.')); + $session->statusCodeEquals(200); + $session->pageTextContains('Deleted Front page defaults.'); // Update the Metatag Node defaults. $this->drupalGet('admin/config/search/metatag/node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title for a node.', 'description' => 'Test description for a node.', ]; $this->drupalPostForm(NULL, $edit, 'Save'); - $this->assertText('Saved the Content Metatag defaults.'); + $session->pageTextContains('Saved the Content Metatag defaults.'); $this->drupalGet('<front>'); foreach ($edit as $metatag => $metatag_value) { $xpath = $this->xpath("//meta[@name='" . $metatag . "']"); @@ -163,32 +165,32 @@ public function testFrontPageMetatagDisabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } // Change the front page to a valid path. $this->drupalGet('admin/config/system/site-information'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'site_frontpage' => '/test-page', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save configuration')); - $this->assertText($this->t('The configuration options have been saved.'), 'The front page path has been saved.'); + $session->pageTextContains('The configuration options have been saved.'); // Front page is custom route. // Update the Metatag Node global. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title' => 'Test title.', 'description' => 'Test description.', ]; $this->drupalPostForm(NULL, $edit, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); // Test Metatags. $this->drupalGet('test-page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); foreach ($edit as $metatag => $metatag_value) { $xpath = $this->xpath("//meta[@name='" . $metatag . "']"); if ($metatag == 'title') { @@ -201,7 +203,7 @@ public function testFrontPageMetatagDisabledConfig() { $this->assertCount(1, $xpath, 'Exactly one ' . $metatag . ' meta tag found.'); $value = $xpath[0]->getAttribute('content'); } - $this->assertEqual($value, $metatag_value); + $this->assertEquals($value, $metatag_value); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php index 8470d12f1fbfd5b484164e162efbf6e637d1d535..01b97cb6f63ee469dde6340c3e7f51c6595f282f 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagNodeTranslationTest.php @@ -20,7 +20,7 @@ class MetatagNodeTranslationTest extends BrowserTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ 'content_translation', 'field_ui', 'metatag', @@ -101,45 +101,46 @@ public function testMetatagValueTranslation() { // Add a metatag field to the content type. $this->drupalGet('admin/structure/types'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $this->drupalGet('admin/structure/types/manage/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'language_configuration[language_alterable]' => TRUE, 'language_configuration[content_translation]' => TRUE, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save content type')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalGet('admin/structure/types/manage/metatag_node/fields/add-field'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'label' => 'Meta tags', 'field_name' => 'meta_tags', 'new_storage_type' => 'metatag', ]; $this->drupalPostForm(NULL, $edit, $this->t('Save and continue')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalPostForm(NULL, [], $this->t('Save field settings')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'translatable' => TRUE, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save settings')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalGet('admin/structure/types/manage/metatag_node/fields/node.metatag_node.field_meta_tags'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Load the node form. $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Check the default values are correct. - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.'); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); // Create a node. $edit = [ @@ -147,71 +148,71 @@ public function testMetatagValueTranslation() { 'body[0][value]' => 'French summary.', ]; $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'French summary.'); + $this->assertEquals($value, 'French summary.'); $this->drupalGet('node/1/translations/add/en/es'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Check the default values are there. - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.'); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); $edit = [ 'title[0][value]' => 'Node Español', 'body[0][value]' => 'Spanish summary.', ]; $this->drupalPostForm(NULL, $edit, $save_label_i18n); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $this->drupalGet('es/node/1'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'Spanish summary.'); - $this->assertNotEqual($value, 'French summary.'); + $this->assertEquals($value, 'Spanish summary.'); + $this->assertNotEquals($value, 'French summary.'); $this->drupalGet('node/1/edit'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Check the default values are there. - $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.'); - $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.'); + $session->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); + $session->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]'); // Set explicit values on the description metatag instead using the // defaults. $this->drupalGet('node/1/edit'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'field_meta_tags[0][basic][description]' => 'Overridden French description.', ]; $this->drupalPostForm(NULL, $edit, $save_label_i18n); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'Overridden French description.'); - $this->assertNotEqual($value, 'Spanish summary.'); - $this->assertNotEqual($value, 'French summary.'); + $this->assertEquals($value, 'Overridden French description.'); + $this->assertNotEquals($value, 'Spanish summary.'); + $this->assertNotEquals($value, 'French summary.'); $this->drupalGet('es/node/1/edit'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'field_meta_tags[0][basic][description]' => 'Overridden Spanish description.', ]; $this->drupalPostForm(NULL, $edit, $save_label_i18n); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $xpath = $this->xpath("//meta[@name='description']"); $this->assertCount(1, $xpath, 'Exactly one description meta tag found.'); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, 'Overridden Spanish description.'); - $this->assertNotEqual($value, 'Spanish summary.'); - $this->assertNotEqual($value, 'French summary.'); + $this->assertEquals($value, 'Overridden Spanish description.'); + $this->assertNotEquals($value, 'Spanish summary.'); + $this->assertNotEquals($value, 'French summary.'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php index 73c860dba9cc4537e03789438847f92707310ff1..35429786732769d23f478a83351aec602996ef9f 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagStringTest.php @@ -26,7 +26,7 @@ class MetatagStringTest extends BrowserTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ 'token', 'node', 'field_ui', @@ -128,34 +128,35 @@ public function checkConfig($string) { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/front'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => $title_original, 'description' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, 'Save'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $metatag_defaults = \Drupal::config('metatag.metatag_defaults.front'); $default_title = $metatag_defaults->get('tags')['title']; $default_description = $metatag_defaults->get('tags')['description']; // Make sure the title tag is stored correctly. - $this->assertEqual($title_original, $default_title, 'The title tag was stored in its original format.'); - $this->assertNotEqual($title_encoded, $default_title, 'The title tag was not stored in an encoded format.'); - $this->assertNotEqual($title_encodeded, $default_title, 'The title tag was not stored in a double-encoded format.'); + $this->assertEquals($title_original, $default_title, 'The title tag was stored in its original format.'); + $this->assertNotEquals($title_encoded, $default_title, 'The title tag was not stored in an encoded format.'); + $this->assertNotEquals($title_encodeded, $default_title, 'The title tag was not stored in a double-encoded format.'); // Make sure the description tag is stored correctly. - $this->assertEqual($desc_original, $default_description, 'The description tag was stored in its original format.'); - $this->assertNotEqual($desc_encoded, $default_description, 'The description tag was not stored in an encoded format.'); - $this->assertNotEqual($desc_encodeded, $default_description, 'The description tag was not stored in a double-encoded format.'); + $this->assertEquals($desc_original, $default_description, 'The description tag was stored in its original format.'); + $this->assertNotEquals($desc_encoded, $default_description, 'The description tag was not stored in an encoded format.'); + $this->assertNotEquals($desc_encodeded, $default_description, 'The description tag was not stored in a double-encoded format.'); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Create a node. $this->drupalGet('node/add/page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $title_original, 'body[0][value]' => $desc_original, @@ -167,26 +168,26 @@ public function checkConfig($string) { // Load the front page. $this->drupalGet('<front>'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Again, with xpath the HTML entities will be parsed automagically. $xpath_title = current($this->xpath("//title"))->getText(); - $this->assertEqual($xpath_title, $title_original); - $this->assertNotEqual($xpath_title, $title_encoded); - $this->assertNotEqual($xpath_title, $title_encodeded); + $this->assertEquals($xpath_title, $title_original); + $this->assertNotEquals($xpath_title, $title_encoded); + $this->assertNotEquals($xpath_title, $title_encodeded); // The page title should be HTML encoded; have to do this check manually // because assertRaw() checks the raw HTML, not the parsed strings like // xpath does. - $this->assertRaw('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is available in its encoded format.'); - $this->assertNoRaw('<title>' . $title_original . '</title>', 'Confirmed the node title tag is not available in its original format.'); - $this->assertNoRaw('<title>' . $title_encodeded . '</title>', 'Confirmed the node title tag is not double-double-encoded?'); + $session->responseContains('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is available in its encoded format.'); + $session->responseNotContains('<title>' . $title_original . '</title>', 'Confirmed the node title tag is not available in its original format.'); + $session->responseNotContains('<title>' . $title_encodeded . '</title>', 'Confirmed the node title tag is not double-double-encoded?'); // Again, with xpath the HTML entities will be parsed automagically. $xpath = $this->xpath("//meta[@name='description']"); - $this->assertEqual($xpath[0]->getAttribute('content'), $desc_original); - $this->assertNotEqual($xpath[0]->getAttribute('content'), $desc_encoded); - $this->assertNotEqual($xpath[0]->getAttribute('content'), $desc_encodeded); + $this->assertEquals($xpath[0]->getAttribute('content'), $desc_original); + $this->assertNotEquals($xpath[0]->getAttribute('content'), $desc_encoded); + $this->assertNotEquals($xpath[0]->getAttribute('content'), $desc_encodeded); } /** @@ -209,55 +210,56 @@ public function checkNode($string) { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => $title_original, 'description' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Create a node. $this->drupalGet('node/add/page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $title_original, 'body[0][value]' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Load the node page. $this->drupalGet('node/1'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Again, with xpath the HTML entities will be parsed automagically. $xpath_title = current($this->xpath("//title"))->getText(); - $this->assertEqual($xpath_title, $title_original); - $this->assertNotEqual($xpath_title, $title_encoded); - $this->assertNotEqual($xpath_title, $title_encodeded); + $this->assertEquals($xpath_title, $title_original); + $this->assertNotEquals($xpath_title, $title_encoded); + $this->assertNotEquals($xpath_title, $title_encodeded); // The page title should be HTML encoded; have to do this check manually // because assertRaw() checks the raw HTML, not the parsed strings like // xpath does. - $this->assertRaw('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is encoded.'); + $session->responseContains('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is encoded.'); // Again, with xpath the HTML entities will be parsed automagically. $xpath = $this->xpath("//meta[@name='description']"); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, $desc_original); - $this->assertNotEqual($value, $desc_encoded); - $this->assertNotEqual($value, $desc_encodeded); + $this->assertEquals($value, $desc_original); + $this->assertNotEquals($value, $desc_encoded); + $this->assertNotEquals($value, $desc_encodeded); // Normal meta tags should be encoded properly. - $this->assertRaw('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); + $session->responseContains('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); // Normal meta tags with HTML entities should be displayed in their original // format. - $this->assertNoRaw('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); + $session->responseNotContains('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); // Normal meta tags should not be double-encoded. - $this->assertNoRaw('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); + $session->responseNotContains('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); } /** @@ -278,47 +280,48 @@ public function checkEncodedField($string) { // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title' => $title_original, 'description' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $this->t('Save')); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Set up a node without explicit metatag description. This causes the // global default to be used, which contains a token (node:summary). The // token value should be correctly translated. // Create a node. $this->drupalGet('node/add/page'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $title_original, 'body[0][value]' => $desc_original, ]; $this->drupalPostForm(NULL, $edit, $save_label); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Load the node page. $this->drupalGet('node/1'); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // With xpath the HTML entities will be parsed automagically. $xpath = $this->xpath("//meta[@name='description']"); $value = $xpath[0]->getAttribute('content'); - $this->assertEqual($value, $desc_original); - $this->assertNotEqual($value, $desc_encoded); - $this->assertNotEqual($value, $desc_encodeded); + $this->assertEquals($value, $desc_original); + $this->assertNotEquals($value, $desc_encoded); + $this->assertNotEquals($value, $desc_encodeded); // Normal meta tags should be encoded properly. - $this->assertRaw('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); + $session->responseContains('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.'); // Normal meta tags with HTML entities should be displayed in their original // format. - $this->assertNoRaw('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); + $session->responseNotContains('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.'); // Normal meta tags should not be double-encoded. - $this->assertNoRaw('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); + $session->responseNotContains('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.'); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php index 1d3a369385653fdcec778b20783570561ff1000b..475e8b148c1e2e148a9cceb6effb9de78f150c41 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagTypesTest.php @@ -33,7 +33,7 @@ class MetatagTagTypesTest extends BrowserTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ // Needed for token handling. 'token', @@ -104,7 +104,8 @@ protected function setUp() { */ public function testHtmlIsRemoved() { $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'abstract' => 'No HTML here', 'description' => '<html><body><p class="test">Surrounded by raw HTML</p></body></html>', @@ -112,14 +113,14 @@ public function testHtmlIsRemoved() { ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet('hit-a-404'); - $this->assertSession()->statusCodeEquals(404); + $session->statusCodeEquals(404); - $this->assertRaw('<meta name="abstract" content="No HTML here" />', $this->t('Test with no HTML content')); - $this->assertRaw('<meta name="description" content="Surrounded by raw HTML" />', $this->t('Test with raw HTML content')); - $this->assertRaw('<meta name="keywords" content="Surrounded by escaped HTML" />', $this->t('Test with escaped HTML content')); + $session->responseContains('<meta name="abstract" content="No HTML here" />', $this->t('Test with no HTML content')); + $session->responseContains('<meta name="description" content="Surrounded by raw HTML" />', $this->t('Test with raw HTML content')); + $session->responseContains('<meta name="keywords" content="Surrounded by escaped HTML" />', $this->t('Test with escaped HTML content')); } /** @@ -132,19 +133,20 @@ public function testHtmlIsRemoved() { */ public function testSecureTagOption() { $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'og_image' => 'https://blahblahblah.com/insecure.jpg', 'og_image_secure_url' => 'https://blahblahblah.com/secure.jpg', ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet(''); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); - $this->assertRaw('<meta property="og:image" content="https://blahblahblah.com/insecure.jpg" />', $this->t('Test og:image with regular https:// link')); - $this->assertRaw('<meta property="og:image:secure_url" content="https://blahblahblah.com/secure.jpg" />', $this->t('Test og:image:secure_url updated regular https:// link to https://')); + $session->responseContains('<meta property="og:image" content="https://blahblahblah.com/insecure.jpg" />', $this->t('Test og:image with regular https:// link')); + $session->responseContains('<meta property="og:image:secure_url" content="https://blahblahblah.com/secure.jpg" />', $this->t('Test og:image:secure_url updated regular https:// link to https://')); } /** @@ -185,13 +187,13 @@ public function todoTestUrl() { // $entities = entity_load_multiple_by_properties('entity_test', [ // 'name' => 'UrlTags', // ]); - // $this->assertEqual(1, count($entities), 'Entity was saved'); + // $this->assertEquals(count($entities), 1, 'Entity was saved'); // $entity = reset($entities); // $this->drupalGet($this->entity_base_path . '/' . $entity->id()); // $this->assertSession()->statusCodeEquals(200); // $elements = $this->cssSelect("meta[name='original-source']"); // $this->assertTrue(count($elements) === 1, 'Found original source metatag from defaults'); - // $this->assertEqual((string) $elements[0]['content'], $edit['field_metatag[0][advanced][original_source]']); + // $this->assertEquals($edit['field_metatag[0][advanced][original_source]'], (string) $elements[0]['content']); // {@endcode} } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php index ac78d0bff8fdeca1a00526526fe209d317736d49..d781c8b3229f72b2d0bea2ada3a0a2987e306e8c 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagTagsTestBase.php @@ -18,7 +18,7 @@ abstract class MetatagTagsTestBase extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // This is needed for the 'access content' permission. 'node', @@ -106,7 +106,7 @@ public function testTagsArePresent() { $xpath = "//input[@name='{$tag}' and @type='text']"; } - $this->assertFieldByXPath($xpath, NULL, new FormattableMarkup('Found the @tag meta tag field using the xpath: @xpath', ['@tag' => $tag, '@xpath' => $xpath])); + $this->xpath($xpath); } $this->drupalLogout(); @@ -130,6 +130,7 @@ public function testTagsInputOutput($tag_name) { 'title' => $this->t('Hello, world!'), 'type' => 'page', ]); + $session = $this->assertSession(); // Test a non-entity path and an entity path. The non-entity path inherits // the global meta tags, the entity path inherits from its entity config. @@ -151,7 +152,7 @@ public function testTagsInputOutput($tag_name) { // Load the global config. $this->drupalGet($path1); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Update the Global defaults and test them. $all_values = $values = []; @@ -182,11 +183,11 @@ public function testTagsInputOutput($tag_name) { $values[$test_key] = $test_value; $all_values[$tag_name] = $test_value; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText($save_message); + $session->pageTextContains($save_message); // Load the test page. $this->drupalGet($path2); - $this->assertSession()->statusCodeEquals(200); + $session->statusCodeEquals(200); // Look for the values. // Look for a custom method named "{$tag_name}TestOutputXpath", if @@ -269,13 +270,13 @@ public function testTagsInputOutput($tag_name) { $this->verbose($xpath, $tag_name . ': ' . $xpath_string); } $this->assertNotEmpty($xpath[0]->getAttribute($xpath_value_attribute)); - $this->assertEqual($xpath[0]->getAttribute($xpath_value_attribute), $all_values[$tag_name], "The '{$tag_name}' tag was found with the expected value."); + $this->assertEquals($xpath[0]->getAttribute($xpath_value_attribute), $all_values[$tag_name], "The '{$tag_name}' tag was found with the expected value."); } } else { $this->verbose($xpath, $tag_name . ': ' . $xpath_string); $this->assertTrue((string) $xpath[0]); - $this->assertEqual((string) $xpath[0], $all_values[$tag_name], new FormattableMarkup("The '@tag' tag was found with the expected value '@value'.", ['@tag' => $tag_name, '@value' => $all_values[$tag_name]])); + $this->assertEquals((string) $xpath[0], $all_values[$tag_name], new FormattableMarkup("The '@tag' tag was found with the expected value '@value'.", ['@tag' => $tag_name, '@value' => $all_values[$tag_name]])); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php new file mode 100644 index 0000000000000000000000000000000000000000..892a8ec230c297597da4a16f28e6adb268363776 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagTokenStatus.php @@ -0,0 +1,52 @@ +<?php + +namespace Drupal\Tests\metatag\Functional; + +use Drupal\Core\Url; +use Drupal\Tests\BrowserTestBase; + +/** + * Test the token status for metatag. + * + * @group metatag + */ +class MetatagTokenStatus extends BrowserTestBase +{ + + /** + * {@inheritdoc} + */ + public static $modules = ['metatag']; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * Test the status report does not contain warnings about types. + * + * @see token_get_token_problems + */ + function testStatusReportTypesWarning() + { + $this->drupalLogin($this->rootUser); + $this->drupalGet(Url::fromRoute('system.status')); + + $this->assertSession()->pageTextNotContains('$info[\'types\'][\'metatag'); + } + + /** + * Test the status report does not contain warnings about tokens. + * + * @see token_get_token_problems + */ + function testStatusReportTokensWarning() + { + $this->drupalLogin($this->rootUser); + $this->drupalGet(Url::fromRoute('system.status')); + + $this->assertSession()->pageTextNotContains('$info[\'tokens\'][\'metatag'); + } + +} diff --git a/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php b/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php index 5243223b6d1d6919c4966a1240a165964849700b..0ab5ec674357c19062b67ad14baf2242fc2b5f21 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php +++ b/web/modules/contrib/metatag/tests/src/Functional/MetatagXssTest.php @@ -62,7 +62,7 @@ class MetatagXssTest extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'node', 'views', 'system', @@ -120,33 +120,34 @@ protected function setUp() { */ public function testXssMetatagConfig() { $this->drupalGet('admin/config/search/metatag/global'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $values = [ 'title' => $this->xssTitleString, 'abstract' => $this->xssString, 'image_src' => $this->xssImageString, ]; $this->drupalPostForm(NULL, $values, 'Save'); - $this->assertText('Saved the Global Metatag defaults.'); + $session->pageTextContains('Saved the Global Metatag defaults.'); $this->rebuildAll(); // Load the Views-based front page. $this->drupalGet('node'); - $this->assertSession()->statusCodeEquals(200); - $this->assertText($this->t('No front page content has been created yet.')); + $session->statusCodeEquals(200); + $session->pageTextContains('No front page content has been created yet.'); // Check for the title tag, which will have the HTML tags removed and then // be lightly HTML encoded. - $this->assertEscaped(strip_tags($this->xssTitleString)); - $this->assertNoRaw($this->xssTitleString); + $session->assertEscaped(strip_tags($this->xssTitleString)); + $session->responseNotContains($this->xssTitleString); // Check for the basic meta tag. - $this->assertRaw($this->escapedXssTag); - $this->assertNoRaw($this->xssString); + $session->responseContains($this->escapedXssTag); + $session->responseNotContains($this->xssString); // Check for the image meta tag. - $this->assertRaw($this->escapedXssImageTag); - $this->assertNoRaw($this->xssImageString); + $session->responseContains($this->escapedXssImageTag); + $session->responseNotContains($this->xssImageString); } /** @@ -156,7 +157,8 @@ public function testXssEntityOverride() { $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $this->randomString(32), 'field_metatag_field[0][basic][title]' => $this->xssTitleString, @@ -167,16 +169,16 @@ public function testXssEntityOverride() { // Check for the title tag, which will have the HTML tags removed and then // be lightly HTML encoded. - $this->assertEscaped(strip_tags($this->xssTitleString)); - $this->assertNoRaw($this->xssTitleString); + $session->assertEscaped(strip_tags($this->xssTitleString)); + $session->responseNotContains($this->xssTitleString); // Check for the basic meta tag. - $this->assertRaw($this->escapedXssTag); - $this->assertNoRaw($this->xssString); + $session->responseContains($this->escapedXssTag); + $session->responseNotContains($this->xssString); // Check for the image meta tag. - $this->assertRaw($this->escapedXssImageTag); - $this->assertNoRaw($this->xssImageString); + $session->responseContains($this->escapedXssImageTag); + $session->responseNotContains($this->xssImageString); } /** @@ -186,7 +188,8 @@ public function testXssEntityTitle() { $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $this->xssTitleString, 'body[0][value]' => $this->randomString() . ' ' . $this->randomString(), @@ -195,8 +198,8 @@ public function testXssEntityTitle() { // Check for the title tag, which will have the HTML tags removed and then // be lightly HTML encoded. - $this->assertEscaped(strip_tags($this->xssTitleString)); - $this->assertNoRaw($this->xssTitleString); + $session->assertEscaped(strip_tags($this->xssTitleString)); + $session->responseNotContains($this->xssTitleString); } /** @@ -206,7 +209,8 @@ public function testXssEntityBody() { $save_label = (floatval(\Drupal::VERSION) <= 8.3) ? $this->t('Save and publish') : $this->t('Save'); $this->drupalGet('node/add/metatag_node'); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); $edit = [ 'title[0][value]' => $this->randomString(), 'body[0][value]' => $this->xssTitleString, @@ -217,7 +221,7 @@ public function testXssEntityBody() { // {@code} // $this->assertNoTitle($this->xssTitleString); // {@endcode} - $this->assertNoRaw($this->xssTitleString); + $session->responseNotContains($this->xssTitleString); } } diff --git a/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php b/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php index 5c079df0a8d872670d0531dba58b42770b1cabcc..41476177af64c151ea3e69cc782eb18c72ae4089 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php +++ b/web/modules/contrib/metatag/tests/src/Functional/NodeJsonOutput.php @@ -19,7 +19,7 @@ class NodeJsonOutput extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'node', 'field', @@ -63,7 +63,7 @@ public function testNode() { $this->assertSession()->statusCodeEquals(200); // Decode the JSON output. - $response = $this->getRawContent(); + $response = $this->getSession()->getPage()->getContent(); $this->assertNotEmpty($response); $json = json_decode($response); $this->verbose($json, 'JSON output'); diff --git a/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php b/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php index b6f6f14b7b25fd2073e723d7f647aa310eab7607..2e720c98e27f9df30a02a8ddc8af2ba2be4ee05c 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php +++ b/web/modules/contrib/metatag/tests/src/Functional/NodeTranslation.php @@ -17,7 +17,7 @@ class NodeTranslation extends BrowserTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Modules for core functionality. 'language', 'node', diff --git a/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php b/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php index 93b492b07ca2f43e124f459feed1a839b9bcdae8..2a27226a7290fce7055ab23e991cd42e84a2f500 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php +++ b/web/modules/contrib/metatag/tests/src/Functional/RemoveCoreMetaTags.php @@ -17,11 +17,9 @@ class RemoveCoreMetaTags extends BrowserTestBase { use MetatagHelperTrait; /** - * Modules to enable. - * - * @var array + * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'token', 'metatag', 'taxonomy', diff --git a/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php b/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php index 2f254306e7d5f22719b227772ba9ebdef0dd2683..37340f0faf8bba0605cf3c9202439a0aea68ca7c 100644 --- a/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php +++ b/web/modules/contrib/metatag/tests/src/Functional/WithRedirect.php @@ -12,7 +12,7 @@ class WithRedirect extends MetatagAdminTest { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ 'node', 'field_ui', 'test_page_test', diff --git a/web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php b/web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0b27bd1205ec63445e6e27d1857499bff86164f7 --- /dev/null +++ b/web/modules/contrib/metatag/tests/src/FunctionalJavascript/MetatagAvailableTokensTest.php @@ -0,0 +1,45 @@ +<?php + +namespace Drupal\Tests\metatag\FunctionalJavascript; + +use Drupal\Core\Url; +use Drupal\FunctionalJavascriptTests\WebDriverTestBase; + +/** + * Tests the available tokens under metatag routes. + * + * @group metatag + */ +class MetatagAvailableTokensTest extends WebDriverTestBase { + + /** + * {@inheritdoc} + */ + public static $modules = ['metatag', 'node']; + + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + + /** + * Test the node metatag defaults page. + */ + function testNodeMetatagDefaultsPage() { + $this->drupalLogin($this->rootUser); + $this->drupalGet(Url::fromRoute('entity.metatag_defaults.edit_form', ['metatag_defaults' => 'node'])); + $page = $this->getSession()->getPage(); + + $token_dialog_link = $page->find('css', '.token-dialog'); + $token_dialog_link->click(); + + $this->assertSession()->assertWaitOnAjaxRequest(); + + $token_dialog = $page->find('css', '.token-tree-dialog'); + + $token_node_token = $token_dialog->find('css', '#token-node'); + + $this->assertNotEmpty($token_node_token); + } + +} diff --git a/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php b/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php index 417f69e2fed472fb139467f9110d11ea735f5a2e..5797ae9d01ebfb80fe4df4117f55e5aeb628a915 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/Form/MetatagSettingsFormTest.php @@ -27,7 +27,7 @@ class MetatagSettingsFormTest extends KernelTestBase { * * @var array */ - public static $modules = [ + protected static $modules = [ // Core modules. 'system', diff --git a/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php b/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php index bb1cd5cfc23f7a1a24f681892be3465e4f68603e..28e861876036cc495a2fbf5ff9badf398943bc6c 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/MetatagManagerTest.php @@ -14,7 +14,7 @@ class MetatagManagerTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Core modules. 'system', 'field', diff --git a/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php b/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php index 200b35ad93b05d50fe0dfd28b97d41d70ba053d1..37be98f2d283e00ca0623dc1606a5a8ddac7de49 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/MetatagSettingsTest.php @@ -14,7 +14,7 @@ class MetatagSettingsTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = [ + protected static $modules = [ // Contrib modules. 'token', diff --git a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php index ae5de0dc1da11aea601740a9cd63aac52fda9793..0b0eb92982800d6db989b6fb09344a05fc1910a9 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d6/NodewordsFieldTest.php @@ -21,7 +21,11 @@ class NodewordsFieldTest extends MigrateSqlSourceTestBase { /** * {@inheritdoc} */ - public static $modules = ['metatag', 'migrate_drupal', 'token']; + public static $modules = [ + 'metatag', + 'migrate_drupal', + 'token', + ]; /** * {@inheritdoc} diff --git a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php index 7030614f859258d55782d7e316d237de59dd523c..c335fcd93a068c29d5727294b75d05994894298e 100644 --- a/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php +++ b/web/modules/contrib/metatag/tests/src/Kernel/Migrate/d7/MetatagFieldTest.php @@ -15,7 +15,11 @@ class MetatagFieldTest extends MigrateSqlSourceTestBase { /** * {@inheritdoc} */ - public static $modules = ['token', 'metatag', 'migrate_drupal']; + public static $modules = [ + 'token', + 'metatag', + 'migrate_drupal', + ]; /** * {@inheritdoc} diff --git a/web/modules/contrib/module_filter/README.txt b/web/modules/contrib/module_filter/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..eee4c4d81054e51e0e620d4aa21760bc552c606d --- /dev/null +++ b/web/modules/contrib/module_filter/README.txt @@ -0,0 +1,128 @@ +CONTENTS OF THIS FILE +--------------------- + + * Introduction + * Installation + * Configuration + * Tabs + * Filter operators + * Maintainers + +INTRODUCTION +------------ + +This module provides a method for filtering modules on the modules page as well +as for filtering projects on the update status report. + +The supplied filter is simpler than using your browsers find a feature which +searches the entire page. The provided filter will filter modules/projects that +do not meet your input. + +Along with the filter textfield there are additional +checkboxes that help to narrow the search more. The modules page contains 3 +checkboxes: Enabled, Disabled, and Unavailable. While the first two +are self-explanatory, the latter two can take an explanation. The Required +checkbox affects visibility of modules that are enabled and have other +module(s) that require it also enabled. The Unavailable checkbox affects +visibility of modules that are disabled and depend on module(s) that are +missing. + +The update status report filter also contains four checkboxes: Up-to-Date, +Update available, Security update, and Unknown. These directly affect the +visibility of each project; whether it is up-to-date, there is an update +available, a security update is available, or the status is unknown. + +Installation +------------ + +To install this module, do the following: + +1. Extract the tarball that you downloaded from Drupal.org. + +2. Upload the entire directory and all its contents to your modules directory. + +Configuration +------------- + +To enable and configure this module do the following: + +1. Go to Admin -> Modules, and enable Module Filter. + +2. Go to Admin -> Configuration -> User interface -> Module filter, and make + any necessary configuration changes. + +Tabs +---- + +By default Module Filter alters the modules page into tabs (Can be disabled on +configuration page). In the tabs view, each package is converted to a vertical +tab rather than a fieldset which greatly increases the ability to browse them. + +There are several benefits to using the tabs view over the standard view for +the modules page. I've listed the key benefits below as well as additional +information that pertains to each. + +1. The increased ease of browsing between packages. + +2. Allows all modules to be listed alphabetically outside of their package, + making it all the easier to find the module by name rather than package it + happens to be in. + +3. The operations for a module are moved within the description column giving + the description more "elbow room". + +4. Filtering is restricted to within the active tab or globally when no tab is + selected. By default no tab is selected which will list all modules. When a + tab is active and you want to get back to the 'all' state click on the + active tab to deselect it. + +5. The number of enabled modules per tab is shown on the active tab. (Can be + disabled on configuration page) + +6. Nice visual aids become available showing what modules are to be + enabled/disabled and the number of matching modules in each tab when + filtering. (Can be disabled on configuration page) + +7. The save configuration button becomes more accessible, either staying at + the bottom of the window when the tabs exceed past the bottom and at the + top when scrolling past the tabs. (Can be disabled on configuration page) + +8. When filtering, tabs that do not contain matches can be hidden. (Can be + enabled on configuration page) + +9. Tab states are remembered like individual pages allowing you to move + forward and backward within your selections via your browsers + forward/backward buttons. + +10. When viewing all modules (no active tab) and mousing over modules it's tab + becomes highlighted to signify which tab it belongs to. + +Filter operators +---------------- + +The modules page's filter has three filter operators available. Filter +operators allow alternative filtering techniques. A filter operator is applied +by typing within the filter textfield 'operator:' (where operator is the +operator type) followed immediately with the string to pass to the operator +function (e.g. 'requires:block'). The available operators are: + +description: + Filter based on a module's description. + +requiredBy: + Filter based on what a module is required by. + +requires: + Filter based on what a module requires. + +Multiple filters (or queries) can be applied by space delimiting. For example, +the filter string 'description:ctools views' would filter down to modules with +"ctools" in the description and "views" within the module's name. To pass a +space within a single query wrap it within double quotes (e.g. 'requires:"chaos +tools"' or '"bulk export"'). + +Maintainers +------------------ + + - Green Skin (greenSkin) - https://www.drupal.org/u/greenskin + - Andrey Troeglazov (andrey.troeglazov) - https://www.drupal.org/u/andreytroeglazov diff --git a/web/modules/contrib/module_filter/composer.json b/web/modules/contrib/module_filter/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..d07296ece1185c8725ef4a8322a13ef35c20ce69 --- /dev/null +++ b/web/modules/contrib/module_filter/composer.json @@ -0,0 +1,11 @@ +{ + "name": "drupal/module_filter", + "description": "Filter the modules list.", + "type": "drupal-module", + "license": "GPL-2.0+", + "homepage": "http://drupal.org/project/module_filter", + "support": { + "issues": "https://www.drupal.org/project/issues/module_filter", + "source": "https://git.drupalcode.org/project/module_filter" + } +} diff --git a/web/modules/contrib/module_filter/config/schema/module_filter.schema.yml b/web/modules/contrib/module_filter/config/schema/module_filter.schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..ce1af85f3637136b254558dc1b2f15d5afd7cd4e --- /dev/null +++ b/web/modules/contrib/module_filter/config/schema/module_filter.schema.yml @@ -0,0 +1,7 @@ +module_filter.settings: + type: config_object + label: 'Module filter settings' + mapping: + tabs: + type: boolean + label: 'Boolean indicating whether the Extend page should be enhanced with tabs' diff --git a/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css b/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css index 9b6a4eab8824cc9047d9079c00f5b68a913b46f1..39d04fbe90607ce6291e173410a7752d57da9776 100644 --- a/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css +++ b/web/modules/contrib/module_filter/css/module_filter.modules_tabs.css @@ -5,7 +5,7 @@ position: relative; overflow: hidden; margin: 10px 0; - background: #E6E5E1; + background: #e6e5e1; border: 1px solid #bdbdbd; border-radius: 4px; } @@ -33,7 +33,7 @@ border-bottom: 1px solid #ccc; } .modules-tabs__menu-item.suggest { - background: #F9F9F9; + background: #f9f9f9; } .modules-tabs__menu-item.disabled { background: #ccc; @@ -47,7 +47,7 @@ } .modules-tabs__menu-item a:hover, .modules-tabs__menu-item a:focus { - background: #D5D5D5; + background: #d5d5d5; text-decoration: none; outline: 0; } @@ -55,11 +55,11 @@ .modules-tabs__menu-item.is-selected a:hover, .modules-tabs__menu-item.is-selected a:focus, .modules-tabs__menu-item.is-selected a:active { - background-color: #FCFCFA; + background-color: #fcfcfa; margin-right: -1px; } .modules-tabs__menu-item.disabled a, -.modules-tabs__menu-item.disabled span{ +.modules-tabs__menu-item.disabled span { color: #999; } .modules-tabs__menu-item.disabled a { @@ -93,13 +93,13 @@ .modules-tabs__pane { margin: 0 0 0 240px; /* LTR */ padding: 10px 15px; - background: #FCFCFA; - border-left: 1px solid #A6A5A1; /* LTR */ + background: #fcfcfa; + border-left: 1px solid #a6a5a1; /* LTR */ } [dir="rtl"] .modules-tabs__pane { margin: 0 240px 0 0; border-left: none; - border-right: 1px solid #A6A5A1; + border-right: 1px solid #a6a5a1; } .modules-tabs__pane:after { content: ''; @@ -131,4 +131,3 @@ overflow: hidden; text-overflow: ellipsis; } - diff --git a/web/modules/contrib/module_filter/js/module_filter.modules.js b/web/modules/contrib/module_filter/js/module_filter.modules.js index 0e06711492901fa5d8ed34eb8f4c836329880f43..85aaff864b271b64daf2a9efc257e9e24f2b61ac 100644 --- a/web/modules/contrib/module_filter/js/module_filter.modules.js +++ b/web/modules/contrib/module_filter/js/module_filter.modules.js @@ -45,7 +45,7 @@ ModuleFilter.modulesWrapper = $('.modules-wrapper', ModuleFilter.wrapper); ModuleFilter.input.winnow(ModuleFilter.wrapperId + ' ' + ModuleFilter.selector, { - textSelector: 'td.module .module-name', + textSelector: 'td.module .module-name, .module-machine-name', emptyMessage: Drupal.t('No results'), clearLabel: Drupal.t('clear'), wrapper: ModuleFilter.modulesWrapper, diff --git a/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js b/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js index 103e2cbcf78e0c0678bd61484294e51039accfbe..6fa84607149a9beefe5903089ea217eb8087b635 100644 --- a/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js +++ b/web/modules/contrib/module_filter/js/module_filter.modules_tabs.js @@ -335,7 +335,8 @@ ModuleFilter.modulesWrapper.children('details').each(function() { var $details = $(this); var packageName = $details.children('summary').text(); - var packageId = packageName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); + var packageId = $details.children('summary').attr('aria-controls'); + packageId = packageId.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); if (tabs[packageId] == undefined) { tabs[packageId] = new Tab(packageName, packageId); diff --git a/web/modules/contrib/module_filter/module_filter.info.yml b/web/modules/contrib/module_filter/module_filter.info.yml index ab442fa9cbe4db9bbd7933d2521999377e13ee82..fd5130e87192b865163357b35eab48339d8f70b4 100644 --- a/web/modules/contrib/module_filter/module_filter.info.yml +++ b/web/modules/contrib/module_filter/module_filter.info.yml @@ -1,13 +1,15 @@ -name: Module filter +name: Module Filter type: module description: Filter the modules list. package: Administration -# core: 8.x - +core: 8.x +core_version_requirement: ^8 || ^9 configure: module_filter.settings -# Information added by Drupal.org packaging script on 2017-10-10 -version: '8.x-3.1' -core: '8.x' +dependencies: + - drupal:system (>= 8.3) + +# Information added by Drupal.org packaging script on 2021-03-05 +version: '8.x-3.2' project: 'module_filter' -datestamp: 1507650850 +datestamp: 1614918374 diff --git a/web/modules/contrib/module_filter/module_filter.install b/web/modules/contrib/module_filter/module_filter.install index 3af5125d56e10aa09c5273e972d69c7eb28d51b1..ffbf02c2ab459b896a84b0e0892c234e9d771358 100644 --- a/web/modules/contrib/module_filter/module_filter.install +++ b/web/modules/contrib/module_filter/module_filter.install @@ -10,7 +10,7 @@ */ function module_filter_install() { $state = \Drupal::state(); - $state->set('module_filter.recent', ['module_filter' => REQUEST_TIME]); + $state->set('module_filter.recent', ['module_filter' => \Drupal::time()->getRequestTime()]); } /** diff --git a/web/modules/contrib/module_filter/module_filter.module b/web/modules/contrib/module_filter/module_filter.module index 18c009bb80107b6256c3522ccac079f65a8c7354..981e558d480260d3ed85ec233476b7b6ee57d5c1 100644 --- a/web/modules/contrib/module_filter/module_filter.module +++ b/web/modules/contrib/module_filter/module_filter.module @@ -7,6 +7,27 @@ use Drupal\Core\Render\Element; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Routing\RouteMatchInterface; + +/** + * Implements hook_help(). + */ +function module_filter_help($route_name, RouteMatchInterface $route_match) { + switch ($route_name) { + case 'help.page.module_filter': + $output = ''; + $output .= '<p>'; + $output .= t('The modules list page can become quite big when dealing with a fairly large site or even just a dev site meant for testing new and various modules being considered.'); + $output .= '</p>'; + $output .= '<p>'; + $output .= t('What this module aims to accomplish is the ability to quickly find the module you are looking for without having to rely on the browsers search feature which more times than not shows you the module name in the -Required by- or -Depends on- sections of the various modules or even some other location on the page like a menu item.'); + $output .= '</p>'; + $output .= '<p>'; + $output .= t('See the <a href=":project_page">project page on Drupal.org</a> for more details.', [':project_page' => 'https://www.drupal.org/project/module_filter']); + + return $output; + } +} /** * Implements hook_form_FORM_ID_alter(). @@ -53,7 +74,7 @@ function module_filter_form_system_modules_alter(&$form, FormStateInterface $for // Remove recent items older than a week. $recent = array_filter($recent, function ($val) { - return !($val < REQUEST_TIME - 60 * 60 * 24 * 7); + return !($val < \Drupal::time()->getRequestTime() - 60 * 60 * 24 * 7); }); $state->set('module_filter.recent', $recent); @@ -68,7 +89,7 @@ function module_filter_form_system_modules_alter(&$form, FormStateInterface $for } } - $modules = system_rebuild_module_data(); + $modules = \Drupal::service('extension.list.module')->reset()->getList(); foreach ($modules as $name => $module) { if ($name == 'module_filter') { @@ -102,7 +123,7 @@ function module_filter_form_system_modules_confirm_form_alter(&$form, FormStateI /** * Implements hook_form_FORM_ID_alter(). */ -function module_filter_form_system_modules_uninstall_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { +function module_filter_form_system_modules_uninstall_alter(&$form, FormStateInterface $form_state, $form_id) { $key = array_search('system/drupal.system.modules', $form['#attached']['library']); if ($key !== FALSE) { unset($form['#attached']['library'][$key]); @@ -118,7 +139,7 @@ function module_filter_form_system_modules_uninstall_alter(&$form, \Drupal\Core\ /** * Implements hook_form_FORM_ID_alter(). */ -function module_filter_form_user_admin_permissions_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { +function module_filter_form_user_admin_permissions_alter(&$form, FormStateInterface $form_state, $form_id) { $form['filters'] = [ '#type' => 'container', '#attributes' => [ @@ -157,6 +178,18 @@ function module_filter_theme_registry_alter(&$theme_registry) { * Implements hook_preprocess_HOOK(). */ function module_filter_preprocess_system_modules_details(&$variables) { + $display_path = \Drupal::config('module_filter.settings')->get('path'); + if ($display_path) { + foreach ($variables['modules'] as &$module) { + // Get the module id from parents. + // Because core does not provide it in template_preprocess_system_modules_details. + $id = $module['name']['#parents'][1]; + $path = drupal_get_path('module', $id); + if (!empty($path)) { + $module['path'] = $path; + } + } + } } /** @@ -170,7 +203,7 @@ function module_filter_system_modules_recent_enabled_submit($form, FormStateInte // the version of Drupal and building the $modules array accordingly. // @see https://www.drupal.org/node/2851653 $modules = []; - if (version_compare(\DRUPAL::VERSION, '8.3.0', '<')) { + if (version_compare(\Drupal::VERSION, '8.3.0', '<')) { foreach ($form_state->getValue('modules') as $package) { $modules += $package; } @@ -182,7 +215,7 @@ function module_filter_system_modules_recent_enabled_submit($form, FormStateInte foreach (Element::children($form['modules']) as $package) { foreach ($modules as $module => $details) { if (isset($form['modules'][$package][$module]) && $form['modules'][$package][$module]['enable']['#default_value'] != $details['enable']) { - $recent[$module] = REQUEST_TIME; + $recent[$module] = \Drupal::time()->getRequestTime(); } } } diff --git a/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php b/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php index fb1ec4b6523d5e420c5729e2286cc09e674c2e01..6bc8e3a8fcbb69e0ee27054925ff0dee6a6324a7 100644 --- a/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php +++ b/web/modules/contrib/module_filter/src/Form/ModuleFilterSettingsForm.php @@ -37,6 +37,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $config->get('tabs'), ]; + $form['modules']['path'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Show module path in modules list'), + '#description' => $this->t('Defines if the relative path of each module will be display in its row.'), + '#default_value' => $config->get('path'), + ]; + return $form; } @@ -47,6 +54,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); $this->config('module_filter.settings') ->set('tabs', $values['tabs']) + ->set('path', $values['path']) ->save(); parent::submitForm($form, $form_state); diff --git a/web/modules/contrib/module_filter/templates/system-modules-details.html.twig b/web/modules/contrib/module_filter/templates/system-modules-details.html.twig index 144f8609e5487256c7727390f3066ba652c8f703..03c8d1838cf69dda6537d61aec1b8d6cb37902c6 100644 --- a/web/modules/contrib/module_filter/templates/system-modules-details.html.twig +++ b/web/modules/contrib/module_filter/templates/system-modules-details.html.twig @@ -48,7 +48,7 @@ <div class="details-wrapper"> <div class="details-description"> <div class="requirements"> - <div class="admin-requirements">{{ 'Machine name: <span dir="ltr" class="table-filter-text-source">@machine-name</span>'|t({'@machine-name': module.machine_name }) }}</div> + <div class="admin-requirements">{{ 'Machine name: <span dir="ltr" class="module-machine-name table-filter-text-source">@machine-name</span>'|t({'@machine-name': module.machine_name }) }}</div> {% if module.version %} <div class="admin-requirements">{{ 'Version: @module-version'|t({'@module-version': module.version }) }}</div> {% endif %} @@ -58,6 +58,9 @@ {% if module.required_by %} <div class="admin-requirements required-by">{{ 'Required by: @module-list'|t({'@module-list': module.required_by }) }}</div> {% endif %} + {% if module.path %} + <div class="admin-requirements module-path">{{ 'Module path: @module-list'|t({'@module-list': module.path }) }}</div> + {% endif %} </div> {% if module.links %} <div class="links"> diff --git a/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml b/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml index 231a4a42a9862c0b1731a6febef9ccfdd4a40eac..521c74e340202ab6430e45a7ab92d010b658a38b 100644 --- a/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml +++ b/web/modules/contrib/permissions_by_term/bitbucket-pipelines.yml @@ -23,8 +23,9 @@ pipelines: - mv permissions_by_term/ build/ - cd build - composer create-project drupal-composer/drupal-project:8.x-dev drupal --stability dev --no-interaction - - (cd drupal && composer require behat/behat:^3.0 behat/mink-extension:^2.2 drupal/drupal-extension:^3.2 phpunit/phpunit:^7.0 mikey179/vfsstream:^1.6 --dev) + - (cd drupal && composer require behat/behat:^3.0 behat/mink-extension:^2.2 drupal/drupal-extension:^3.2 phpunit/phpunit:^7.0 mikey179/vfsstream:^1.6 phpstan/phpstan:~0.12.75 phpstan/extension-installer:~1.1.0 mglaman/phpstan-drupal:~0.12.8 --dev) - mv permissions_by_term drupal/web/modules/ + - (cd drupal && cp web/modules/permissions_by_term/tests/phpstan* . && vendor/bin/phpstan analyse web/modules/permissions_by_term/) - (cd drupal/web/modules/permissions_by_term/tests/ && ../../../../vendor/bin/phpunit --testdox) - (cd drupal/web/modules/permissions_by_term/js/ && npm install && npm run bat) - (cd drupal/web && ../vendor/drush/drush/drush si standard --db-url=mysql://root:testing@127.0.01/testing -y && ../vendor/drush/drush/drush en permissions_by_term -y) diff --git a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml index 7a062adba8183ac2ae0a38483cca708b38d84e40..1d734bb65cded0b19e687dab69553962681efd2c 100644 --- a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml +++ b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/permissions_by_entity.info.yml @@ -5,7 +5,7 @@ core: '8.x' dependencies: - permissions_by_term package: 'Permissions by Term (Experimental)' -# Information added by Drupal.org packaging script on 2021-02-02 -version: '8.x-2.29' +# Information added by Drupal.org packaging script on 2021-03-01 +version: '8.x-2.31' project: 'permissions_by_term' -datestamp: 1612278252 +datestamp: 1614602595 diff --git a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml index 1c20b829740d0e5b1e25b5d6e0af5862050017f9..e774b46db63a393d3d2d35f4b0302402d1b3dbd3 100644 --- a/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml +++ b/web/modules/contrib/permissions_by_term/modules/permissions_by_entity/tests/modules/pbt_entity_test/pbt_entity_test.info.yml @@ -4,7 +4,7 @@ description: 'Permissions by term - Entity test module' core: 8.x package: Testing -# Information added by Drupal.org packaging script on 2021-02-02 -version: '8.x-2.29' +# Information added by Drupal.org packaging script on 2021-03-01 +version: '8.x-2.31' project: 'permissions_by_term' -datestamp: 1612278252 +datestamp: 1614602595 diff --git a/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml b/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml index dcda14f387cfea9386cbcb43b3ed81b0ec1bd9d3..2ccf7ff79dc561a2d49eb240f9f48acc15ebbc22 100644 --- a/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml +++ b/web/modules/contrib/permissions_by_term/permissions_by_term.info.yml @@ -6,11 +6,11 @@ dependencies: - 'drupal:taxonomy' type: module core: '8.x' -# version: '8.x-2.28' +# version: '8.x-2.31' package: 'Permissions by Term' configure: permissions_by_term.settings -# Information added by Drupal.org packaging script on 2021-02-02 -version: '8.x-2.29' +# Information added by Drupal.org packaging script on 2021-03-01 +version: '8.x-2.31' project: 'permissions_by_term' -datestamp: 1612278252 +datestamp: 1614602595 diff --git a/web/modules/contrib/permissions_by_term/permissions_by_term.install b/web/modules/contrib/permissions_by_term/permissions_by_term.install index 5387c1af87ba8a25cb84b8b8e3db6d9a3ffe6d84..5ed22234a57afee05a5ae3fa02ec0787d89eb3d0 100644 --- a/web/modules/contrib/permissions_by_term/permissions_by_term.install +++ b/web/modules/contrib/permissions_by_term/permissions_by_term.install @@ -18,25 +18,28 @@ function permissions_by_term_schema() { // Specifications for tabe 'permissions_by_term_user'. $schema['permissions_by_term_user'] = [ 'description' => "Stores the tid's to which a user has permission by his uid.", - 'fields' => [ - 'tid' => [ - 'type' => 'int', + 'fields' => [ + 'tid' => [ + 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, ], - 'uid' => [ - 'type' => 'int', + 'uid' => [ + 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, ], - 'langcode' => [ - 'type' => 'varchar_ascii', - 'length' => 12, + 'langcode' => [ + 'type' => 'varchar_ascii', + 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => '', ], ], - 'primary key' => [ + 'primary key' => [ + 'tid', + 'uid', + 'langcode', ], ]; @@ -62,11 +65,13 @@ function permissions_by_term_schema() { ], ], 'primary key' => [ + 'tid', + 'rid', + 'langcode', ], ]; return $schema; - } /** @@ -204,3 +209,16 @@ function permissions_by_term_update_8153() { $schema->dropPrimaryKey('permissions_by_term_role'); $schema->dropPrimaryKey('permissions_by_term_user'); } + +/** + * Add composite primary key via unique table column combinations. + */ +function permissions_by_term_update_8230() { + $database = \Drupal::database(); + $schema = $database->schema(); + + $schema->dropPrimaryKey('permissions_by_term_role'); + $schema->addPrimaryKey('permissions_by_term_role', ['tid', 'rid', 'langcode']); + $schema->dropPrimaryKey('permissions_by_term_user'); + $schema->addPrimaryKey('permissions_by_term_user', ['tid', 'uid', 'langcode']); +} diff --git a/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php b/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php index 2b80be2ae13c22be17bc9aa8a83bf5aad0b1ee16..398edb046dc532343a9a904840dd1ced221f6446 100644 --- a/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php +++ b/web/modules/contrib/permissions_by_term/src/Event/PermissionsByTermDeniedEvent.php @@ -33,4 +33,4 @@ public function getNid() { return $this->nid; } -} \ No newline at end of file +} diff --git a/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php b/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php index 8491b03b0493deec8c20541245917befdca81753..ca2f22e01b3b82c6edec3f33cb51f99fcb9b4324 100644 --- a/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php +++ b/web/modules/contrib/permissions_by_term/src/Service/NodeAccess.php @@ -288,14 +288,8 @@ public static function rebuildNodeAccessOne($nid) { return 'Processed node ' . $nid; } - /** - * Rebuild permissions by term records only. - * - * @param $uid|NULL - * The user ID to which changes are scoped. - */ - public function rebuildAccess($uid = NULL) { - $nids = $this->getNidsForAccessRebuild($uid); + public function rebuildAccess(): void { + $nids = $this->getNidsForAccessRebuild(); if (count($nids) > 50) { $operations = array_map(function($id) { diff --git a/web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon b/web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon new file mode 100644 index 0000000000000000000000000000000000000000..49fe8f1f5695c1e49a1a5bf65ccfaec9631baaf6 --- /dev/null +++ b/web/modules/contrib/permissions_by_term/tests/phpstan-baseline.neon @@ -0,0 +1,72 @@ +parameters: + ignoreErrors: + - + message: "#^Unsafe usage of new static\\(\\)\\.$#" + count: 1 + path: web/modules/permissions_by_term/src/Controller/NodeEntityBundleController.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 3 + path: web/modules/permissions_by_term/src/Controller/NodeEntityBundleController.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 1 + path: web/modules/permissions_by_term/src/Controller/PermissionsByTermController.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 1 + path: web/modules/permissions_by_term/src/Factory/NodeAccessRecordFactory.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 8 + path: web/modules/permissions_by_term/src/Form/SettingsForm.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 8 + path: web/modules/permissions_by_term/src/Listener/KernelEventListener.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 8 + path: web/modules/permissions_by_term/src/Service/AccessCheck.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 6 + path: web/modules/permissions_by_term/src/Service/AccessStorage.php + + - + message: "#^Access to an undefined property Drupal\\\\permissions_by_term\\\\Service\\\\NodeAccess\\:\\:\\$nodeAccessRecordFactory\\.$#" + count: 2 + path: web/modules/permissions_by_term/src/Service/NodeAccess.php + + - + message: "#^Access to an undefined property Drupal\\\\permissions_by_term\\\\Service\\\\NodeAccess\\:\\:\\$grants\\.$#" + count: 1 + path: web/modules/permissions_by_term/src/Service/NodeAccess.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 1 + path: web/modules/permissions_by_term/src/Service/NodeAccess.php + + - + message: "#^\\\\Drupal calls should be avoided in classes, use dependency injection instead$#" + count: 10 + path: web/modules/permissions_by_term/tests/src/Behat/Context/PermissionsByTermContext.php + + - + message: "#^Instantiated class Drupal\\\\Tests\\\\permissions_by_term\\\\Behat\\\\Context\\\\ResponseTextException not found\\.$#" + count: 2 + path: web/modules/permissions_by_term/tests/src/Behat/Context/PermissionsByTermContext.php + + - + message: "#^Caught class Drupal\\\\Tests\\\\permissions_by_term\\\\Behat\\\\Context\\\\StaleElementReference not found\\.$#" + count: 1 + path: web/modules/permissions_by_term/tests/src/Behat/Context/PermissionsByTermContext.php + diff --git a/web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist b/web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist new file mode 100644 index 0000000000000000000000000000000000000000..7b22446f42f0736df66797c6284c9809996497e9 --- /dev/null +++ b/web/modules/contrib/permissions_by_term/tests/phpstan.neon.dist @@ -0,0 +1,8 @@ +includes: + - phpstan-baseline.neon +parameters: + level: 1 + paths: + - web/modules/permissions_by_term + excludes_analyse: + - tests/*.php diff --git a/web/modules/contrib/require_login/README.md b/web/modules/contrib/require_login/README.md deleted file mode 100644 index e3c7f873edde874a89bd30d16d4bc2670cc32263..0000000000000000000000000000000000000000 --- a/web/modules/contrib/require_login/README.md +++ /dev/null @@ -1,23 +0,0 @@ -#Require Login - -Require login authentication regardless of user permissions. - -##Features - -* Instantly require login to access any page -* Change default login and destination paths -* Exclude specific paths from login requirement -* Allow 403 (access denied) or 404 (not found) access -* Configure or disable access denied warning - -##Installation - -1. Download and install the module -2. Set "Administer login requirement" permission to appropriate roles -3. Configure the module: Admin > Config > People > Require login - -**403 (access denied) OR 404 (not found) page access:** - -You may want anonymous users to have view access on default or custom 403/404 pages. There's a special configuration -for just that. On the module configuration page open the "Advanced settings" section. Now check the desired exclude -boxes to enable access on that respective 403/404 page. All done! \ No newline at end of file diff --git a/web/modules/contrib/require_login/config/install/require_login.config.yml b/web/modules/contrib/require_login/config/install/require_login.config.yml index ea3d3ef779a3d491cc123df1f82d97a21dc09182..24ee71a282d32e746dc22f4f21946c979c911553 100644 --- a/web/modules/contrib/require_login/config/install/require_login.config.yml +++ b/web/modules/contrib/require_login/config/install/require_login.config.yml @@ -3,4 +3,12 @@ destination_path: '' deny_message: 'You must login to view this page.' excluded_403: true excluded_404: true -excluded_paths: '/user/login' \ No newline at end of file +excluded_paths: '' +excluded_routes: | + simplesamlphp_auth.saml_login + samlauth.saml_controller_login + samlauth.saml_controller_logout + samlauth.saml_controller_metadata + samlauth.saml_controller_acs + samlauth.saml_controller_sls + samlauth.saml_controller_changepw diff --git a/web/modules/contrib/require_login/config/schema/require_login.schema.yml b/web/modules/contrib/require_login/config/schema/require_login.schema.yml index d69728d31e4a3c1c4a7317350d4e2b73b2fcf3cb..e45f5699ccbd2cfc540d7ac0f89c81c73c4c1c2e 100644 --- a/web/modules/contrib/require_login/config/schema/require_login.schema.yml +++ b/web/modules/contrib/require_login/config/schema/require_login.schema.yml @@ -1,22 +1,33 @@ require_login.config: type: config_object - label: 'Require login' + label: 'Require Login' mapping: auth_path: type: text - label: 'Login path' + label: 'Login form path' destination_path: type: text - label: 'Destination path' + label: 'Login destination path' deny_message: type: text label: 'Access denied message' excluded_403: type: boolean - label: 'Excluded 403 page' + label: 'Exclude 403 (access denied) page' excluded_404: type: boolean - label: 'Excluded 404 page' + label: 'Exclude 404 (not found) page' excluded_paths: type: text - label: 'Excluded paths' \ No newline at end of file + label: 'Excluded paths' + excluded_node_types: + type: config_object + mapping: + type: require_login.node_type + excluded_routes: + type: text + label: 'Excluded route names' + +require_login.node_type: + type: string + label: 'Content Type' diff --git a/web/modules/contrib/require_login/require_login.api.php b/web/modules/contrib/require_login/require_login.api.php index c55be4a9693c1c2f4f73c5b7cf4fd1ce1d3cff64..83994d3549b7f0685919f8a01a9b4a9c3cafce81 100644 --- a/web/modules/contrib/require_login/require_login.api.php +++ b/web/modules/contrib/require_login/require_login.api.php @@ -2,20 +2,18 @@ /** * @file - * Documentation for require login API. + * Hooks for the require_login module. */ /** - * Alter login requirement checks. The $checks variable is a non-associative - * array containing only boolean values. Login will be required if $checks - * includes at least one TRUE boolean. + * Alter default authentication checks. * - * @param array &$checks - * Boolean check values. + * @param array &$default_checks + * An array of boolean values indicating authentication status. */ -function hook_require_login_authcheck_alter(&$checks) { - $variable_1 = $variable_2 = 'hello-world'; +function hook_require_login_authcheck_alter(array &$default_checks) { + $var1 = $var2 = 'some-value'; - // Allow access if $variable_1 equals $variable_2. - $checks[] = ($variable_1 == $variable_2); -} \ No newline at end of file + // If $var1 equals $var2 then allow unauthenticated access. + $default_checks[] = ($var1 == $var2); +} diff --git a/web/modules/contrib/require_login/require_login.config_translation.yml b/web/modules/contrib/require_login/require_login.config_translation.yml index 6d2431cbcbc8a4b0bc96d319756dcddf8b85b422..8a176565623044b8232cb31093b2ac1b1049299d 100644 --- a/web/modules/contrib/require_login/require_login.config_translation.yml +++ b/web/modules/contrib/require_login/require_login.config_translation.yml @@ -1,5 +1,5 @@ require_login.admin: - title: 'Require login' + title: 'Require Login' base_route_name: require_login.admin names: - require_login.config diff --git a/web/modules/contrib/require_login/require_login.info.yml b/web/modules/contrib/require_login/require_login.info.yml index eda9a60ba75d8449dea39310a9233f82b1de1cdc..528152e27b6870eea37c4e90cf0f15a387c63dd4 100644 --- a/web/modules/contrib/require_login/require_login.info.yml +++ b/web/modules/contrib/require_login/require_login.info.yml @@ -1,11 +1,14 @@ -name: 'Require login' -description: 'Require login authentication regardless of user permissions.' +name: 'Require Login' +description: 'Provides catch-all solution to require user authentication on pages.' type: module -# core: 8.x +core: 8.x +core_version_requirement: ^8 || ^9 configure: require_login.admin +dependencies: + - drupal:user + - drupal:node -# Information added by Drupal.org packaging script on 2019-03-02 -version: '8.x-2.1' -core: '8.x' +# Information added by Drupal.org packaging script on 2021-03-11 +version: '8.x-2.4' project: 'require_login' -datestamp: 1551549491 +datestamp: 1615474750 diff --git a/web/modules/contrib/require_login/require_login.install b/web/modules/contrib/require_login/require_login.install index a10602131aed124e3664a64f562750d0ca8a3e01..9323bf4530e64524ae7284f3449020bb6932955f 100644 --- a/web/modules/contrib/require_login/require_login.install +++ b/web/modules/contrib/require_login/require_login.install @@ -2,26 +2,43 @@ /** * @file - * require_login.install + * Install, update and uninstall functions for the require_login module. */ /** * Implements hook_install(). */ function require_login_install() { + // Run require_login before other modules. module_set_weight('require_login', -1000); } /** - * Rebuild cache. + * Flush cache. */ function require_login_update_8101() { - // Empty update to cause a cache rebuild. + // Empty update to trigger cache flush. } /** - * Rebuild cache. + * Flush cache. */ function require_login_update_8102() { - // Empty update to cause a cache rebuild. -} \ No newline at end of file + // Empty update to trigger cache flush. +} + +/** + * Add defaults to the excluded routes configuration. + */ +function require_login_update_8103() { + $config_factory = Drupal::configFactory(); + $config = $config_factory->getEditable('require_login.config'); + $config->set('excluded_routes', 'simplesamlphp_auth.saml_login +samlauth.saml_controller_login +samlauth.saml_controller_logout +samlauth.saml_controller_metadata +samlauth.saml_controller_acs +samlauth.saml_controller_sls +samlauth.saml_controller_changepw'); + $config->save(TRUE); +} diff --git a/web/modules/contrib/require_login/require_login.links.menu.yml b/web/modules/contrib/require_login/require_login.links.menu.yml index 8c96569069c9e2fc3c878df77f17b2cc318555a0..fb4252272967ad778c7ca66a4f7aa09938b15935 100644 --- a/web/modules/contrib/require_login/require_login.links.menu.yml +++ b/web/modules/contrib/require_login/require_login.links.menu.yml @@ -1,5 +1,5 @@ system.require_login: title: 'Require login' - description: 'Configure site-wide login requirement settings.' + description: 'Configure user authentication settings.' parent: user.admin_index route_name: require_login.admin diff --git a/web/modules/contrib/require_login/require_login.links.task.yml b/web/modules/contrib/require_login/require_login.links.task.yml index 46da510987f1bc0ebf4ef17afae0522d6e967417..98128b6b369f79207943f268dd51fc64aac37803 100644 --- a/web/modules/contrib/require_login/require_login.links.task.yml +++ b/web/modules/contrib/require_login/require_login.links.task.yml @@ -1,4 +1,4 @@ require_login.admin: route_name: require_login.admin title: 'Settings' - base_route: require_login.admin \ No newline at end of file + base_route: require_login.admin diff --git a/web/modules/contrib/require_login/require_login.module b/web/modules/contrib/require_login/require_login.module index 6424f03aba42ade0930a8ca14b41c218ec7c0844..58f9290f8a498c9b05104958b264a9693c0c3a56 100644 --- a/web/modules/contrib/require_login/require_login.module +++ b/web/modules/contrib/require_login/require_login.module @@ -2,7 +2,7 @@ /** * @file - * This is the Require login module for enforcing authentication. + * Hook implementations for the require_login module. */ use Drupal\Core\Routing\RouteMatchInterface; @@ -13,24 +13,22 @@ function require_login_help($route_name, RouteMatchInterface $route_match) { switch ($route_name) { case 'help.page.require_login': - $output = '<h3>' . t('About') . '</h3>'; - $output .= '<p>' . t('Require login authentication regardless of user permissions.') . '</p>'; + $output = '<p>' . t('Provides catch-all solution to require user authentication on pages.') . '</p>'; $output .= '<h3>' . t('Features') . '</h3>'; $output .= '<dl>'; - $output .= ' <dt>' . t('Instantly require login to access any page') . '</dt>'; - $output .= ' <dt>' . t('Change default login and destination paths') . '</dt>'; - $output .= ' <dt>' . t('Exclude specific paths from login requirement') . '</dt>'; - $output .= ' <dt>' . t('Allow 403 (access denied) or 404 (not found) access') . '</dt>'; - $output .= ' <dt>' . t('Configure or disable access denied warning') . '</dt>'; + $output .= ' <dt>' . t('Enforce user authentication for any or all pages.') . '</dt>'; + $output .= ' <dt>' . t('Change the default user login path (/user/login).') . '</dt>'; + $output .= ' <dt>' . t('Exclude content types, paths, or router names as needed.') . '</dt>'; + $output .= ' <dt>' . t('Configure access to 403 (access denied) and (404) not found pages.') . '</dt>'; + $output .= ' <dt>' . t('Translatable access denied message seen by anonymous users.') . '</dt>'; + $output .= ' <dt>' . t('Fully translatable configuration for per-language exclusions.') . '</dt>'; $output .= '</dl>'; - $output .= '<h3>' . t('Installation') . '</h3>'; + $output .= '<h3>' . t('Usage') . '</h3>'; $output .= '<dl>'; - $output .= ' <dt>' . t('Download and install the module') . '</dt>'; - $output .= ' <dt>' . t('Set "Administer login requirement" permission to appropriate roles') . '</dt>'; - $output .= ' <dt>' . t('Configure the module: Admin > Config > People > Require login') . '</dt>'; + $output .= ' <dt>' . t('Install the module.') . '</dt>'; + $output .= ' <dt>' . t('Set permissions: /admin/people/permissions#module-require_login') . '</dt>'; + $output .= ' <dt>' . t('Configure settings: /admin/config/people/require-login') . '</dt>'; $output .= '</dl>'; - $output .= '<strong>' . t('403 (access denied) OR 404 (not found) page access:') . '</strong>'; - $output .= '<p>' . t('You may want anonymous users to have view access to default or custom 403/404 pages. There\'s a special configuration for just that. On the module configuration page open the "Advanced settings" section. Now check the desired exclude boxes to enable access on that respective 403/404 page. All done!') . '</p>'; return $output; } return NULL; diff --git a/web/modules/contrib/require_login/require_login.permissions.yml b/web/modules/contrib/require_login/require_login.permissions.yml index 3fe405aa34646cf10d0692aa2b66ed11ef6dd65c..b8e048c857a9cf9d548bedcfb57ca1297793a779 100644 --- a/web/modules/contrib/require_login/require_login.permissions.yml +++ b/web/modules/contrib/require_login/require_login.permissions.yml @@ -1,3 +1,3 @@ administer require login: - title: 'Administer login requirement' - description: 'Configure site-wide login requirement settings.' + title: 'Administer user authentication requirements' + restrict access: true diff --git a/web/modules/contrib/require_login/require_login.services.yml b/web/modules/contrib/require_login/require_login.services.yml index 1ed826db0dfc16f0a747e2d80c8e1439464274f6..2e9089ff41f16942ffd34bba80f3f2ee2029b9b2 100644 --- a/web/modules/contrib/require_login/require_login.services.yml +++ b/web/modules/contrib/require_login/require_login.services.yml @@ -1,6 +1,6 @@ services: require_login.request_subscriber: class: Drupal\require_login\EventSubscriber\RequireLoginSubscriber - arguments: ['@module_handler', '@config.factory', '@request_stack', '@current_user', '@path.matcher', '@messenger'] + arguments: ['@module_handler', '@config.factory', '@request_stack', '@current_user', '@messenger', '@path.matcher', '@path.current', '@path_alias.manager', '@current_route_match'] tags: - {name: event_subscriber} diff --git a/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php b/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php index f91ad8ce9ddc915f073c3a82ccc38428de9079bf..344a7df801670e8f1595cee5062b110d6b156482 100644 --- a/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php +++ b/web/modules/contrib/require_login/src/EventSubscriber/RequireLoginSubscriber.php @@ -2,18 +2,25 @@ namespace Drupal\require_login\EventSubscriber; +use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; +use Drupal\Core\Path\CurrentPathStack; use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Config\ImmutableConfig; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Path\PathMatcher; use Drupal\Core\Session\AccountProxyInterface; -use Symfony\Component\Debug\Exception\FlattenException; +use Drupal\Component\Utility\UrlHelper; +use Drupal\path_alias\AliasManager; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\Routing\Route; /** * Login requirement. @@ -21,9 +28,11 @@ class RequireLoginSubscriber implements EventSubscriberInterface { /** - * The request exception boolean. + * The event exception boolean. + * + * @var bool */ - protected $requestException; + protected $eventException; /** * The module handler. @@ -54,7 +63,7 @@ class RequireLoginSubscriber implements EventSubscriberInterface { protected $accountProxy; /** - * The path matcher under test. + * The path matcher. * * @var \Drupal\Core\Path\PathMatcher */ @@ -67,6 +76,27 @@ class RequireLoginSubscriber implements EventSubscriberInterface { */ protected $messenger; + /** + * The current path stack. + * + * @var \Drupal\Core\Path\CurrentPathStack + */ + protected $currentPath; + + /** + * The path alias manager. + * + * @var \Drupal\path_alias\AliasManager + */ + protected $aliasManager; + + /** + * The route match. + * + * @var \Drupal\Core\Routing\RouteMatchInterface + */ + protected $routeMatch; + /** * Class constructor. * @@ -78,22 +108,32 @@ class RequireLoginSubscriber implements EventSubscriberInterface { * The request stack. * @param \Drupal\Core\Session\AccountProxyInterface $account_proxy * The account proxy. - * @param \Drupal\Core\Path\PathMatcher $path_matcher - * The path matcher. * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger. + * @param \Drupal\Core\Path\PathMatcher $path_matcher + * The path matcher. + * @param \Drupal\Core\Path\CurrentPathStack $current_path + * The current path stack. + * @param \Drupal\path_alias\AliasManager $alias_manager + * The path alias manager. + * @param \Drupal\Core\Routing\RouteMatchInterface $route_match + * The route match. */ - public function __construct(ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, RequestStack $request_stack, AccountProxyInterface $account_proxy, PathMatcher $path_matcher, MessengerInterface $messenger) { + public function __construct(ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, RequestStack $request_stack, AccountProxyInterface $account_proxy, MessengerInterface $messenger, PathMatcher $path_matcher, CurrentPathStack $current_path, AliasManager $alias_manager, RouteMatchInterface $route_match) { + $this->eventException = FALSE; $this->moduleHandler = $module_handler; $this->configFactory = $config_factory; $this->requestStack = $request_stack; $this->accountProxy = $account_proxy; - $this->pathMatcher = $path_matcher; $this->messenger = $messenger; + $this->pathMatcher = $path_matcher; + $this->currentPath = $current_path; + $this->aliasManager = $alias_manager; + $this->routeMatch = $route_match; } /** - * Check login requirement for current request. + * Check login authentication enforcement for current request. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The event response. @@ -102,16 +142,14 @@ public function __construct(ModuleHandlerInterface $module_handler, ConfigFactor * @param \Symfony\Component\HttpFoundation\Request $request * The HTTP request. * - * @return boolean - * Return FALSE if login not required. TRUE otherwise. + * @return bool + * Return FALSE if authentication isn't required. Otherwise TRUE. */ - private function checkLogin($event, $config, $request) { - $route_name = $request->get('_route'); - - // Check 403/404 page exclusions. - if ($event instanceof \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent) { - $exception = FlattenException::create($event->getException()); - + private function checkLogin(GetResponseEvent $event, ImmutableConfig $config, Request $request) { + // Check event exception status codes. + if ($event instanceof GetResponseForExceptionEvent) { + /** @var \Symfony\Component\HttpKernel\Exception\HttpException $exception */ + $exception = $event->getException(); switch ($exception->getStatusCode()) { case '403': if ($config->get('excluded_403')) { @@ -127,78 +165,114 @@ private function checkLogin($event, $config, $request) { } } - // Check path exclusions. - $excluded_paths = explode(PHP_EOL, $config->get('excluded_paths')); - $excluded_paths[] = $config->get('auth_path'); + /** @var \Symfony\Component\Routing\Route $route */ + $route = $request->get('_route_object'); - if ($this->pathMatcher->matchPath($request->getRequestUri(), implode(PHP_EOL, $excluded_paths))) { + // Default authentication exclusions. + if ($route instanceof Route && $route->hasRequirement('_user_is_logged_in') && $route->getRequirement('_user_is_logged_in') === 'FALSE') { return FALSE; } - - // Standard login requirement checks. - $checks = [ - // Check user session. - ($this->accountProxy->getAccount()->id() > 0), - // Check system.cron (/cron.php). - ($route_name == 'system.cron'), - // Check system.db_update (/update.php). - ($route_name == 'system.db_update'), - // Check user.* (/user/*). - ($route_name == 'user.login' || $route_name == 'user.register' || $route_name == 'user.pass' || substr($route_name, 0, 10) === 'user.reset'), - // Check Drush. - (function_exists('drupal_is_cli') && drupal_is_cli()), - // Check samlauth routes. - (preg_match('/^samlauth./i', $route_name) && $route_name != 'samlauth.samlauth_configure_form'), - // Check simplesamlphp_auth routes. - ($route_name == 'simplesamlphp_auth.saml_login'), + $route_name = $request->get('_route'); + $default_checks = [ + // Check if CLI environment. + (PHP_SAPI === 'cli'), + // Check system.cron route. + ($route_name === 'system.cron'), + // Check system.db_update route (/update.php). + ($route_name === 'system.db_update'), + // Check user.* routes (/user/*). + ($route_name === 'user.register' || $route_name === 'user.pass' || substr($route_name, 0, 10) === 'user.reset'), + // Check image.style_* routes. + ($route_name === 'image.style_public' || $route_name === 'image.style_private'), ]; - // Allow modules to alter $checks variable. - $this->moduleHandler->alter('require_login_authcheck', $checks); + $this->moduleHandler->alter('require_login_authcheck', $default_checks); + if (in_array(TRUE, $default_checks)) { + return FALSE; + } + + // Configurable route name exclusions. + $excluded_routes = array_filter(preg_split('/\r\n|\r|\n/', $config->get('excluded_routes'))); + if (in_array($route_name, $excluded_routes)) { + return FALSE; + } - foreach ($checks as $check) { - if ($check) { + // Configurable node type exclusions. + if ($route_name === 'entity.node.canonical' && ($node_types = $config->get('excluded_node_types'))) { + if (($node = $this->routeMatch->getParameter('node')) && in_array($node->bundle(), $node_types, TRUE)) { return FALSE; } } + + // Configurable path exclusions. + $current_path = $this->currentPath->getPath($request); + $current_path_alias = $this->aliasManager->getAliasByPath($current_path); + $current_path_parameters = $request->query->all(); + $excluded_paths = array_filter(preg_split('/\r\n|\r|\n/', $config->get('excluded_paths'))); + $excluded_paths[] = $config->get('auth_path'); + + foreach ($excluded_paths as $path) { + $path = trim($path); + $path_parts = UrlHelper::parse($path); + $path_parts['path'] = mb_strtolower($path_parts['path']); + $current_checks = [ + ($this->pathMatcher->matchPath($current_path, $path_parts['path'])), + ($this->pathMatcher->matchPath($current_path_alias, $path_parts['path'])), + ]; + if (!empty($path_parts['query'])) { + if (in_array(TRUE, $current_checks)) { + // Path matched an exclusion. Now check for matching query parameters. + if (count(array_intersect($current_path_parameters, $path_parts['query'])) === count($path_parts['query'])) { + return FALSE; + } + } + } + elseif (in_array(TRUE, $current_checks)) { + // Path matched an exclusion. No query parameters to check. + return FALSE; + } + } + return TRUE; } /** - * Prepare redirect response. + * Prepare login redirect response. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The event response. * * @return string|null - * Redirect URL including query string. + * The redirect URL. */ - private function prepareLoginRedirect($event) { + private function loginRedirect(GetResponseEvent $event) { + if ($this->accountProxy->getAccount()->isAuthenticated()) { + // Stop if user is authenticated. + return NULL; + } $config = $this->configFactory->get('require_login.config'); $request = $this->requestStack->getCurrentRequest(); if ($this->checkLogin($event, $config, $request)) { - - // Access denied warning message. + // Show access denied warning message. if ($message = $config->get('deny_message')) { $messenger = $this->messenger; $messenger->addMessage($message, $messenger::TYPE_WARNING); } - // Login form redirect path. + // Prepare login and destination paths. if ($auth_path = $config->get('auth_path')) { - $redirectPath = "internal:{$auth_path}"; + $redirect_path = "internal:{$auth_path}"; } else { - $redirectPath = 'internal:/user/login'; + $redirect_path = 'internal:/user/login'; } - - // Login destination redirect path. - if (!($destination = $config->get('destination_path'))) { + if (empty($destination = $config->get('destination_path'))) { $destination = $request->getRequestUri(); } - - return Url::fromUri($redirectPath, ['query' => ['destination' => $destination]])->toString(); + return Url::fromUri($redirect_path, ['query' => ['destination' => $destination]]) + ->toString(); } + return NULL; } @@ -209,13 +283,11 @@ private function prepareLoginRedirect($event) { * The event response. */ public function exceptionRedirect(GetResponseEvent $event) { + // Boolean indicating event exception. Prevents potential infinite + // redirect loop on KernelEvents::REQUEST. + $this->eventException = TRUE; - // Boolean to indicate request exception. Prevents additional login - // requirement checks on KernelEvents::REQUEST which could cause - // infinite loop redirects on protected pages. - $this->requestException = TRUE; - - if ($redirect = $this->prepareLoginRedirect($event)) { + if ($redirect = $this->loginRedirect($event)) { $response = new RedirectResponse($redirect); $event->setResponse($response); } @@ -228,7 +300,7 @@ public function exceptionRedirect(GetResponseEvent $event) { * The event response. */ public function requestRedirect(GetResponseEvent $event) { - if (!$this->requestException && ($redirect = $this->prepareLoginRedirect($event))) { + if (!$this->eventException && ($redirect = $this->loginRedirect($event))) { $response = new RedirectResponse($redirect); $event->setResponse($response); } diff --git a/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php b/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php index 14d0fe68a262b839bfd032a18eb9caafa10fd08a..094723a5b3475dc3a343a9b97ce6fa96701e671f 100644 --- a/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php +++ b/web/modules/contrib/require_login/src/Form/RequireLoginSettingsForm.php @@ -4,12 +4,41 @@ use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Routing\RouteProvider; +use Drupal\Component\Utility\UrlHelper; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Configure Require Login settings for this site. */ class RequireLoginSettingsForm extends ConfigFormBase { + /** + * The routing provider. + * + * @var \Drupal\Core\Routing\RouteProvider + */ + protected $routeProvider; + + /** + * {@inheritdoc} + */ + public function __construct(ConfigFactoryInterface $config_factory, RouteProvider $route_provider) { + parent::__construct($config_factory); + $this->routeProvider = $route_provider; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('config.factory'), + $container->get('router.route_provider') + ); + } + /** * {@inheritdoc} */ @@ -30,29 +59,52 @@ protected function getEditableConfigNames() { public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('require_login.config'); - // Login and destination paths. - $form['require_login_auth_path'] = [ + // Basic settings. + $form['auth_path'] = [ '#type' => 'textfield', - '#title' => $this->t('Login form path'), - '#description' => $this->t('Login path. Default is /user/login.'), - '#default_value' => $config->get('auth_path') ? $config->get('auth_path') : 'user/login', + '#title' => $this->t('Login path'), + '#description' => $this->t('Path to the user login page. Default: /user/login'), + '#default_value' => $config->get('auth_path') ? $config->get('auth_path') : '/user/login', ]; - $form['require_login_destination_path'] = [ + $form['destination_path'] = [ '#type' => 'textfield', - '#title' => $this->t('Login destination path'), - '#description' => $this->t('Login destination path. Leave blank to use default referer path.'), + '#title' => $this->t('Login destination'), + '#description' => $this->t('Predetermined post-login destination path. Leave blank for the default behavior.'), '#default_value' => $config->get('destination_path'), ]; - - // Access denied message. - $form['require_login_deny_message'] = [ + $form['deny_message'] = [ '#type' => 'textarea', '#title' => $this->t('Access denied message'), - '#description' => $this->t('Message shown to anonymous users attempting to access a restricted page. Leave blank to disable.'), + '#description' => $this->t('Show message to user attempting to access a restricted page. Leave blank to disable.'), '#default_value' => $config->get('deny_message'), ]; + $items = [ + '#theme' => 'item_list', + '#prefix' => $this->t('Exclude authentication checks on specific paths. <strong>Limit one path per line.</strong>'), + '#items' => [ + $this->t('Use <front> to exclude the front page.'), + $this->t('Use internal paths to exclude site pages. <em>I.E. /about/contact</em>'), + $this->t('Use URL parameters to further refine path matches. <em>I.E. /blog?year=current</em>'), + $this->t('Use wildcards (*) to match any part of a path. <em>I.E. /shop/*/orders</em>'), + ], + ]; + $form['excluded_paths'] = [ + '#type' => 'textarea', + '#title' => $this->t('Excluded paths'), + '#description' => render($items), + '#default_value' => $config->get('excluded_paths'), + ]; + $node_types = $config->get('excluded_node_types'); + $form['excluded_node_types'] = [ + '#type' => 'checkboxes', + '#title' => $this->t('Excluded content types'), + '#description' => $this->t('Exclude authentication checks on all pages of a specific content type.'), + '#options' => node_type_get_names(), + '#multiple' => TRUE, + '#default_value' => $node_types ? $node_types : [], + ]; - // Excluded exceptions and paths. + // Additional settings. $form['advanced'] = [ '#type' => 'details', '#title' => $this->t('Advanced settings'), @@ -60,91 +112,111 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['advanced']['excluded_403'] = [ '#type' => 'checkbox', '#title' => $this->t('Exclude 403 (access denied) page'), - '#description' => $this->t('Allow anonymous users to view the 403 (access denied) page.'), + '#description' => $this->t('Allow unauthenticated access to the 403 (access denied) page.'), '#default_value' => $config->get('excluded_403'), ]; $form['advanced']['excluded_404'] = [ '#type' => 'checkbox', '#title' => $this->t('Exclude 404 (not found) page'), - '#description' => $this->t('Allow anonymous users to view the 404 (not found) page.'), + '#description' => $this->t('Allow unauthenticated access to the 404 (not found) page.'), '#default_value' => $config->get('excluded_404'), ]; - $items = [ - '#theme' => 'item_list', - '#prefix' => $this->t('Disable login requirement on specific paths. <strong>Limit one per line.</strong>'), - '#items' => [ - $this->t('Use <front> to exclude the front page.'), - $this->t('Use internal paths to exclude site pages. <em>Examples: /about/contact, /blog?hello=world</em>'), - ], - ]; - $form['advanced']['require_login_excluded_paths'] = [ + $form['advanced']['excluded_routes'] = [ '#type' => 'textarea', - '#title' => $this->t('Path exclusions'), - '#description' => render($items), - '#default_value' => $config->get('excluded_paths'), + '#title' => $this->t('Excluded route names'), + '#description' => $this->t('Exclude authentication checks on specific route names. <strong>Limit one path per line.</strong>'), + '#default_value' => $config->get('excluded_routes'), ]; return parent::buildForm($form, $form_state); } /** - * {@inheritdoc} + * Process user inputted path. + * + * @var string &$path + * The path input. + * @var string $config_key + * The configuration key. + * @var \Drupal\Core\Form\FormStateInterface $form_state + * The form state. */ - public function validateForm(array &$form, FormStateInterface $form_state) { - $absolutes = []; - - // Validate excluded paths formatting. - $exclude_paths = explode(PHP_EOL, $form_state->getValue('require_login_excluded_paths')); - foreach ($exclude_paths as $key => $exclude_path) { - $exclude_path = trim($exclude_path); - if (empty($exclude_path) || $exclude_path == '<front>') { - continue; - } - $url = parse_url($exclude_path); - - // Detect protocol or domain name. - if (isset($url['scheme']) || isset($url['host']) || preg_match('/^www./i', $url['path'])) { - $absolutes[] = trim($exclude_path); - } + private function processPathInput(&$path, $config_key, FormStateInterface $form_state) { + $url_parts = parse_url(trim($path)); + // Verify path is valid. + if (!UrlHelper::isValid($url_parts['path'])) { + $form_state->setErrorByName($config_key, $this->t('Invalid path: %s', ['%s' => $path])); + return; + } + // Use parsed path in case user inputted schema and/or host. + $path = $url_parts['path']; + if (!empty($url_parts['query'])) { + $path .= '?' . $url_parts['query']; + } + // Prepend leading forward slash. + if (substr($path, 0, 1) !== '/') { + $path = '/' . $path; + } + } - // Confirm leading forward slash present. - elseif (substr($exclude_path, 0, 1) != '/') { - $exclude_paths[$key] = '/' . $exclude_path; - } + /** + * Array filter callback to remove empty elements. + * + * @var string $element + * The array element. + * + * @return bool + * TRUE if element should be removed. Otherwise FALSE. + */ + protected function arrayFilterEmpty($element) { + return !empty(trim($element)); + } - // Trim whitespace. - else { - $exclude_paths[$key] = $exclude_path; + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, FormStateInterface $form_state) { + // Validate login and destination paths. + $config_keys = [ + 'require_login_auth_path', + 'require_login_destination_path', + ]; + foreach ($config_keys as $config_key) { + if ($path = $form_state->getValue($config_key)) { + $this->processPathInput($path, $config_key, $form_state); + $form_state->setValue($config_key, $path); } } - $form_state->setValue('require_login_excluded_paths', implode(PHP_EOL, $exclude_paths)); - if ($absolutes) { - $form_state->setErrorByName('require_login_excluded_paths', $this->t("Excluded paths cannot include a protocol or domain name. Invalid paths:<br />!paths", [ - '!paths' => implode('<br />', $absolutes), - ])); + // Validate excluded paths. + $excluded_paths = preg_split('/\r\n|\r|\n/', $form_state->getValue('require_login_excluded_paths')); + $excluded_paths = array_filter($excluded_paths, [ + $this, + 'arrayFilterEmpty', + ]); + foreach ($excluded_paths as $key => $path) { + if (!empty($path) && $path !== '<front>') { + $this->processPathInput($path, 'require_login_excluded_paths', $form_state); + $excluded_paths[$key] = $path; + } } - - // Validate login and destination path formatting. - foreach (['require_login_auth_path', 'require_login_destination_path'] as $form_key) { - $path = trim($form_state->getValue($form_key)); - if (!empty($path)) { - $url = parse_url($path); - - // Detect protocol or domain name. - if (isset($url['scheme']) || isset($url['host']) || preg_match('/^www./i', $url['path'])) { - $form_state->setErrorByName($form_key, $this->t('External URL detected. Must enter a relative path.')); - } - - // Confirm leading forward slash present. - elseif (substr($path, 0, 1) != '/') { - $form_state->setValue($form_key, '/' . $path); - } - - // Trim whitespace. - else { - $form_state->setValue($form_key, $path); - } + $form_state->setValue('require_login_excluded_paths', implode(PHP_EOL, $excluded_paths)); + + // Validate excluded route names. + $excluded_routes = preg_split('/\r\n|\r|\n/', $form_state->getValue('require_login_excluded_routes')); + $excluded_routes = array_filter($excluded_routes, [ + $this, + 'arrayFilterEmpty', + ]); + if (!empty($excluded_routes)) { + $valid_route_names = $this->routeProvider->getRoutesByNames($excluded_routes); + if ($invalid_route_names = array_diff($excluded_routes, array_keys($valid_route_names))) { + $items = [ + '#theme' => 'item_list', + '#prefix' => $this->t('Missing route names detected. You may remove them if the related modules will not be installed.'), + '#items' => $invalid_route_names, + ]; + $this->messenger()->addWarning(render($items)); } } } @@ -154,15 +226,17 @@ public function validateForm(array &$form, FormStateInterface $form_state) { */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('require_login.config') - ->set('auth_path', $form_state->getValue('require_login_auth_path')) - ->set('destination_path', $form_state->getValue('require_login_destination_path')) - ->set('deny_message', $form_state->getValue('require_login_deny_message')) + ->set('auth_path', $form_state->getValue('auth_path')) + ->set('destination_path', $form_state->getValue('destination_path')) + ->set('deny_message', $form_state->getValue('deny_message')) ->set('excluded_403', $form_state->getValue('excluded_403')) ->set('excluded_404', $form_state->getValue('excluded_404')) - ->set('excluded_paths', $form_state->getValue('require_login_excluded_paths')) + ->set('excluded_paths', $form_state->getValue('excluded_paths')) + ->set('excluded_node_types', $form_state->getValue('excluded_node_types')) + ->set('excluded_routes', $form_state->getValue('excluded_routes')) ->save(); - // Must rebuild caches for settings to take immediate effect. + // Flush caches so changes take immediate effect. drupal_flush_all_caches(); parent::submitForm($form, $form_state); diff --git a/web/modules/contrib/webform/config/install/webform.webform.contact.yml b/web/modules/contrib/webform/config/install/webform.webform.contact.yml index 884cdf8c797ef88af3d6b071981bb9c190219cfd..62ae88f62e3ed18e2927353276c99c56f44063e3 100644 --- a/web/modules/contrib/webform/config/install/webform.webform.contact.yml +++ b/web/modules/contrib/webform/config/install/webform.webform.contact.yml @@ -40,7 +40,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send message' - + css: '' javascript: '' settings: @@ -231,7 +231,7 @@ handlers: settings: states: - completed - to_mail: '[webform_submission:values:email:raw]' + to_mail: '[current-user:mail]' to_options: { } cc_mail: '' cc_options: { } diff --git a/web/modules/contrib/webform/includes/webform.install.update.inc b/web/modules/contrib/webform/includes/webform.install.update.inc index d1bf53ab0c13bfd42d2544ec5ee641d90d1e5a48..485062e1ece4ae5fd8f1818f75b2733994ec3026 100644 --- a/web/modules/contrib/webform/includes/webform.install.update.inc +++ b/web/modules/contrib/webform/includes/webform.install.update.inc @@ -3916,3 +3916,29 @@ function webform_update_8209() { function webform_update_8210() { _webform_update_webform_settings(); } + +/** + * Issue #174151 Webform Contact Form - open mail relay. + */ +function webform_update_8211() { + $config_factory = \Drupal::configFactory(); + + $config = $config_factory->getEditable('webform.webform.contact'); + if (!$config) { + return; + } + + $to_mail = $config->get('handlers.email_confirmation.settings.to_mail'); + if ($to_mail === '[webform_submission:values:email:raw]') { + $config->set('handlers.email_confirmation.settings.to_mail', '[current-user:mail]'); + $config->save(); + + /** @var \Drupal\webform\WebformHelpManagerInterface $help_manager */ + $help_manager = \Drupal::service('webform.help_manager'); + $help_manager->addNotification('webform_update_8211', + t("<strong>ATTENTION!!!</strong> The default Contact webform, included with the Webform module, has been updated to send the confirmation email to an authenticated user's email address.") . + ' ' . t('<a href=":href">Learn more</a>', [':href' => 'https://www.drupal.org/project/webform/releases/8.x-5.25']), + 'warning' + ); + } +} diff --git a/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml b/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml index 348127145b581d6840b6ab17e83cc25e554203e1..67be134be7881bf20f4010154e2a8dc3d24b19dd 100644 --- a/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml +++ b/web/modules/contrib/webform/modules/webform_access/webform_access.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml b/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml index 62b4362fd4d262feb3beddf4b4069273985a757d..09d779c40a669d97f756f1270267f7e179fcb0dc 100644 --- a/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_attachment' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml b/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml index 5014b9ba9a3f1f412ab30820e5221bf4df8687d4..3812ccd4bf5fc6ddc5cdd3ca785b02dc326e1e67 100644 --- a/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml +++ b/web/modules/contrib/webform/modules/webform_attachment/webform_attachment.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml b/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml index bbdee0f3bd29bb2cac140fadd488705dede00499..2e0bea0c17e5278711cb3ffe40e84278a40c8ed8 100644 --- a/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml +++ b/web/modules/contrib/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform' - 'webform:webform_bootstrap' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml b/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml index 92cf24421970044723b220350959373f4d8b798b..ccab40979531658256b14aa604fa97b6f35b79fe 100644 --- a/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml +++ b/web/modules/contrib/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml @@ -22,7 +22,7 @@ regions: libraries: - 'webform_bootstrap_test_theme/global-styling' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml b/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml index 71130259ae37da478f3b34f8b640181f0fe72051..aff0488fd40a76ea40846748d063467bd41a4d89 100644 --- a/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml +++ b/web/modules/contrib/webform/modules/webform_bootstrap/webform_bootstrap.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml b/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml index 6e94cc4b2b5ee832c3cebbdba2bcd56ae421239a..3abf30fc279116bebf7c26f1b05e868febd8e912 100644 --- a/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_cards' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml b/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml index 6444b60e48d50c3adcce5c4a03d03822ef99c729..d2c105a8f6e72dfd96593dc0f99b8a6f5b732f1c 100644 --- a/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml +++ b/web/modules/contrib/webform/modules/webform_cards/webform_cards.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform_clientside_validation' - 'drupal:inline_form_errors' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml b/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml index 7eec94a721138c28e91df9060802a62e6bf6b78c..86324868a988f995f61686030b1b8c13d091b87a 100644 --- a/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_clientside_validation' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml b/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml index 0134648170642d867ea1a911f8121e0909931111..0da9ff997a845ed4241bd1a8d7f8bc08cec7a347 100644 --- a/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml +++ b/web/modules/contrib/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml @@ -8,7 +8,7 @@ dependencies: - 'clientside_validation:clientside_validation' - 'clientside_validation:clientside_validation_jquery' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml index 8ff6f48116dd57a389f552c1b5620d4fb14f4998..8202296a14e74d9ac00fb55a8dc2e267873793ce 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml index b5931ec676da6604bed6043e5e841adb642e82e1..d9d35baec2509520e44308e8bffc6b2f03a91643 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml @@ -13,7 +13,7 @@ dependencies: - 'webform:webform_scheduled_email' - 'webform:webform_share' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml index 22aebb940f0787ab68177a175136081ca87e67a2..ffbc193eece0450c6de33c7a60541b860bb3fd46 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml @@ -11,7 +11,7 @@ dependencies: - 'webform:webform_node' - 'webform:webform_group' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml b/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml index 97c6075912c9d87b8efcdc2f8e023e130e84a104..92fc8e87be65d6dd65c2076ae0a711e54faf4618 100644 --- a/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml +++ b/web/modules/contrib/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml @@ -10,7 +10,7 @@ dependencies: - 'webform:webform_node' - 'webform:webform_access' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml b/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml index eb4113c5f5290ef5dd3c6e028da4abb92e5a0f5f..955743798f3fb99854ae5d4ba41c0d07e809c7a6 100644 --- a/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml +++ b/web/modules/contrib/webform/modules/webform_devel/webform_devel.info.yml @@ -7,7 +7,7 @@ dependencies: - 'devel:devel' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml b/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml index 504a58ea95fe4b872dd32dcd9b21c37f34909202..ce5e089013e52178595acc5ff291c54195990f3b 100644 --- a/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml +++ b/web/modules/contrib/webform/modules/webform_editorial/webform_editorial.info.yml @@ -8,7 +8,7 @@ hidden: true dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml b/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml index f1fe5a63bcf07a564be9bbf1d356eb16ad75efb7..f89424ef72cd75380f4308c4b9c0e772efb67829 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_entity_print' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml b/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml index f32f5820ea67236af86b4226d53ccc1c3ca067a1..88ea425409634eabde82b3e73aebf51697557765 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print/webform_entity_print.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'entity_print:entity_print' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml b/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml index dc22833e3e35200ca7de9f91ca674f2d8496cc4b..7463577df67769f6676c531de6980d202afeec5c 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_entity_print_attachment' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml b/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml index b66d23fbbfac4c850db4262685f45332ab2ecace..0b3d5d85a691bf7230efc85a82e5161a3063b99b 100644 --- a/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml +++ b/web/modules/contrib/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_attachment' - 'webform:webform_entity_print' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml b/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml index cba5ed4f07944d88b66b9666c3283b8f615ac69d..b3dff19828716924c36040b3ce98df1ef94c1cfd 100644 --- a/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_composite/webform_example_composite.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml b/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml index d0e335257c3e446e7079acacca4327f9d470d545..da979c44a741c4330ecb51a19d97d39521533426 100644 --- a/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform' - 'webform:webform_devel' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml b/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml index 929dac80e506f7ad2c9febe2840ffa87c99aa469..cde1d7c34dd560eb31100583f113522d5b9ed8f5 100644 --- a/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_element/webform_example_element.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml b/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml index 862503cca6ff4c98206b3b8b11735d144bb1958d..b65881ea2ade62e3a9f646957e725d05700399a6 100644 --- a/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_ui' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml b/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml index 365b50790ffdd5567fbdcdb94bd22973c81fad58..e14c3828d871b479b2b5e49a906fe0f14a02b991 100644 --- a/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_handler/webform_example_handler.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml b/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml index de8f19387220f7e6cbb7d2bfd8b2cf23ff0615a8..641ee73ce0cd23543e99dd75b422ec077c46b58a 100644 --- a/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml @@ -7,7 +7,7 @@ dependencies: - 'token:token' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml b/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml index 353a1224296f97bb94e49459b5cc3762651f34d2..aa48078fd384e57314ec8cf86ba713b1e3e535e7 100644 --- a/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml +++ b/web/modules/contrib/webform/modules/webform_example_variant/webform_example_variant.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml b/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml index 6403fdd19508116d4277092c69689d2875807830..53cfba9d7b6fdcfcf97d6395160f1944ef46eedb 100644 --- a/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml +++ b/web/modules/contrib/webform/modules/webform_examples/webform_examples.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml b/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml index d6c62d0c1ffa484107ab2a220508dcc99d84330e..812fa52704477578cb67b052f5911ecc2fc32822 100644 --- a/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml +++ b/web/modules/contrib/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'drupal:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml b/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml index 5320bf7f182e9c5d4f54f16470e24d8812cb754d..fa5de27ff4fb7d2bf71fff0b5f46f6b93aa46d99 100644 --- a/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_group' - 'group:group_test_config' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml b/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml index 2fbf03ba0e8c4d9ae50d4d5276a8862ef321c233..c21dec23c002d998127ac2f85b31746309e60b10 100644 --- a/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml +++ b/web/modules/contrib/webform/modules/webform_group/webform_group.info.yml @@ -9,7 +9,7 @@ dependencies: - 'group:group' - 'group:gnode' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml b/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml index 29e32560a6f5e8d6b18edccd347f43dca2f73dcb..fa0c4d0c024bb7c1eb6d02c6f24136f0745cb5ce 100644 --- a/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_icheck' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml b/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml index f9db8d77afcd2a0907303e7aadc5c58b2bf2fe93..9470997185d0df020fc8698c923323353a803fc8 100644 --- a/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml +++ b/web/modules/contrib/webform/modules/webform_icheck/webform_icheck.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml b/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml index 741861c234b841c35900b6de2892f5450c7996db..94cb13b1177cd6f84fafbc7803aabe19a3282101 100644 --- a/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_image_select' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml b/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml index 0dbad340889620236276dc1955834991f87d8695..d3e8948e5ca1e00be6e78087d7e205bbc09d96b9 100644 --- a/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml +++ b/web/modules/contrib/webform/modules/webform_image_select/webform_image_select.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml index 1353391b7b546f8d390f91c3d20c6309c69cc86f..ef49a487c5647e5ea070ec0cb0198d16ec371a20 100644 --- a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_jqueryui_buttons' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml index 7dbe5cbf941003d622ba72888b0b6ad9bca64182..c45307a9e807c581f2092c46d624b6df445ea4ba 100644 --- a/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml +++ b/web/modules/contrib/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml b/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml index dc0d4c92f1d55f9b63cd305cbd952ae308a9f26f..169351694a51806ce0d0dae0a19f194d3db8e728 100644 --- a/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_location_geocomplete' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml b/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml index 6cbd4e88cdb556bf525d9d410b9dc04d0d5a78a4..5e4b9218539059aba33d7c66c0f628a8cec5b509 100644 --- a/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml +++ b/web/modules/contrib/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml index 8e8b205ee02b63e3383f365edcaa32735fd1b70d..1efaf0493e7ab2eb7942088378bb9e161496cb7d 100644 --- a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml +++ b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml @@ -13,7 +13,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml index 649770a4a1b3d11e37262a6a2d14878df5cd647d..e44e91f8f3b2a8045455df219756744cb30a62ac 100644 --- a/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml +++ b/web/modules/contrib/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'webform:webform_test_translation' - 'drupal:content_translation' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml b/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml index f458dc4885db771da818ef598ebadde29a5ce727..01833dd94339247cc83df5850c520b1be9c37a21 100644 --- a/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml +++ b/web/modules/contrib/webform/modules/webform_node/webform_node.info.yml @@ -11,7 +11,7 @@ dependencies: - 'drupal:user' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml index 0498e751012c830fcac50a078d417c375ca1409b..56954221586404fef0190159e0eef90020afbce8 100644 --- a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform_options_limit' - 'webform:webform_options_custom' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml index 3c76e7b7ab2099aec044291e9156bb8dd2605723..ce8dddd61bf999466247728a97c88207b73570a5 100644 --- a/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_options_custom' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml b/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml index 511427bc99f240f142d1376156a130e4dc9bff3e..c92b7c852a158b631521d8b85431ea6578a41016 100644 --- a/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_custom/webform_options_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml b/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml index 0dad085f8c2d6566fd144bfc7d41e427653cd854..1174a64fb8114fa2630e6422b18b2a2a20195eb8 100644 --- a/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_options_limit' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml b/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml index e71242e035056214c9690d546660505c4b60b9e1..b062a5500a51d9c8abbaaa4e44e4e74a2bc128c1 100644 --- a/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml +++ b/web/modules/contrib/webform/modules/webform_options_limit/webform_options_limit.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml index f5e97a8b6684b58ae7a558cbc8e2c1006c3b26f0..1d0e663cb9ba1b3a7110304fb13162edd5ea238d 100644 --- a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_scheduled_email' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml index 29a43f43463f871deedd20ea85d58a7c2e33b230..1c8d55b3d78789c125dcaad1dc5d9b62ea83f19d 100644 --- a/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml +++ b/web/modules/contrib/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml @@ -10,7 +10,7 @@ dependencies: - 'webform:webform' - 'webform:webform_scheduled_email' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml b/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml index 414438a891abb1c1645788a8ffc7fadb37f6a9f3..88f33bd0b7d0fa8dfc1c1053d22f65d8d91fde5d 100644 --- a/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml +++ b/web/modules/contrib/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml b/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml index b604fa4da0ad5940193f7be78c38d492740b96d4..afc91607bcbb4b67be4494a5adc2bcbe77db881f 100644 --- a/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml +++ b/web/modules/contrib/webform/modules/webform_share/webform_share.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml b/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml index 4cf84fce96f691d249275f5a1b09bcf6dfa1ffe9..c6f284f4074eb56f31e80a50c01a5905c48b1ea3 100644 --- a/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml +++ b/web/modules/contrib/webform/modules/webform_shortcuts/webform_shortcuts.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_ui' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml b/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml index e1a9f07ed63ea7f9534718eb9724882fa1a87f24..cda45c6b3c6b54bf249cc6ba7695195c1484346e 100644 --- a/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_submission_export_import' - 'webform:webform_image_select' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml b/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml index 73d8b5e1e55ee7a830d456ed699d2559f059fa19..a8899fec8a1f19fb92a09f4e79ad39ca1cb32433 100644 --- a/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml +++ b/web/modules/contrib/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml b/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml index 87d75166c5e7bdc072a23c404191b9d866a4dbdf..a1e68788871f764e2d2236546405e7df6c1a96d3 100644 --- a/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml +++ b/web/modules/contrib/webform/modules/webform_submission_log/webform_submission_log.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml b/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml index 9d907c6948d372ba8a0d5bf25b782a0002a1c88a..27d3a3509b07bfee1b3eed650070d2c92423a7fb 100644 --- a/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml +++ b/web/modules/contrib/webform/modules/webform_templates/webform_templates.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml b/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml index fde10032a436a2649ed0065ad46ef7eb032389cb..4f09f5984e0627ae77c6010e64e1ff3cd571af94 100644 --- a/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml +++ b/web/modules/contrib/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_toggles' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml b/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml index d36927e481bd3e6b7e4c70a90e9dd1015cd0e0fc..454481352809e427a9141d4c46413f120af99433 100644 --- a/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml +++ b/web/modules/contrib/webform/modules/webform_toggles/webform_toggles.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml b/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml index 7acb38f7ba043d9f2dbee2012886c09976fc1f90..8574bc9a8d9c535007eb97ce2e898ca0a8ab08c3 100644 --- a/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml +++ b/web/modules/contrib/webform/modules/webform_ui/webform_ui.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml b/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml index 3f7714f0db0ebae2015246e041e58e16cdc4d1b7..f20935069b9a938986891791a1dac7f7fcc58bd6 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test/webform_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml index 3c023030f4c4e282c87b32bcd573d354460c1630..ab46714eeed8e1b5766dee4a2938a20535df6090 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml index 95717aa08ac776add13dbf60bc734002012497b4..eb6870da2393b3aeafffdb683a1fd8c2256ff7d7 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml index a657efe00cead8ddb6dcead9b2da733a640c0fa9..d24ec3d93175b73bf30ecc50368e91744f76767f 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml index 7b33c5415d8001e5aa71d7e5a99f809cee43c0ec..d8ec39f0083d8133a490ae26b9d899bc41fc4dc3 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml @@ -8,7 +8,7 @@ dependencies: - 'drupal:block_content' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml index 68d6bd3b4eb84fc38ef52404053fa7420f27aa12..0c1dbb0004c7f51d471517cf68a93e12b15cc293 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml index bcede73e993531a16de2bbfd90b6b97a5cb48c42..95693121ffb8835ee8e20c5809e538bf3423f872 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml index 81c4473120d684768a13731996e06c665c852052..eec4665209fcfd17d49512dab468742efe17c7d8 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_element/webform_test_element.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml index df25a23e204b722a42b1ccb905eea376dcafc82c..b3cde9dea9a56d176d82a9e5bec1e146b7319e25 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml index d38be28505c8bb0f2a047f6cfa226193b0b21c1d..195b36c36a9d5c57fce9346aa250f73f26fb15ee 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:views' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml index dda53dcb99a064cee2cba6d2973b2794f9cd57eb..9f5c90280807ad0fa47241b2262acc61385ee2d0 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml index e0bddfa5fe2a075e95e9c8320634204e3e34dfc8..91487d1b5b42165960d3f6e890044fa0cedca518 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml index 19124b85857c4a6b516085d4d3819c56136aa8bf..8688e45a707877997d1d3aadd4e366e9b6a005f9 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml index 03e82600a6952bb6a01842eaf2620a73ac056f5b..d2d582fd8a40d4ab3223ea55c5e84c8c9251af3e 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml index da7a5c902ab1c3152dfcd5ee4c727c54eac01701..c429c93c1515310fdfc43b255a9a3c126e7cc265 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml index 8065973efa5edfd8dfde0cc9c77a6adf125aab39..deecacd2eaae4c49b4b4891ce65fc903e64b3b10 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml index fbb538104d91813a2ae0c60b2f6189a3a820d2c7..badf605eb36a61811cf0c5ad39f17d154426ad6d 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_options/webform_test_options.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml index 51a75befa40175b513462cb3e7e3368590594465..c1ce647e2daed2748909cba59d561f8b99ce0a40 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml @@ -7,7 +7,7 @@ dependencies: - 'paragraphs:paragraphs' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml index 8fe01a267397feda3420f4315c3bd8557ffab868..bb8a98526843311f23091e9090944be94ab9f156 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:serialization' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml index bfd09d165dbca5c2b6ee975e70869671a4dbc52e..1a0d23dfd86491ac4dfe327830acad1af2f1ae2c 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_states/webform_test_states.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml index ec5dbb0e8645405b54323a966081efc82d30d581..01dc11c904210a8d413427310b1ea16a4a9fe7d4 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:node' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml index ee52060c18ac7d7b40e97623316e206cc4c27a8d..d04ec722e29fc277a2c19b039f858ead9fbb039f 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml index a4834966862029acfbec0846c6f9e870fe8bdaaf..aed93b4bc1f774d61ef2604faf6de1b4eb6f95b7 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:locale' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml index e6ac9f7c3d1dc22537e2d0925de9369c0119bdad..8fb6b62eccf15d04f78348355c35f912c5166af7 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml @@ -10,7 +10,7 @@ dependencies: - 'lingotek:lingotek' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml index 53d7d871a12342b1764274a630a4e670e6044f69..0fae9b928bf87836fc8fce805f7b1f17e7a7b140 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml index dafa50a0b6db530db4febf9323855343be001d50..df13737da3c80d20f9e089ed0b4feed721cd8b21 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml index e967a1fbd57bbc565a1dda206d279356f7ae32db..424379b5993375fce8c41cf99021a303e28e64ef 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_views/webform_test_views.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:views' - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml b/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml index 5bf58e01b64e6e97741eeb2330ea0c7bfb8a78d5..3f9292b5b62a2b1d12175ecd30a54280670814b2 100644 --- a/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml +++ b/web/modules/contrib/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml b/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml index 532e9dc3a00587fa47a3bc5df44fbde2db3d79d3..61dc4c4c93c65bf7de767f6e38a69ee87d00a5e7 100644 --- a/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml +++ b/web/modules/contrib/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml @@ -5,7 +5,7 @@ name: 'Webform Bartik test' description: 'Support theme for webform Bartik integration testing.' package: 'Webform Testing' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453181 +datestamp: 1614711104 diff --git a/web/modules/contrib/webform/webform.info.yml b/web/modules/contrib/webform/webform.info.yml index e30e4798db9af3f32591e3a4c82cafa19f790cf0..141195600f5270f1c83c2441c8f97949acdbe1f9 100644 --- a/web/modules/contrib/webform/webform.info.yml +++ b/web/modules/contrib/webform/webform.info.yml @@ -8,7 +8,7 @@ dependencies: - 'drupal:field' - 'drupal:user' -# Information added by Drupal.org packaging script on 2021-02-04 -version: '8.x-5.24' +# Information added by Drupal.org packaging script on 2021-03-02 +version: '8.x-5.25' project: 'webform' -datestamp: 1612453182 +datestamp: 1614711104