diff --git a/application/logintwig.class.inc.php b/application/logintwig.class.inc.php index b800e2e80..b7d411b1d 100644 --- a/application/logintwig.class.inc.php +++ b/application/logintwig.class.inc.php @@ -9,6 +9,9 @@ use Combodo\iTop\Application\Branding; use Combodo\iTop\Application\TwigBase\Twig\Extension; +use Twig\Environment; +use Twig\Loader\ChainLoader; +use Twig\Loader\FilesystemLoader; /** * Twig context for modules extending the login screen @@ -217,14 +220,14 @@ class LoginTwigRenderer $sTwigLoaderPath = $oLoginContext->GetTwigLoaderPath(); if ($sTwigLoaderPath != null) { - $oExtensionLoader = new Twig_Loader_Filesystem(); + $oExtensionLoader = new FilesystemLoader(); $oExtensionLoader->setPaths($sTwigLoaderPath); $aTwigLoaders[] = $oExtensionLoader; } $this->aPostedVars = array_merge($this->aPostedVars, $oLoginContext->GetPostedVars()); } - $oCoreLoader = new Twig_Loader_Filesystem(array(), APPROOT.'templates'); + $oCoreLoader = new FilesystemLoader(array(), APPROOT.'templates'); $aCoreTemplatesPaths = array('pages/login', 'pages/login/password'); // Having this path declared after the plugins let the plugins replace the core templates $oCoreLoader->setPaths($aCoreTemplatesPaths); @@ -232,8 +235,8 @@ class LoginTwigRenderer $oCoreLoader->setPaths($aCoreTemplatesPaths, 'ItopCore'); $aTwigLoaders[] = $oCoreLoader; - $oLoader = new Twig_Loader_Chain($aTwigLoaders); - $this->oTwig = new Twig_Environment($oLoader); + $oLoader = new ChainLoader($aTwigLoaders); + $this->oTwig = new Environment($oLoader); Extension::RegisterTwigExtensions($this->oTwig); } @@ -306,7 +309,7 @@ class LoginTwigRenderer } /** - * @return \Twig_Environment + * @return \Twig\Environment */ public function GetTwig() { diff --git a/application/twigextension.class.inc.php b/application/twigextension.class.inc.php index d0a92aab4..5234eb96a 100644 --- a/application/twigextension.class.inc.php +++ b/application/twigextension.class.inc.php @@ -8,9 +8,9 @@ use DeprecatedCallsLog; use Dict; use Exception; use MetaModel; -use Twig_Environment; -use Twig_SimpleFilter; -use Twig_SimpleFunction; +use Twig\Environment; +use Twig\TwigFilter; +use Twig\TwigFunction; use utils; DeprecatedCallsLog::NotifyDeprecatedFile('instead use sources/Application/TwigBase/Twig/Extension.php, which is loaded by the autoloader'); @@ -28,13 +28,13 @@ class TwigExtension * Registers Twig extensions such as filters or functions. * It allows us to access some stuff directly in twig. * - * @param \Twig_Environment $oTwigEnv + * @param Environment $oTwigEnv */ - public static function RegisterTwigExtensions(Twig_Environment &$oTwigEnv) + public static function RegisterTwigExtensions(Environment &$oTwigEnv) { // Filter to translate a string via the Dict::S function // Usage in twig: {{ 'String:ToTranslate'|dict_s }} - $oTwigEnv->addFilter(new Twig_SimpleFilter('dict_s', + $oTwigEnv->addFilter(new TwigFilter('dict_s', function ($sStringCode, $sDefault = null, $bUserLanguageOnly = false) { return Dict::S($sStringCode, $sDefault, $bUserLanguageOnly); }) @@ -42,7 +42,7 @@ class TwigExtension // Filter to format a string via the Dict::Format function // Usage in twig: {{ 'String:ToTranslate'|dict_format() }} - $oTwigEnv->addFilter(new Twig_SimpleFilter('dict_format', + $oTwigEnv->addFilter(new TwigFilter('dict_format', function ($sStringCode, $sParam01 = null, $sParam02 = null, $sParam03 = null, $sParam04 = null) { return Dict::Format($sStringCode, $sParam01, $sParam02, $sParam03, $sParam04); }) @@ -51,16 +51,13 @@ class TwigExtension // Filter to format output // example a DateTime is converted to user format // Usage in twig: {{ 'String:ToFormat'|output_format }} - $oTwigEnv->addFilter(new Twig_SimpleFilter('date_format', + $oTwigEnv->addFilter(new TwigFilter('date_format', function ($sDate) { - try - { - if (preg_match('@^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d$@', trim($sDate))) - { + try { + if (preg_match('@^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d$@', trim($sDate))) { return AttributeDateTime::GetFormat()->Format($sDate); } - if (preg_match('@^\d\d\d\d-\d\d-\d\d$@', trim($sDate))) - { + if (preg_match('@^\d\d\d\d-\d\d-\d\d$@', trim($sDate))) { return AttributeDate::GetFormat()->Format($sDate); } } @@ -75,7 +72,7 @@ class TwigExtension // Filter to format output // example a DateTime is converted to user format // Usage in twig: {{ 'String:ToFormat'|output_format }} - $oTwigEnv->addFilter(new Twig_SimpleFilter('size_format', + $oTwigEnv->addFilter(new TwigFilter('size_format', function ($sSize) { return utils::BytesToFriendlyFormat($sSize); }) @@ -83,24 +80,25 @@ class TwigExtension // Filter to enable base64 encode/decode // Usage in twig: {{ 'String to encode'|base64_encode }} - $oTwigEnv->addFilter(new Twig_SimpleFilter('base64_encode', 'base64_encode')); - $oTwigEnv->addFilter(new Twig_SimpleFilter('base64_decode', 'base64_decode')); + $oTwigEnv->addFilter(new TwigFilter('base64_encode', 'base64_encode')); + $oTwigEnv->addFilter(new TwigFilter('base64_decode', 'base64_decode')); // Filter to enable json decode (encode already exists) // Usage in twig: {{ aSomeArray|json_decode }} - $oTwigEnv->addFilter(new Twig_SimpleFilter('json_decode', function ($sJsonString, $bAssoc = false) { + $oTwigEnv->addFilter(new TwigFilter('json_decode', function ($sJsonString, $bAssoc = false) { return json_decode($sJsonString, $bAssoc); }) ); // Filter to add itopversion to an url - $oTwigEnv->addFilter(new Twig_SimpleFilter('add_itop_version', function ($sUrl) { + $oTwigEnv->addFilter(new TwigFilter('add_itop_version', function ($sUrl) { $sUrl = utils::AddParameterToUrl($sUrl, 'itopversion', ITOP_VERSION); + return $sUrl; })); // Filter to add a module's version to an url - $oTwigEnv->addFilter(new Twig_SimpleFilter('add_module_version', function ($sUrl, $sModuleName) { + $oTwigEnv->addFilter(new TwigFilter('add_module_version', function ($sUrl, $sModuleName) { $sModuleVersion = utils::GetCompiledModuleVersion($sModuleName); $sUrl = utils::AddParameterToUrl($sUrl, 'moduleversion', $sModuleVersion); @@ -109,38 +107,36 @@ class TwigExtension // Function to check our current environment // Usage in twig: {% if is_development_environment() %} - $oTwigEnv->addFunction(new Twig_SimpleFunction('is_development_environment', function() - { + $oTwigEnv->addFunction(new TwigFunction('is_development_environment', function () { return utils::IsDevelopmentEnvironment(); })); // Function to get configuration parameter // Usage in twig: {{ get_config_parameter('foo') }} - $oTwigEnv->addFunction(new Twig_SimpleFunction('get_config_parameter', function($sParamName) - { + $oTwigEnv->addFunction(new TwigFunction('get_config_parameter', function ($sParamName) { $oConfig = MetaModel::GetConfig(); + return $oConfig->Get($sParamName); })); // Function to get a module setting // Usage in twig: {{ get_module_setting(, [, ]) }} // since 3.0.0, but see N°4034 for upcoming evolutions in the 3.1 - $oTwigEnv->addFunction(new Twig_SimpleFunction('get_module_setting', function (string $sModuleCode, string $sPropertyCode, $defaultValue = null) { + $oTwigEnv->addFunction(new TwigFunction('get_module_setting', function (string $sModuleCode, string $sPropertyCode, $defaultValue = null) { $oConfig = MetaModel::GetConfig(); + return $oConfig->GetModuleSetting($sModuleCode, $sPropertyCode, $defaultValue); })); // Function to get the URL of a static page in a module // Usage in twig: {{ get_static_page_module_url('itop-my-module', 'path-to-my-page') }} - $oTwigEnv->addFunction(new Twig_SimpleFunction('get_static_page_module_url', function($sModuleName, $sPage) - { + $oTwigEnv->addFunction(new TwigFunction('get_static_page_module_url', function ($sModuleName, $sPage) { return utils::GetAbsoluteUrlModulesRoot().$sModuleName.'/'.$sPage; })); // Function to get the URL of a php page in a module // Usage in twig: {{ get_page_module_url('itop-my-module', 'path-to-my-my-page.php') }} - $oTwigEnv->addFunction(new Twig_SimpleFunction('get_page_module_url', function($sModuleName, $sPage) - { + $oTwigEnv->addFunction(new TwigFunction('get_page_module_url', function ($sModuleName, $sPage) { return utils::GetAbsoluteUrlModulePage($sModuleName, $sPage); })); } diff --git a/composer.json b/composer.json index b705f215d..16d3a457e 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "type": "project", "license": "AGPLv3", "require": { - "php": ">=7.1.3 <8.0.0", + "php": ">=7.2.5 <8.0.0", "ext-ctype": "*", "ext-dom": "*", "ext-gd": "*", @@ -19,17 +19,16 @@ "pear/archive_tar": "~1.4.14", "pelago/emogrifier": "~3.1.0", "scssphp/scssphp": "1.0.6", - "symfony/console": "~3.4.47", - "symfony/dotenv": "~3.4.47", - "symfony/framework-bundle": "~3.4.47", - "symfony/twig-bundle": "~3.4.47", - "symfony/yaml": "~3.4.47", - "thenetworg/oauth2-azure": "^2.0", - "twig/twig": "~1.42.5" + "symfony/console": "5.4.*", + "symfony/dotenv": "5.4.*", + "symfony/framework-bundle": "5.4.*", + "symfony/twig-bundle": "5.4.*", + "symfony/yaml": "5.4.*", + "thenetworg/oauth2-azure": "^2.0" }, "require-dev": { - "symfony/stopwatch": "~3.4.47", - "symfony/web-profiler-bundle": "~3.4.47" + "symfony/stopwatch": "5.4.*", + "symfony/web-profiler-bundle": "5.4.*" }, "suggest": { "ext-libsodium": "Required to use the AttributeEncryptedString.", @@ -41,7 +40,7 @@ }, "config": { "platform": { - "php": "7.1.3" + "php": "7.2.5" }, "vendor-dir": "lib", "preferred-install": { diff --git a/composer.lock b/composer.lock index d62b45e1f..c8ac6fd96 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": "ec514b23be219595cb60a167c8da7f27", + "content-hash": "2829a514164533f377c56a3cbe431aa4", "packages": [ { "name": "combodo/tcpdf", @@ -179,16 +179,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.6", + "version": "6.5.7", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "f092dd734083473658de3ee4bef093ed77d2689c" + "reference": "724562fa861e21a4071c652c8a159934e4f05592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f092dd734083473658de3ee4bef093ed77d2689c", - "reference": "f092dd734083473658de3ee4bef093ed77d2689c", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/724562fa861e21a4071c652c8a159934e4f05592", + "reference": "724562fa861e21a4071c652c8a159934e4f05592", "shasum": "" }, "require": { @@ -274,7 +274,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.6" + "source": "https://github.com/guzzle/guzzle/tree/6.5.7" }, "funding": [ { @@ -290,7 +290,7 @@ "type": "tidelift" } ], - "time": "2022-05-25T13:19:12+00:00" + "time": "2022-06-09T21:36:50+00:00" }, { "name": "guzzlehttp/promises", @@ -1157,33 +1157,29 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.18", + "version": "v9.99.100", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db" + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db", - "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": ">= 7" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1202,7 +1198,12 @@ "pseudorandom", "random" ], - "time": "2019-01-03T20:59:08+00:00" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" }, { "name": "pear/archive_tar", @@ -1337,16 +1338,16 @@ }, { "name": "pear/pear-core-minimal", - "version": "v1.10.10", + "version": "v1.10.11", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7" + "reference": "68d0d32ada737153b7e93b8d3c710ebe70ac867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7", - "reference": "625a3c429d9b2c1546438679074cac1b089116a7", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/68d0d32ada737153b7e93b8d3c710ebe70ac867d", + "reference": "68d0d32ada737153b7e93b8d3c710ebe70ac867d", "shasum": "" }, "require": { @@ -1381,7 +1382,7 @@ "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" + "time": "2021-08-10T22:31:03+00:00" }, { "name": "pear/pear_exception", @@ -1564,31 +1565,29 @@ "psr", "psr-6" ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1601,7 +1600,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1613,7 +1612,61 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" }, { "name": "psr/http-message", @@ -1670,16 +1723,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -1703,7 +1756,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -1713,55 +1766,10 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -1874,37 +1882,52 @@ }, { "name": "symfony/cache", - "version": "v3.4.47", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "a7a14c4832760bd1fbd31be2859ffedc9b6ff813" + "reference": "a50b7249bea81ddd6d3b799ce40c5521c2f72f0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/a7a14c4832760bd1fbd31be2859ffedc9b6ff813", - "reference": "a7a14c4832760bd1fbd31be2859ffedc9b6ff813", + "url": "https://api.github.com/repos/symfony/cache/zipball/a50b7249bea81ddd6d3b799ce40c5521c2f72f0b", + "reference": "a50b7249bea81ddd6d3b799ce40c5521c2f72f0b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/cache": "~1.0", - "psr/log": "~1.0", - "psr/simple-cache": "^1.0", - "symfony/polyfill-apcu": "~1.1" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "conflict": { - "symfony/var-dumper": "<3.3" + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" }, "provide": { - "psr/cache-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6", - "doctrine/dbal": "^2.4|^3.0", - "predis/predis": "^1.0" + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -1929,14 +1952,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v3.4.47" + "source": "https://github.com/symfony/cache/tree/v5.4.9" }, "funding": [ { @@ -1952,40 +1975,43 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { - "name": "symfony/class-loader", - "version": "v3.4.47", + "name": "symfony/cache-contracts", + "version": "v2.5.1", "source": { "type": "git", - "url": "https://github.com/symfony/class-loader.git", - "reference": "a22265a9f3511c0212bf79f54910ca5a77c0e92c" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/a22265a9f3511c0212bf79f54910ca5a77c0e92c", - "reference": "a22265a9f3511c0212bf79f54910ca5a77c0e92c", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" - }, - "require-dev": { - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/polyfill-apcu": "~1.1" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" }, "suggest": { - "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" + "symfony/cache-implementation": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\ClassLoader\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Cache\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1993,18 +2019,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony ClassLoader Component", + "description": "Generic abstractions related to caching", "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "source": "https://github.com/symfony/class-loader/tree/v3.4.47" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.1" }, "funding": [ { @@ -2020,36 +2054,39 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/config", - "version": "v3.4.47", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" + "reference": "8f551fe22672ac7ab2c95fe46d899f960ed4d979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "url": "https://api.github.com/repos/symfony/config/zipball/8f551fe22672ac7ab2c95fe46d899f960ed4d979", + "reference": "8f551fe22672ac7ab2c95fe46d899f960ed4d979", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<4.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -2077,10 +2114,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "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/v3.4.47" + "source": "https://github.com/symfony/config/tree/v5.4.9" }, "funding": [ { @@ -2096,41 +2133,50 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-17T10:39:36+00:00" }, { "name": "symfony/console", - "version": "v3.4.47", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81" + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.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" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2161,10 +2207,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], "support": { - "source": "https://github.com/symfony/console/tree/v3.4.47" + "source": "https://github.com/symfony/console/tree/v5.4.9" }, "funding": [ { @@ -2180,24 +2232,25 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-18T06:17:34+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.47", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "da3d9da2ce0026771f5fe64cb332158f1bd2bc33" + "reference": "b0a190285cd95cb019237851205b8140ef6e368e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/da3d9da2ce0026771f5fe64cb332158f1bd2bc33", - "reference": "da3d9da2ce0026771f5fe64cb332158f1bd2bc33", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", + "reference": "b0a190285cd95cb019237851205b8140ef6e368e", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -2226,10 +2279,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v3.4.47" + "source": "https://github.com/symfony/css-selector/tree/v5.4.3" }, "funding": [ { @@ -2245,107 +2298,45 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/debug", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", - "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "type": "library", - "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", - "support": { - "source": "https://github.com/symfony/debug/tree/v3.4.47" - }, - "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" - } - ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.47", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" + "reference": "beecae161577305926ec078c4ed973f2b98880b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/beecae161577305926ec078c4ed973f2b98880b3", + "reference": "beecae161577305926ec078c4ed973f2b98880b3", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": ">=7.2.5", + "psr/container": "^1.1.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", - "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" + "ext-psr": "<1.1|>=2", + "symfony/config": "<5.3", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4.26" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4.26|^5.0|^6.0" }, "suggest": { "symfony/config": "", @@ -2377,10 +2368,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v3.4.47" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.9" }, "funding": [ { @@ -2396,27 +2387,96 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-27T06:40:03+00:00" }, { - "name": "symfony/dotenv", - "version": "v3.4.47", + "name": "symfony/deprecation-contracts", + "version": "v2.5.1", "source": { "type": "git", - "url": "https://github.com/symfony/dotenv.git", - "reference": "1022723ac4f56b001d99691d96c6025dbf1404f1" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/1022723ac4f56b001d99691d96c6025dbf1404f1", - "reference": "1022723ac4f56b001d99691d96c6025dbf1404f1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.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" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v5.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/83a2310904a4f5d4f42526227b5a578ac82232a9", + "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3" }, "require-dev": { - "symfony/process": "^3.4.2|^4.0" + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -2449,7 +2509,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v3.4.47" + "source": "https://github.com/symfony/dotenv/tree/v5.4.5" }, "funding": [ { @@ -2465,35 +2525,115 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-02-15T17:04:12+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v3.4.47", + "name": "symfony/error-handler", + "version": "v5.4.9", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "url": "https://github.com/symfony/error-handler.git", + "reference": "c116cda1f51c678782768dce89a45f13c949455d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c116cda1f51c678782768dce89a45f13c949455d", + "reference": "c116cda1f51c678782768dce89a45f13c949455d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "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 tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.9" + }, + "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" + } + ], + "time": "2022-05-21T13:57:48+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2522,10 +2662,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" }, "funding": [ { @@ -2541,25 +2681,106 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-05T16:45:39+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.47", + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.1", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.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" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -2584,10 +2805,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v3.4.47" + "source": "https://github.com/symfony/filesystem/tree/v5.4.9" }, "funding": [ { @@ -2603,24 +2824,26 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-20T13:55:35+00:00" }, { "name": "symfony/finder", - "version": "v3.4.47", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -2645,10 +2868,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v3.4.47" + "source": "https://github.com/symfony/finder/tree/v5.4.8" }, "funding": [ { @@ -2664,80 +2887,104 @@ "type": "tidelift" } ], - "time": "2020-11-16T17:02:08+00:00" + "time": "2022-04-15T08:07:45+00:00" }, { "name": "symfony/framework-bundle", - "version": "v3.4.47", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "6c95e747b75ddd2af61152ce93bf87299d15710e" + "reference": "1cb89cd3e36d5060545d0f223f00a774fa6430ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/6c95e747b75ddd2af61152ce93bf87299d15710e", - "reference": "6c95e747b75ddd2af61152ce93bf87299d15710e", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1cb89cd3e36d5060545d0f223f00a774fa6430ef", + "reference": "1cb89cd3e36d5060545d0f223f00a774fa6430ef", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^5.5.9|>=7.0.8", - "symfony/cache": "~3.4.31|^4.3.4", - "symfony/class-loader": "~3.2", - "symfony/config": "^3.4.31|^4.3.4", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.24|^4.2.5", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "^3.4.38|^4.3", - "symfony/http-kernel": "^3.4.44|^4.3.4", + "php": ">=7.2.5", + "symfony/cache": "^5.2|^6.0", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^5.4.5|^6.0.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4.1|^5.0.1|^6.0", + "symfony/event-dispatcher": "^5.1|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^3.4.5|^4.0.5" + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/routing": "^5.3|^6.0" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.0", - "phpdocumentor/type-resolver": "<0.2.1", - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/asset": "<3.3", - "symfony/console": "<3.4", - "symfony/form": "<3.4", - "symfony/property-info": "<3.3", - "symfony/serializer": "<3.3", - "symfony/stopwatch": "<3.4", - "symfony/translation": "<3.4", - "symfony/validator": "<3.4", - "symfony/workflow": "<3.3" + "doctrine/annotations": "<1.13.1", + "doctrine/cache": "<1.11", + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "phpunit/phpunit": "<5.4.3", + "symfony/asset": "<5.3", + "symfony/console": "<5.2.5", + "symfony/dom-crawler": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/form": "<5.2", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<5.2", + "symfony/messenger": "<5.4", + "symfony/mime": "<4.4", + "symfony/property-access": "<5.3", + "symfony/property-info": "<4.4", + "symfony/security-csrf": "<5.3", + "symfony/serializer": "<5.2", + "symfony/service-contracts": ">=3.0", + "symfony/stopwatch": "<4.4", + "symfony/translation": "<5.3", + "symfony/twig-bridge": "<4.4", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<5.2", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<5.2" }, "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", - "fig/link-util": "^1.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/asset": "~3.3|~4.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/console": "~3.4.31|^4.3.4", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/form": "^3.4.31|^4.3.4", - "symfony/lock": "~3.4|~4.0", + "doctrine/annotations": "^1.13.1", + "doctrine/cache": "^1.11|^2.0", + "doctrine/persistence": "^1.3|^2|^3", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.3|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4.9|^6.0.9", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0", + "symfony/dotenv": "^5.1|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/form": "^5.2|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/mailer": "^5.2|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/notifier": "^5.4|^6.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "~2.8|~3.0|~4.0", - "symfony/property-info": "~3.3|~4.0", - "symfony/security-core": "~3.2|~4.0", - "symfony/security-csrf": "^2.8.31|^3.3.13|~4.0", - "symfony/serializer": "~3.3|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~3.4|~4.0", - "symfony/validator": "~3.4|~4.0", - "symfony/var-dumper": "~3.3|~4.0", - "symfony/web-link": "~3.3|~4.0", - "symfony/workflow": "~3.3|~4.0", - "symfony/yaml": "~3.2|~4.0", - "twig/twig": "~1.34|~2.4" + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/property-info": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0", + "symfony/security-bundle": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/string": "^5.0|^6.0", + "symfony/translation": "^5.3|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/validator": "^5.2|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/workflow": "^5.2|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/twig": "^2.10|^3.0" }, "suggest": { "ext-apcu": "For best performance of the system caches", @@ -2772,10 +3019,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony FrameworkBundle", + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v3.4.47" + "source": "https://github.com/symfony/framework-bundle/tree/v5.4.9" }, "funding": [ { @@ -2791,29 +3038,36 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-27T06:29:07+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.47", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522", + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", "autoload": { @@ -2838,10 +3092,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v3.4.47" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.9" }, "funding": [ { @@ -2857,65 +3111,75 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-17T15:07:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.49", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "5aa72405f5bd5583c36ed6e756acb17d3f98ac40" + "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5aa72405f5bd5583c36ed6e756acb17d3f98ac40", - "reference": "5aa72405f5bd5583c36ed6e756acb17d3f98ac40", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34b121ad3dc761f35fe1346d2f15618f8cbf77f8", + "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8", "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" + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.3.7|^6.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" }, "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" + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.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" + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" + "symfony/dependency-injection": "" }, "type": "library", "autoload": { @@ -2940,10 +3204,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpKernel Component", + "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.49" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.9" }, "funding": [ { @@ -2959,29 +3223,35 @@ "type": "tidelift" } ], - "time": "2021-05-19T12:06:59+00:00" + "time": "2022-05-27T07:09:08+00:00" }, { - "name": "symfony/polyfill-apcu", - "version": "v1.19.0", + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "b44b51e7814c23bfbd793a16ead5d7ce43ed23c5" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/b44b51e7814c23bfbd793a16ead5d7ce43ed23c5", - "reference": "b44b51e7814c23bfbd793a16ead5d7ce43ed23c5", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2992,89 +3262,9 @@ "files": [ "bootstrap.php" ], - "psr-4": { - "Symfony\\Polyfill\\Apcu\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "apcu", - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-apcu/tree/v1.19.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" - } - ], - "time": "2020-10-21T09:57:48+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3099,7 +3289,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -3115,7 +3305,88 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "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 intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.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" + } + ], + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -3290,20 +3561,23 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.19.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce", - "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" }, "suggest": { "ext-mbstring": "For best performance" @@ -3311,7 +3585,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3319,12 +3593,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3350,7 +3624,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -3366,164 +3640,7 @@ "type": "tidelift" } ], - "time": "2020-10-23T09:01:57+00:00" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "ea19621731cbd973a6702cfedef3419768bf3372" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ea19621731cbd973a6702cfedef3419768bf3372", - "reference": "ea19621731cbd973a6702cfedef3419768bf3372", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.19.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" - } - ], - "time": "2020-10-23T09:01:57+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3fe414077251a81a1b15b1c709faf5c2fbae3d4e", - "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.19.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" - } - ], - "time": "2020-10-23T09:01:57+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", @@ -3602,26 +3719,26 @@ "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.19.0", + "name": "symfony/polyfill-php73", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a", - "reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.19-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3629,9 +3746,15 @@ } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3647,16 +3770,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "compat", "compatibility", "polyfill", + "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-util/tree/v1.19.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -3672,41 +3795,205 @@ "type": "tidelift" } ], - "time": "2020-10-21T09:57:48+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/routing", - "version": "v3.4.47", + "name": "symfony/polyfill-php80", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "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.26.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" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "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 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.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" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.4" + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.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" + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.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", @@ -3735,7 +4022,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ "router", @@ -3744,7 +4031,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" + "source": "https://github.com/symfony/routing/tree/v5.4.8" }, "funding": [ { @@ -3760,51 +4047,315 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-04-18T21:45:37+00:00" }, { - "name": "symfony/twig-bridge", - "version": "v3.4.47", + "name": "symfony/service-contracts", + "version": "v2.5.1", "source": { "type": "git", - "url": "https://github.com/symfony/twig-bridge.git", - "reference": "090d19d6f1ea5b9e1d79f372785aa5e5c9cd4042" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/090d19d6f1ea5b9e1d79f372785aa5e5c9cd4042", - "reference": "090d19d6f1ea5b9e1d79f372785aa5e5c9cd4042", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "twig/twig": "^1.41|^2.10" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { - "symfony/console": "<3.4", - "symfony/form": "<3.4.31|>=4.0,<4.3.4" + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.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" + } + ], + "time": "2022-03-13T20:07:29+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" }, "require-dev": { - "fig/link-util": "^1.0", - "symfony/asset": "~2.8|~3.0|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/form": "^3.4.31|^4.3.4", - "symfony/http-foundation": "^3.3.11|~4.0", - "symfony/http-kernel": "~3.2|~4.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "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 an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.9" + }, + "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" + } + ], + "time": "2022-04-19T10:40:37+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07", + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "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": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.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" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "fd13c89a1abdbaa7ee2e655d9a11405adcb7a6cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/fd13c89a1abdbaa7ee2e655d9a11405adcb7a6cf", + "reference": "fd13c89a1abdbaa7ee2e655d9a11405adcb7a6cf", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<5.3", + "symfony/form": "<5.3", + "symfony/http-foundation": "<5.3", + "symfony/http-kernel": "<4.4", + "symfony/translation": "<5.2", + "symfony/workflow": "<5.2" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "egulias/email-validator": "^2.1.10|^3", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^4.4|^5.0|^6.0", + "symfony/console": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/form": "^5.3|^6.0", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/security": "^2.8.31|^3.3.13|~4.0", - "symfony/security-acl": "~2.8|~3.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": "~2.8.10|~3.1.4|~3.2|~4.0", - "symfony/web-link": "~3.3|~4.0", - "symfony/workflow": "~3.3|~4.0", - "symfony/yaml": "~2.8|~3.0|~4.0" + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^4.4|^5.0|^6.0", + "symfony/security-csrf": "^4.4|^5.0|^6.0", + "symfony/security-http": "^4.4|^5.0|^6.0", + "symfony/serializer": "^5.2|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.2|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/workflow": "^5.2|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" }, "suggest": { "symfony/asset": "For using the AssetExtension", @@ -3813,9 +4364,10 @@ "symfony/form": "For using the FormExtension", "symfony/http-kernel": "For using the HttpKernelExtension", "symfony/routing": "For using the RoutingExtension", - "symfony/security": "For using the SecurityExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", "symfony/stopwatch": "For using the StopwatchExtension", - "symfony/templating": "For using the TwigEngine", "symfony/translation": "For using the TranslationExtension", "symfony/var-dumper": "For using the DumpExtension", "symfony/web-link": "For using the WebLinkExtension", @@ -3844,10 +4396,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Twig Bridge", + "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v3.4.47" + "source": "https://github.com/symfony/twig-bridge/tree/v5.4.9" }, "funding": [ { @@ -3863,50 +4415,52 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "symfony/twig-bundle", - "version": "v3.4.47", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "977b3096e2df96bc8a8d2329e83466cfc30c373d" + "reference": "c992b4474c3a31f3c40a1ca593d213833f91b818" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/977b3096e2df96bc8a8d2329e83466cfc30c373d", - "reference": "977b3096e2df96bc8a8d2329e83466cfc30c373d", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c992b4474c3a31f3c40a1ca593d213833f91b818", + "reference": "c992b4474c3a31f3c40a1ca593d213833f91b818", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/config": "~3.2|~4.0", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "^3.3|~4.0", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.0|^6.0", "symfony/polyfill-ctype": "~1.8", - "symfony/twig-bridge": "^3.4.3|^4.0.3", - "twig/twig": "~1.41|~2.10" + "symfony/polyfill-php80": "^1.16", + "symfony/twig-bridge": "^5.3|^6.0", + "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<3.3.1" + "symfony/dependency-injection": "<5.3", + "symfony/framework-bundle": "<5.0", + "symfony/service-contracts": ">=3.0", + "symfony/translation": "<5.0" }, "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", - "symfony/asset": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.4.24|^4.2.5", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/form": "~2.8|~3.0|~4.0", - "symfony/framework-bundle": "^3.3.11|~4.0", - "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/web-link": "~3.3|~4.0", - "symfony/yaml": "~2.8|~3.0|~4.0" + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", + "symfony/asset": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.0|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "type": "symfony-bundle", "autoload": { @@ -3931,10 +4485,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony TwigBundle", + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v3.4.47" + "source": "https://github.com/symfony/twig-bundle/tree/v5.4.8" }, "funding": [ { @@ -3950,35 +4504,201 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-04-03T13:03:10+00:00" }, { - "name": "symfony/yaml", - "version": "v3.4.47", + "name": "symfony/var-dumper", + "version": "v5.4.9", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "af52239a330fafd192c773795520dc2dd62b5657" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657", + "reference": "af52239a330fafd192c773795520dc2dd62b5657", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/console": "<3.4" + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "twig/twig": "^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" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "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/v5.4.9" + }, + "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" + } + ], + "time": "2022-05-21T10:24:18+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "63249ebfca4e75a357679fa7ba2089cfb898aa67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/63249ebfca4e75a357679fa7ba2089cfb898aa67", + "reference": "63249ebfca4e75a357679fa7ba2089cfb898aa67", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.9" + }, + "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" + } + ], + "time": "2022-05-21T10:24:18+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.3" + }, + "require-dev": { + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", "autoload": { "psr-4": { @@ -4002,10 +4722,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" + "source": "https://github.com/symfony/yaml/tree/v5.4.3" }, "funding": [ { @@ -4021,7 +4741,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-01-26T16:32:32+00:00" }, { "name": "thenetworg/oauth2-azure", @@ -4130,36 +4850,34 @@ }, { "name": "twig/twig", - "version": "v1.42.5", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + "reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/e939eae92386b69b49cfa4599dd9bead6bf4a342", + "reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/polyfill-ctype": "^1.8" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.42-dev" + "dev-master": "3.4-dev" } }, "autoload": { - "psr-0": { - "Twig_": "lib/" - }, "psr-4": { "Twig\\": "src/" } @@ -4192,28 +4910,39 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/1.x" + "source": "https://github.com/twigphp/Twig/tree/v3.4.1" }, - "time": "2020-02-11T05:59:23+00:00" + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-05-17T05:48:52+00:00" } ], "packages-dev": [ { "name": "symfony/stopwatch", - "version": "v3.4.47", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "298b81faad4ce60e94466226b2abbb8c9bca7462" + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/298b81faad4ce60e94466226b2abbb8c9bca7462", - "reference": "298b81faad4ce60e94466226b2abbb8c9bca7462", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { @@ -4238,10 +4967,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Stopwatch Component", + "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v3.4.47" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" }, "funding": [ { @@ -4257,125 +4986,43 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d", - "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" - }, - "require-dev": { - "ext-iconv": "*", - "twig/twig": "~1.34|~2.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "ext-symfony_debug": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v3.4.47" - }, - "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" - } - ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-02-18T16:06:09+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v3.4.47", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "ccb83b3a508f4a683e44f571f127beebdc315ff9" + "reference": "909c6eea7815066a80d0a362ed41abd7924e376a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ccb83b3a508f4a683e44f571f127beebdc315ff9", - "reference": "ccb83b3a508f4a683e44f571f127beebdc315ff9", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/909c6eea7815066a80d0a362ed41abd7924e376a", + "reference": "909c6eea7815066a80d0a362ed41abd7924e376a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/config": "~3.4|~4.0", - "symfony/http-kernel": "~3.4.25|^4.2.6", - "symfony/polyfill-php70": "~1.0", - "symfony/routing": "~3.4.7|~4.0", - "symfony/twig-bundle": "~3.4|~4.0", - "symfony/var-dumper": "~3.3|~4.0", - "twig/twig": "~1.34|~2.4" + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^5.3|^6.0", + "symfony/http-kernel": "^5.3|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<3.3.1", - "symfony/framework-bundle": ">4.3.99", - "symfony/var-dumper": "<3.3" + "symfony/dependency-injection": "<5.2", + "symfony/form": "<4.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<4.4" }, "require-dev": { - "symfony/browser-kit": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/framework-bundle": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0" + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "type": "symfony-bundle", "autoload": { @@ -4400,10 +5047,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony WebProfilerBundle", + "description": "Provides a development tool that gives detailed information about the execution of any request", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v3.4.47" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.8" }, "funding": [ { @@ -4419,7 +5066,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-04-22T08:14:12+00:00" } ], "aliases": [], @@ -4428,7 +5075,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.1.3 <8.0.0", + "php": ">=7.2.5 <8.0.0", "ext-ctype": "*", "ext-dom": "*", "ext-gd": "*", @@ -4439,7 +5086,7 @@ }, "platform-dev": [], "platform-overrides": { - "php": "7.1.3" + "php": "7.2.5" }, "plugin-api-version": "2.1.0" } diff --git a/datamodels/2.x/itop-portal-base/portal/bin/console b/datamodels/2.x/itop-portal-base/portal/bin/console index 02af7bfa0..140caa4db 100644 --- a/datamodels/2.x/itop-portal-base/portal/bin/console +++ b/datamodels/2.x/itop-portal-base/portal/bin/console @@ -14,20 +14,18 @@ set_time_limit(0); if (!defined('APPROOT')) { - if (file_exists(__DIR__.'/../../../../approot.inc.php')) - { - require_once __DIR__.'/../../../../approot.inc.php'; // When in env-xxxx folder - } - else - { - require_once __DIR__.'/../../../../../approot.inc.php'; // When in datamodels/x.x folder - } + if (file_exists(__DIR__.'/../../../../approot.inc.php')) { + require_once __DIR__ . '/../../../../approot.inc.php'; // When in env-xxxx folder + } else { + require_once __DIR__ . '/../../../../../approot.inc.php'; // When in datamodels/x.x folder + } } -require_once APPROOT.'lib/autoload.php'; +require_once APPROOT . 'lib/autoload.php'; -if (!class_exists(Application::class)) -{ - throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); +require_once APPROOT . 'application/startup.inc.php'; + +if (!class_exists(Application::class)) { + throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); } // Remove --portal_id from CLI params to avoid SF CLI conflicts diff --git a/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php b/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php index 2a64a5c79..eb79bf4fc 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php +++ b/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php @@ -21,7 +21,7 @@ // Disable PhpUnhandledExceptionInspection as the exception handling is made by the file including this one /** @noinspection PhpUnhandledExceptionInspection */ -use Symfony\Component\Debug\Debug; +use Symfony\Component\ErrorHandler\Debug; use Symfony\Component\Dotenv\Dotenv; // Global autoloader (portal autoloader is already required through module.itop-portal-base.php) @@ -43,55 +43,43 @@ if (!defined('MODULESROOT')) // Load cached env vars if the .env.local.php file exists // Run "composer dump-env prod" to create it (requires symfony/flex >=1.2) -if (is_array($sEnv = @include dirname(__DIR__).'/.env.local.php')) -{ - $_ENV += $sEnv; -} -elseif (!class_exists(Dotenv::class)) -{ +if (file_exists(dirname(__DIR__).'/.env.local.php')) { + if (is_array($sEnv = @include dirname(__DIR__).'/.env.local.php')) { + $_ENV += $sEnv; + } +} elseif (!class_exists(Dotenv::class)) { throw new RuntimeException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.'); -} -else -{ +} else { $sPath = dirname(__DIR__).'/.env'; $oDotenv = new Dotenv(); + $oDotenv->usePutenv(); // load all the .env files - if (method_exists($oDotenv, 'loadEnv')) - { + if (method_exists($oDotenv, 'loadEnv')) { $oDotenv->loadEnv($sPath); - } - else - { + } else { // fallback code in case your Dotenv component is not 4.2 or higher (when loadEnv() was added) - if (file_exists($sPath) || !file_exists($sPathDist = "$sPath.dist")) - { + if (file_exists($sPath) || !file_exists($sPathDist = "$sPath.dist")) { $oDotenv->load($sPath); - } - else - { + } else { $oDotenv->load($sPathDist); } - if (null === $sEnv = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null))) - { + if (null === $sEnv = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null))) { $oDotenv->populate(array('APP_ENV' => $sEnv = 'prod')); } - if ('test' !== $sEnv && file_exists($sPathDist = "$sPath.local")) - { + if ('test' !== $sEnv && file_exists($sPathDist = "$sPath.local")) { $oDotenv->load($sPathDist); $sEnv = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : $sEnv); } - if (file_exists($sPathDist = "$sPath.$sEnv")) - { + if (file_exists($sPathDist = "$sPath.$sEnv")) { $oDotenv->load($sPathDist); } - if (file_exists($sPathDist = "$sPath.$sEnv.local")) - { + if (file_exists($sPathDist = "$sPath.$sEnv.local")) { $oDotenv->load($sPathDist); } } diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/cache.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/cache.yaml index 37e916327..5e374f117 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/cache.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/packages/cache.yaml @@ -1,10 +1,10 @@ framework: cache: - # Put the unique name of your app here: the prefix seed - # is used to compute stable namespaces for cache keys. + # Unique name of your app: used to compute stable namespaces for cache keys. #prefix_seed: your_vendor_name/app_name - # The app cache caches to the filesystem by default. + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. # Other options include: # Redis @@ -16,4 +16,4 @@ framework: # Namespaced pools use the above "app" backend by default #pools: - #my.dedicated.cache: ~ + #my.dedicated.cache: null diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/dev/routing.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/dev/routing.yaml deleted file mode 100644 index a3d2503d5..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/dev/routing.yaml +++ /dev/null @@ -1,3 +0,0 @@ -framework: - router: - strict_requirements: true diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/dev/web_profiler.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/dev/web_profiler.yaml deleted file mode 100644 index 278d5fd42..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/dev/web_profiler.yaml +++ /dev/null @@ -1,6 +0,0 @@ -web_profiler: - toolbar: true - intercept_redirects: false - -framework: - profiler: { only_exceptions: false } \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/framework.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/framework.yaml index 27b6842c7..b5707a878 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/framework.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/packages/framework.yaml @@ -7,9 +7,25 @@ framework: # Enables session support. Note that the session will ONLY be started if you read or write from it. # Remove or comment this section to explicitly disable session support. session: - handler_id: ~ + handler_id: null + cookie_secure: auto + cookie_samesite: lax + storage_factory_id: session.storage.factory.native #esi: true #fragments: true php_errors: log: true + +when@test: + framework: + test: true + profiler: { collect: false } + router: { strict_requirements: true} + session: + storage_factory_id: session.storage.factory.mock_file + +when@dev: + framework: + profiler: { only_exceptions: false } + router: { strict_requirements: true} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/routing.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/routing.yaml index 17ae54822..8701b05af 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/routing.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/packages/routing.yaml @@ -1,3 +1,17 @@ framework: router: - strict_requirements: ~ + utf8: true + + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null + +when@dev: + framework: + router: + strict_requirements: true \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/test/framework.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/test/framework.yaml deleted file mode 100644 index d153e0d23..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/test/framework.yaml +++ /dev/null @@ -1,4 +0,0 @@ -framework: - test: true - session: - storage_id: session.storage.mock_file diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/test/routing.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/test/routing.yaml deleted file mode 100644 index a3d2503d5..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/test/routing.yaml +++ /dev/null @@ -1,3 +0,0 @@ -framework: - router: - strict_requirements: true diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/test/web_profiler.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/test/web_profiler.yaml deleted file mode 100644 index fd7ff5a35..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/test/web_profiler.yaml +++ /dev/null @@ -1,6 +0,0 @@ -web_profiler: - toolbar: false - intercept_redirects: false - -framework: - profiler: { collect: false } \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/twig.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/twig.yaml index e4a98b501..e17e03cc9 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/packages/twig.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/packages/twig.yaml @@ -2,3 +2,7 @@ twig: default_path: '%combodo.modules.absolute_path%' debug: '%kernel.debug%' strict_variables: '%kernel.debug%' + +when@test: + twig: + strict_variables: true \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/config/packages/web_profiler.yaml b/datamodels/2.x/itop-portal-base/portal/config/packages/web_profiler.yaml new file mode 100644 index 000000000..7676f2292 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/config/packages/web_profiler.yaml @@ -0,0 +1,12 @@ + +when@dev: + web_profiler: + toolbar: true + intercept_redirects: false + +when@test: + web_profiler: + toolbar: false + intercept_redirects: false + + diff --git a/datamodels/2.x/itop-portal-base/portal/config/routes/dev/twig.yaml b/datamodels/2.x/itop-portal-base/portal/config/routes/dev/twig.yaml deleted file mode 100644 index 93c0e4cf8..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/routes/dev/twig.yaml +++ /dev/null @@ -1,3 +0,0 @@ -_errors: - resource: '@TwigBundle/Resources/config/routing/errors.xml' - prefix: /_error diff --git a/datamodels/2.x/itop-portal-base/portal/config/routes/dev/web_profiler.yaml b/datamodels/2.x/itop-portal-base/portal/config/routes/dev/web_profiler.yaml deleted file mode 100644 index df4ab33bf..000000000 --- a/datamodels/2.x/itop-portal-base/portal/config/routes/dev/web_profiler.yaml +++ /dev/null @@ -1,7 +0,0 @@ -web_profiler_wdt: - resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' - prefix: /_wdt - -web_profiler_profiler: - resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' - prefix: /_profiler \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/config/routes/framework.yaml b/datamodels/2.x/itop-portal-base/portal/config/routes/framework.yaml new file mode 100644 index 000000000..0fc74bbac --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/config/routes/framework.yaml @@ -0,0 +1,4 @@ +when@dev: + _errors: + resource: '@FrameworkBundle/Resources/config/routing/errors.xml' + prefix: /_error diff --git a/datamodels/2.x/itop-portal-base/portal/config/routes/web_profiler.yaml b/datamodels/2.x/itop-portal-base/portal/config/routes/web_profiler.yaml new file mode 100644 index 000000000..8d85319fd --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/config/routes/web_profiler.yaml @@ -0,0 +1,8 @@ +when@dev: + web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + prefix: /_wdt + + web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + prefix: /_profiler diff --git a/datamodels/2.x/itop-portal-base/portal/config/services.yaml b/datamodels/2.x/itop-portal-base/portal/config/services.yaml index 249b6b42e..17e82f3f1 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/services.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/services.yaml @@ -24,8 +24,6 @@ imports: # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration parameters: - # Replace default url generator service - router.options.generator_base_class: Combodo\iTop\Portal\Routing\UrlGenerator # Used in templates combodo.current_environment: '%env(string:COMBODO_CURRENT_ENVIRONMENT)%' @@ -100,17 +98,19 @@ services: - '@Combodo\iTop\Portal\Twig\AppVariable.inner' - '@service_container' + Combodo\iTop\Portal\Routing\UrlGenerator: + decorates: 'router' + arguments: ['@Combodo\iTop\Portal\Routing\UrlGenerator.inner'] + # Standard services combodo.current_contact.photo_url: public: true class: Combodo\iTop\Portal\VariableAccessor\CombodoCurrentContactPhotoUrl - arguments: ['@combodo.current_user', '@service_container'] - # Note: This service is initialized with a UserLocal object as it needs a class that can be instantiated. - # Anyway, it will be replaced with the real class by UserProvider in onKernelRequestEvent. - # Note: Services relying on this one should use \User in their signature and not \UserLocal. + arguments: ['@Combodo\iTop\Portal\EventListener\UserProvider', '@service_container'] + combodo.current_user: + alias: Combodo\iTop\Portal\Twig\CurrentUserAccessor public: true - class: UserLocal # Aliases brick_collection: diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/AbstractController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/AbstractController.php index 9d69df51b..89ddeaba0 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/AbstractController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/AbstractController.php @@ -20,7 +20,7 @@ namespace Combodo\iTop\Portal\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use \Symfony\Bundle\FrameworkBundle\Controller\AbstractController as SymfonyAbstractController; /** * Class AbstractController @@ -29,8 +29,37 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; * @author Guillaume Lajarige * @since 2.3.0 */ -abstract class AbstractController extends Controller +abstract class AbstractController extends SymfonyAbstractController { + /** + * Return services needed inside controllers. + * Allow access to service via $controller->get(`service_name`). + * + * Improvement: Use service dependency injection + * + * @return array array of service injected to controllers + * @since 3.1.0 + * + */ + public static function getSubscribedServices(): array + { + return array_merge(parent::getSubscribedServices(), [ + 'brick_collection' => 'Combodo\iTop\Portal\Brick\BrickCollection', + 'request_manipulator' => 'Combodo\iTop\Portal\Helper\RequestManipulatorHelper', + 'scope_validator' => 'Combodo\iTop\Portal\Helper\ScopeValidatorHelper', + 'security_helper' => 'Combodo\iTop\Portal\Helper\SecurityHelper', + 'context_manipulator' => 'Combodo\iTop\Portal\Helper\ContextManipulatorHelper', + 'navigation_rule_helper' => 'Combodo\iTop\Portal\Helper\NavigationRuleHelper', + 'ui_extensions_helper' => 'Combodo\iTop\Portal\Helper\UIExtensionsHelper', + 'lifecycle_validator' => 'Combodo\iTop\Portal\Helper\LifecycleValidatorHelper', + 'url_generator' => 'router', + 'object_form_handler' => 'Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper', + 'browse_brick' => 'Combodo\iTop\Portal\Helper\BrowseBrickHelper', + 'brick_controller_helper' => 'Combodo\iTop\Portal\Helper\BrickControllerHelper', + 'session_message_helper' => 'Combodo\iTop\Portal\Helper\SessionMessageHelper', + ]); + } + /** * Unlike {@see \Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait::redirectToRoute()}, this method directly calls the route controller without creating a redirection client side * diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/AggregatePageBrickController.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/AggregatePageBrickController.class.inc.php index 682b084f7..4fde47639 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/AggregatePageBrickController.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/AggregatePageBrickController.class.inc.php @@ -40,11 +40,11 @@ class AggregatePageBrickController extends BrickController { /** * @param \Symfony\Component\HttpFoundation\Request $oRequest - * @param string $sBrickId + * @param string $sBrickId * * @return \Symfony\Component\HttpFoundation\Response * - * @throws \Combodo\iTop\Portal\Brick\BrickNotFoundException + * @throws BrickNotFoundException * @throws \Exception */ public function DisplayAction(Request $oRequest, $sBrickId) diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetPluginPropertyClass.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetPluginPropertyClass.php index a78973331..7bec67c51 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetPluginPropertyClass.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetPluginPropertyClass.php @@ -20,7 +20,7 @@ namespace Combodo\iTop\Portal\EventListener; use ApplicationContext; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use UserRights; use utils; @@ -34,17 +34,16 @@ use utils; class ApplicationContextSetPluginPropertyClass { /** - * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent + * @param RequestEvent $oRequestEvent */ - public function onKernelRequest(GetResponseEvent $oGetResponseEvent) - { - // Enable archived data - utils::InitArchiveMode(); - - // Enabling datalocalizer if needed - if (!defined('DISABLE_DATA_LOCALIZER_PORTAL')) - { - ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage()); - } - } + public function onKernelRequest(RequestEvent $oRequestEvent) + { + // Enable archived data + utils::InitArchiveMode(); + + // Enabling datalocalizer if needed + if (!defined('DISABLE_DATA_LOCALIZER_PORTAL')) { + ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage()); + } + } } \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php index 286d333c3..c0574e454 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php @@ -20,7 +20,7 @@ namespace Combodo\iTop\Portal\EventListener; use ApplicationContext; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; /** * Class ApplicationContextSetUrlMakerClass @@ -43,13 +43,12 @@ class ApplicationContextSetUrlMakerClass } /** - * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent + * @param RequestEvent $oRequestEvent */ - public function onKernelRequest(GetResponseEvent $oGetResponseEvent) - { - if ($this->aCombodoPortalInstanceConf['properties']['urlmaker_class'] !== null) - { - ApplicationContext::SetUrlMakerClass($this->aCombodoPortalInstanceConf['properties']['urlmaker_class']); - } - } + public function onKernelRequest(RequestEvent $oRequestEvent) + { + if ($this->aCombodoPortalInstanceConf['properties']['urlmaker_class'] !== null) { + ApplicationContext::SetUrlMakerClass($this->aCombodoPortalInstanceConf['properties']['urlmaker_class']); + } + } } \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/CssFromSassCompiler.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/CssFromSassCompiler.php index de5253180..0b914c0dd 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/CssFromSassCompiler.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/CssFromSassCompiler.php @@ -19,7 +19,7 @@ namespace Combodo\iTop\Portal\EventListener; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use utils; /** @@ -47,19 +47,17 @@ class CssFromSassCompiler } /** - * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent + * @param RequestEvent $oRequestEvent */ - public function onKernelRequest(GetResponseEvent $oGetResponseEvent) + public function onKernelRequest(RequestEvent $oRequestEvent) { // Force compilation need only when by-passing cache to limit server load. - if (isset($_SERVER['HTTP_CACHE_CONTROL']) && ($_SERVER['HTTP_CACHE_CONTROL'] !== 'no-cache')) - { + if (isset($_SERVER['HTTP_CACHE_CONTROL']) && ($_SERVER['HTTP_CACHE_CONTROL'] !== 'no-cache')) { return; } $aImportPaths = array($_ENV['COMBODO_PORTAL_BASE_ABSOLUTE_PATH'].'css/'); - foreach ($this->aCombodoPortalInstanceConf['properties']['themes'] as $sKey => $value) - { + foreach ($this->aCombodoPortalInstanceConf['properties']['themes'] as $sKey => $value) { if (!is_array($value)) { utils::GetCSSFromSASS('env-'.utils::GetCurrentEnvironment().'/'.$value, $aImportPaths); diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php index 6b585ffbe..bde7d0f60 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php @@ -24,13 +24,12 @@ namespace Combodo\iTop\Portal\EventListener; use Dict; use ExceptionLog; -use IssueLog; -use Symfony\Component\Debug\Exception\FlattenException; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\ErrorHandler\Exception\FlattenException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; /** @@ -52,10 +51,10 @@ class ExceptionListener implements ContainerAwareInterface * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError */ - public function onKernelException(GetResponseForExceptionEvent $oEvent) + public function onKernelException(ExceptionEvent $oEvent) { // Get the exception object from the received event - $oException = $oEvent->getException(); + $oException = $oEvent->getThrowable(); // Prepare / format exception data if ($oException instanceof \MySQLException) { @@ -78,7 +77,7 @@ class ExceptionListener implements ContainerAwareInterface } // Prepare flatten exception - $oFlattenException = ($_SERVER['APP_DEBUG'] == 1) ? FlattenException::create($oException) : null; + $oFlattenException = ($_SERVER['APP_DEBUG'] == 1) ? FlattenException::createFromThrowable($oException) : null; // Remove APPROOT from file paths if in production (SF context) if (!is_null($oFlattenException) && ($_SERVER['APP_ENV'] === 'prod')) { diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/UserProvider.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/UserProvider.php index da42e9370..439e92fa6 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/UserProvider.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/UserProvider.php @@ -26,7 +26,7 @@ use ModuleDesign; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Exception\HttpException; use UserRights; @@ -44,12 +44,16 @@ class UserProvider implements ContainerAwareInterface private $sPortalId; /** @var \Symfony\Component\DependencyInjection\ContainerInterface $container */ private $oContainer; + /** @var \User $oUser */ + private $oUser; + /** @var array $aAllowedPortals */ + private $aAllowedPortals; /** * UserProvider constructor. * * @param \ModuleDesign $oModuleDesign - * @param string $sPortalId + * @param string $sPortalId */ public function __construct(ModuleDesign $oModuleDesign, $sPortalId) { @@ -58,11 +62,11 @@ class UserProvider implements ContainerAwareInterface } /** - * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent + * @param RequestEvent $oRequestEvent * * @throws \Exception */ - public function onKernelRequest(GetResponseEvent $oGetResponseEvent) + public function onKernelRequest(RequestEvent $oRequestEvent) { // User pre-checks // Note: The following note and handling of the $iExitMethod were for the old login mechanism @@ -71,45 +75,62 @@ class UserProvider implements ContainerAwareInterface // // Note: At this point the Exception handler is not registered, so we can't use $oApp::abort() method, hence the die(). // - Checking user rights and prompt if needed (401 HTTP code returned if XHR request) - $iExitMethod = ($oGetResponseEvent->getRequest()->isXmlHttpRequest()) ? LoginWebPage::EXIT_RETURN : LoginWebPage::EXIT_PROMPT; + $iExitMethod = ($oRequestEvent->getRequest()->isXmlHttpRequest()) ? LoginWebPage::EXIT_RETURN : LoginWebPage::EXIT_PROMPT; $iLogonRes = LoginWebPage::DoLoginEx($this->sPortalId, false, $iExitMethod); - if( ($iExitMethod === LoginWebPage::EXIT_RETURN) && ($iLogonRes != 0) ) - { + if( ($iExitMethod === LoginWebPage::EXIT_RETURN) && ($iLogonRes != 0) ) { die(Dict::S('Portal:ErrorUserLoggedOut')); } // - User must be associated with a Contact - if (UserRights::GetContactId() == 0) - { + if (UserRights::GetContactId() == 0) { die(Dict::S('Portal:ErrorNoContactForThisUser')); } // User - $oUser = UserRights::GetUserObject(); - if ($oUser === null) - { + $this->oUser = UserRights::GetUserObject(); + if ($this->oUser === null) { throw new Exception('Could not load connected user.'); } - $this->oContainer->set('combodo.current_user', $oUser); // Allowed portals $aAllowedPortals = UserRights::GetAllowedPortals(); // Checking that user is allowed this portal $bAllowed = false; - foreach ($aAllowedPortals as $aAllowedPortal) - { - if ($aAllowedPortal['id'] === $this->sPortalId) - { + foreach ($aAllowedPortals as $aAllowedPortal) { + if ($aAllowedPortal['id'] === $this->sPortalId) { $bAllowed = true; break; } } - if (!$bAllowed) - { + if (!$bAllowed) { throw new HttpException(Response::HTTP_NOT_FOUND); } - /** @noinspection PhpParamsInspection It's an array and it's gonna stay that way */ - $this->oContainer->set('combodo.current_user.allowed_portals', $aAllowedPortals); + + $this->aAllowedPortals = $aAllowedPortals; + } + + /** + * Get current user. + * + * @return \User current user + * @since 3.1.0 + * + */ + public function getCurrentUser() + { + return $this->oUser; + } + + /** + * Get allowed portals. + * + * @return array allowed portals + * @since 3.1.0 + * + */ + public function getAllowedPortals() + { + return $this->aAllowedPortals; } /** diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php index 2c36eed94..e77312602 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php @@ -36,7 +36,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; -use Twig_Environment; +use Twig\Environment; +use Twig\Loader\ArrayLoader; use Twig_Loader_Array; use URLButtonItem; use UserRights; @@ -420,7 +421,7 @@ class ObjectFormHandlerHelper public function RenderFormFromTwig($sId, $sTwigString, $aData) { // Creating sandbox twig env. to load and test the custom form template - $oTwig = new Twig_Environment(new Twig_Loader_Array(array($sId => $sTwigString))); + $oTwig = new Environment(new ArrayLoader(array($sId => $sTwigString))); // Manually registering filters and functions as we didn't find how to do it automatically $aFilters = $this->oAppExtension->getFilters(); diff --git a/datamodels/2.x/itop-portal-base/portal/src/Kernel.php b/datamodels/2.x/itop-portal-base/portal/src/Kernel.php index f67bab16c..d0ecb0b21 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Kernel.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Kernel.php @@ -83,9 +83,6 @@ class Kernel extends BaseKernel protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader) { $container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php')); - // Feel free to remove the "container.autowiring.strict_mode" parameter - // if you are using symfony/dependency-injection 4.0+ as it's the default behavior - $container->setParameter('container.autowiring.strict_mode', true); $container->setParameter('container.dumper.inline_class_loader', true); $confDir = $this->getProjectDir().'/config'; diff --git a/datamodels/2.x/itop-portal-base/portal/src/Routing/UrlGenerator.php b/datamodels/2.x/itop-portal-base/portal/src/Routing/UrlGenerator.php index f16ed4f49..1dd2b4e86 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Routing/UrlGenerator.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Routing/UrlGenerator.php @@ -19,43 +19,72 @@ namespace Combodo\iTop\Portal\Routing; +use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RouterInterface; use utils; -use Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator; /** * Class UrlGenerator * + * @author Benjamin Dalsass * @package Combodo\iTop\Portal\Routing - * @since 2.7.0 - * @author Bruno Da Silva - * @author Guillaume Lajarige + * @since 3.1.0 */ -class UrlGenerator extends BaseUrlGenerator +class UrlGenerator implements RouterInterface { - /** @noinspection PhpTooManyParametersInspection */ + /** @var \Symfony\Component\Routing\RouterInterface $router */ + private $router; + /** - * Overloading of the parent function to add the $_REQUEST parameters to the url parameters. - * This is used to keep additional parameters in the url, especially when portal is accessed from the /pages/exec.php + * Constructor. * - * Note: As of now, it only adds the exec_module/exec_page/portal_id/env_switch/debug parameters. Any other parameter will be ignored. - * - * @param $variables - * @param $defaults - * @param $requirements - * @param $tokens - * @param $parameters - * @param $name - * @param $referenceType - * @param $hostTokens - * @param array $requiredSchemes - * - * @return string + * @param \Symfony\Component\Routing\RouterInterface $router */ - protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, array $requiredSchemes = array()) + public function __construct(RouterInterface $router) + { + $this->router = $router; + } + + /** + * @inheritDoc + */ + public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) { $parameters = $this->getExtraParams($parameters); - return parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, $requiredSchemes); + return $this->router->generate($name, $parameters, $referenceType); + } + + /** + * @inheritDoc + */ + public function setContext(RequestContext $context) + { + $this->router->setContext($context); + } + + /** + * @inheritDoc + */ + public function getContext() + { + return $this->router->getContext(); + } + + /** + * @inheritDoc + */ + public function getRouteCollection() + { + return $this->router->getRouteCollection(); + } + + /** + * @inheritDoc + */ + public function match($pathinfo) + { + return $this->router->match($pathinfo); } /** @@ -67,26 +96,22 @@ class UrlGenerator extends BaseUrlGenerator { $sExecModule = utils::ReadParam('exec_module', '', false, 'string'); $sExecPage = utils::ReadParam('exec_page', '', false, 'string'); - if ($sExecModule !== '' && $sExecPage !== '') - { + if ($sExecModule !== '' && $sExecPage !== '') { $aParameters['exec_module'] = $sExecModule; $aParameters['exec_page'] = $sExecPage; } // Optional parameters $sPortalId = utils::ReadParam('portal_id', '', false, 'string'); - if ($sPortalId !== '') - { + if ($sPortalId !== '') { $aParameters['portal_id'] = $sPortalId; } $sEnvSwitch = utils::ReadParam('env_switch', '', false, 'string'); - if ($sEnvSwitch !== '') - { + if ($sEnvSwitch !== '') { $aParameters['env_switch'] = $sEnvSwitch; } $sDebug = utils::ReadParam('debug', '', false, 'string'); - if ($sDebug !== '') - { + if ($sDebug !== '') { $aParameters['debug'] = $sDebug; } diff --git a/datamodels/2.x/itop-portal-base/portal/src/Twig/AppExtension.php b/datamodels/2.x/itop-portal-base/portal/src/Twig/AppExtension.php index 1790b5426..b783fb79b 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Twig/AppExtension.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Twig/AppExtension.php @@ -19,18 +19,9 @@ namespace Combodo\iTop\Portal\Twig; -use AttributeDate; use Combodo\iTop\Application\TwigBase\Twig\Extension; use Twig\Extension\AbstractExtension; -use AttributeDateTime; -use AttributeText; -use Twig_SimpleFilter; -use Twig_SimpleFunction; -use utils; -use Dict; -use MetaModel; - /** * Class AppExtension * diff --git a/datamodels/2.x/itop-portal-base/portal/src/Twig/AppGlobal.php b/datamodels/2.x/itop-portal-base/portal/src/Twig/AppGlobal.php new file mode 100644 index 000000000..a1c3907d4 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/src/Twig/AppGlobal.php @@ -0,0 +1,63 @@ + + * @package Combodo\iTop\Portal\Twig + * @since 3.1.0 + */ +class AppGlobal extends AbstractExtension implements GlobalsInterface +{ + /** @var \Combodo\iTop\Portal\EventListener\UserProvider $userProvider */ + private $userProvider; + + /** + * Constructor. + * + * @param \Combodo\iTop\Portal\EventListener\UserProvider $userProvider + */ + public function __construct(UserProvider $userProvider) + { + $this->userProvider = $userProvider; + } + + /** + * Return global variables. + * + * @return array + */ + public function getGlobals(): array + { + $data = array(); + $data['allowed_portals'] = $this->userProvider->getAllowedPortals(); + + return $data; + } + +} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/Twig/CurrentUserAccessor.php b/datamodels/2.x/itop-portal-base/portal/src/Twig/CurrentUserAccessor.php new file mode 100644 index 000000000..28a1f567a --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/src/Twig/CurrentUserAccessor.php @@ -0,0 +1,64 @@ +> app['combodo.current_user'].Get('first_name') + * To prevent changes in templates we expose a service CurrentUserAccessor with a bridge role. + * + * @author Benjamin Dalsass + * @package Combodo\iTop\Portal\Twig + * @since 3.1.0 + */ +class CurrentUserAccessor +{ + /** @var \Combodo\iTop\Portal\EventListener\UserProvider $userProvider */ + private $userProvider; + + /** + * Constructor. + * + * @param \Combodo\iTop\Portal\EventListener\UserProvider $userProvider + */ + public function __construct(UserProvider $userProvider) + { + $this->userProvider = $userProvider; + } + + /** + * Get (UserLocal meme function) + * + * @param $key + * + * @return int|mixed|\ormLinkSet|string|null + * @throws \ArchivedObjectException + * @throws \CoreException + */ + public function Get($key) + { + return $this->userProvider->getCurrentUser()->Get($key); + } +} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php b/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php index 5ae7f2412..34b3b52f3 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php +++ b/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php @@ -20,10 +20,10 @@ namespace Combodo\iTop\Portal\VariableAccessor; +use Combodo\iTop\Portal\EventListener\UserProvider; use Exception; use MetaModel; use Symfony\Component\DependencyInjection\ContainerInterface; -use User; use UserRights; /** @@ -35,25 +35,24 @@ use UserRights; */ class CombodoCurrentContactPhotoUrl { - /** @var \User $oUser */ - private $oUser; /** @var string $sCombodoPortalBaseAbsoluteUrl */ private $sCombodoPortalBaseAbsoluteUrl; /** @var string|null $sContactPhotoUrl */ private $sContactPhotoUrl; /** @var \Symfony\Component\DependencyInjection\ContainerInterface */ private $oContainer; + /** @var UserProvider $oUserProvider */ + private $oUserProvider; /** * CombodoCurrentContactPhotoUrl constructor. * - * @param \User $oUser * @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer - * @param string $sCombodoPortalBaseAbsoluteUrl + * @param string $sCombodoPortalBaseAbsoluteUrl */ - public function __construct(User $oUser, ContainerInterface $oContainer, $sCombodoPortalBaseAbsoluteUrl) + public function __construct(UserProvider $userProvider, ContainerInterface $oContainer, $sCombodoPortalBaseAbsoluteUrl) { - $this->oUser = $oUser; + $this->oUserProvider = $userProvider; $this->oContainer = $oContainer; $this->sCombodoPortalBaseAbsoluteUrl = $sCombodoPortalBaseAbsoluteUrl; $this->sContactPhotoUrl = null; @@ -65,8 +64,7 @@ class CombodoCurrentContactPhotoUrl */ public function __toString() { - if ($this->sContactPhotoUrl === null) - { + if ($this->sContactPhotoUrl === null) { $this->sContactPhotoUrl = $this->ComputeContactPhotoUrl(); } @@ -84,44 +82,35 @@ class CombodoCurrentContactPhotoUrl // Contact $sContactPhotoUrl = "{$this->sCombodoPortalBaseAbsoluteUrl}img/user-profile-default-256px.png"; // - Checking if we can load the contact - try - { + try { /** @var \cmdbAbstractObject $oContact */ $oContact = UserRights::GetContactObject(); } - catch (Exception $e) - { - $oAllowedOrgSet = $this->oUser->Get('allowed_org_list'); - if ($oAllowedOrgSet->Count() > 0) - { + catch (Exception $e) { + $oUser = $this->oUserProvider->getCurrentUser(); + $oAllowedOrgSet = $oUser->Get('allowed_org_list'); + if ($oAllowedOrgSet->Count() > 0) { throw new Exception('Could not load contact related to connected user. (Tip: Make sure the contact\'s organization is among the user\'s allowed organizations)'); - } - else - { + } else { throw new Exception('Could not load contact related to connected user.'); } } // - Retrieving picture - if ($oContact) - { + if ($oContact) { $sPictureAttCode = 'picture'; - if (MetaModel::IsValidAttCode(get_class($oContact), $sPictureAttCode)) - { + if (MetaModel::IsValidAttCode(get_class($oContact), $sPictureAttCode)) { /** @var \ormDocument $oImage */ $oImage = $oContact->Get($sPictureAttCode); - if (is_object($oImage) && !$oImage->IsEmpty()) - { + if (is_object($oImage) && !$oImage->IsEmpty()) { // TODO: This should be changed when refactoring the ormDocument GetDisplayUrl() and GetDownloadUrl() in iTop 3.0 $sContactPhotoUrl = $this->oContainer->get('url_generator')->generate('p_object_document_display', [ 'sObjectClass' => get_class($oContact), - 'sObjectId' => $oContact->GetKey(), + 'sObjectId' => $oContact->GetKey(), 'sObjectField' => $sPictureAttCode, - 'cache' => 86400, - 's' => $oImage->GetSignature(), - ]); - } - else - { + 'cache' => 86400, + 's' => $oImage->GetSignature(), + ]); + } else { $sContactPhotoUrl = MetaModel::GetAttributeDef(get_class($oContact), $sPictureAttCode)->Get('default_image'); } } diff --git a/datamodels/2.x/itop-portal-base/portal/templates/errors/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/errors/layout.html.twig index 676c9a263..78d5ff17c 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/errors/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/errors/layout.html.twig @@ -22,26 +22,6 @@ margin: 0 5px; } - {# Stack trace is only displayed in debug #} - {% if app['kernel'].debug == true %} - code { - background-color: transparent; - } - - {# Include SF style for the stack trace #} - {{ include('@Twig/exception.css.twig') }} - - {# In production (SF context, not iTop), we hide some element as the code will not be displayed #} - {% if app['kernel'].environment == 'prod' %} - .trace-line-header > .icon{ - display: none !important; - } - .trace-code{ - display: none !important; - - } - {% endif %} - {% endif %} {% endblock %} @@ -61,36 +41,6 @@

- {% if app['kernel'].debug == true %} -
- {# Note: The following is copied by the '@Twig/Exception/exception.html.twig' #} - {% set exception_as_array = exception.toarray %} - {% set _exceptions_with_user_code = [] %} - {% for i, e in exception_as_array %} - {% for trace in e.trace %} - {% if (trace.file is not empty) and ('/vendor/' not in trace.file) and ('/var/cache/' not in trace.file) and not loop.last %} - {% set _exceptions_with_user_code = _exceptions_with_user_code|merge([i]) %} - {% endif %} - {% endfor %} - {% endfor %} -

- {% if exception_as_array|length > 1 %} - Exceptions {{ exception_as_array|length }} - {% else %} - Exception - {% endif %} -

-
- {% for i, e in exception_as_array %} - {{ include('@Twig/Exception/traces.html.twig', { exception: e, index: loop.index, expand: i in _exceptions_with_user_code or (_exceptions_with_user_code is empty and loop.first) }, with_context = false) }} - {% endfor %} -
- {% endif %} - -{% endblock %} - -{% block pPageLiveScripts %} - {{ include('@Twig/base_js.html.twig') }} {% endblock %} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig index 506dbb465..56b0aa404 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig @@ -224,14 +224,14 @@ {% if bUserConnected %}
  • {{ 'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil'|dict_s }}
  • - {% for aPortal in app['combodo.current_user.allowed_portals'] %} + {% for aPortal in allowed_portals %} {% if aPortal.id != app['combodo.portal.instance.conf'].properties.id %} {% set sIconClass = (aPortal.id == 'backoffice') ? 'far fa-list-alt' : 'fas fa-external-link-alt' %}
  • {{ aPortal.label|dict_s }}
  • {% endif %} {% endfor %} {# We display the separator only if the user has more then 1 portal. Meaning default portal + console or several portal at least #} - {% if app['combodo.current_user.allowed_portals']|length > 1 %} + {% if allowed_portals|length > 1 %} {% endif %}
  • {{ 'Brick:Portal:UserProfile:Navigation:Dropdown:Logout'|dict_s }}
  • @@ -263,14 +263,14 @@