diff --git a/.zip-contents b/.zip-contents index 8289fb0..fcae98a 100644 --- a/.zip-contents +++ b/.zip-contents @@ -11,3 +11,5 @@ logo.png config.xml LICENCE README.md +src +.env diff --git a/README.md b/README.md index 917299e..0ca9196 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,122 @@ if (!$moduleManager->isInstalled("ps_eventbus")) { } ``` +## Use the lib mbo_installer for managing dependencies + +Remember that a dependency can be uninstall, disable or not up to date. To help the store to use a full functional package it's recommended to verify that yourself. + +- **First had mbo_installer on composer.json** + +```json +"require": { + //.... Your dependencies here + "prestashop/module-lib-mbo-installer": "^0.1.0" + }, +``` + +This lib is necessary to install the _ps_mbo_ module. +You can forge the install link like this: + +```php +/** + * Example on ModuleHelper.php + */ +if ($moduleName === 'ps_mbo') { + return substr(\Tools::getShopDomainSsl(true) . __PS_BASE_URI__, 0, -1) . + $router->generate('ps_tech_vendor_boilerplate_api_resolver', [ + 'query' => 'installPsMbo', + ]); +} +``` + +and call it like this: + +```php +/** + * Example on BoilerplateResolverController.php + * + * Install ps_mbo module + * + * @return Response + */ +public function installPsMbo(): Response +{ + $mboInstaller = new MBOInstaller(_PS_VERSION_); + + return new Response(json_encode($mboInstaller->installModule(), JSON_FORCE_OBJECT), 200, [ + 'Content-Type' => 'application/json', + ]); +} +``` + +- **Verify the dependencies** + +You can now access all the technical properties of the dependencies and return their state to your template: + +```php +/** + * Example on BoilerplateController.php + * + * Build informations about module + * + * @param string $moduleName + * + * @return array + */ +public function buildModuleInformation(string $moduleName) +{ + return [ + 'technicalName' => $moduleName, + 'displayName' => $this->getDisplayName($moduleName), + 'isInstalled' => $this->isInstalled($moduleName), + 'isEnabled' => $this->isEnabled($moduleName), + 'isUpToDate' => $this->isUpToDate($moduleName), + 'linkInstall' => $this->getInstallLink($moduleName), + 'linkEnable' => $this->getEnableLink($moduleName), + 'linkUpdate' => $this->getUpdateLink($moduleName), + ]; +} +``` + +`isUpToDate` comes from the ps_mbo module: + +```php +/** + * Example on ModuleHelper.php + * + * returns true/false when module is out/up to date, and null when ps_mbo is not installed + * + * @param string $moduleName + * + * @return bool|null + */ +public function isUpToDate(string $moduleName) +{ + $mboModule = \Module::getInstanceByName('ps_mbo'); + + if (!$mboModule) { + return null; + } + + try { + $mboHelper = $mboModule->get('mbo.modules.helper'); + } catch (\Exception $e) { + return null; + } + + if (!$mboHelper) { + return null; + } + + $moduleVersionInfos = $mboHelper->findForUpdates($moduleName); + + return $moduleVersionInfos['upgrade_available']; +} +``` + +> [!CAUTION] +> A module not installed, not up to date or disabled must be a blocking situation to ensure the proper functioning of ps-eventbus + ## Add context for the CDC To allow the merchant to share its data with your services, you have to pair your module with a Cross Domain Component. diff --git a/composer.json b/composer.json index 6644625..c13391f 100644 --- a/composer.json +++ b/composer.json @@ -18,11 +18,22 @@ "ext-xmlwriter": "*", "ext-zip": "*", "php": ">=7.1", - "prestashop/module-lib-service-container": "^2.0" + "vlucas/phpdotenv": "^3.6", + "prestashop/module-lib-service-container": "^2.0", + "prestashop/module-lib-mbo-installer": "^0.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.35.1", - "prestashop/php-dev-tools": "^4.3.0", - "phpstan/phpstan": "^1.10.38" + "phpstan/phpstan": "^1.10.15", + "friendsofphp/php-cs-fixer": "^3.16.0", + "prestashop/php-dev-tools": "^4.3" + }, + "autoload": { + "classmap": [ + "ps_tech_vendor_boilerplate.php" + ], + "psr-4": { + "PrestaShop\\Module\\Ps_tech_vendor_boilerplate\\": "src/", + "exclude-from-classmap\\": [] + } } } diff --git a/composer.lock b/composer.lock index 237e768..db8c1c7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,127 +4,910 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9f78fdac128b9b0a7450085f954b8593", + "content-hash": "df802a29f5019ec1e85dbc4a11dd96b6", "packages": [ + { + "name": "clue/stream-filter", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-20T15:40:13+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-04-17T16:00:37+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/master" + }, + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/message", + "version": "1.16.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "5997f3289332c699fa2545c427826272498a2088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/5997f3289332c699fa2545c427826272498a2088", + "reference": "5997f3289332c699fa2545c427826272498a2088", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.16.1" + }, + "time": "2024-03-07T13:22:09+00:00" + }, + { + "name": "php-http/promise", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.2", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-11-12T21:59:55+00:00" + }, { "name": "prestashop/module-lib-cache-directory-provider", "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/PrestaShopCorp/module-lib-cache-directory-provider.git", - "reference": "34a577b66a7e52ae16d6f40efd1db17290bad453" + "url": "https://github.com/PrestaShopCorp/module-lib-cache-directory-provider.git", + "reference": "34a577b66a7e52ae16d6f40efd1db17290bad453" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShopCorp/module-lib-cache-directory-provider/zipball/34a577b66a7e52ae16d6f40efd1db17290bad453", + "reference": "34a577b66a7e52ae16d6f40efd1db17290bad453", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.7" + }, + "type": "project", + "autoload": { + "psr-4": { + "PrestaShop\\ModuleLibCacheDirectoryProvider\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AFL-3.0" + ], + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + } + ], + "description": "Cache directory provider to use on prestashop modules", + "keywords": [ + "composer", + "modules", + "package", + "prestashop" + ], + "support": { + "issues": "https://github.com/PrestaShopCorp/module-lib-cache-directory-provider/issues", + "source": "https://github.com/PrestaShopCorp/module-lib-cache-directory-provider/tree/master" + }, + "time": "2020-09-08T14:13:23+00:00" + }, + { + "name": "prestashop/module-lib-guzzle-adapter", + "version": "v0.6", + "source": { + "type": "git", + "url": "https://github.com/PrestaShopCorp/module-lib-guzzle-adapter.git", + "reference": "451477b899b6fae8865a0face5b3362b07a1f947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShopCorp/module-lib-guzzle-adapter/zipball/451477b899b6fae8865a0face5b3362b07a1f947", + "reference": "451477b899b6fae8865a0face5b3362b07a1f947", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "~1.9", + "php": ">=5.6.0", + "php-http/httplug": "~1.1", + "php-http/message": "^1.7", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.7", + "phpunit/phpunit": "^9.5|^8.5|^5.7", + "prestashop/php-dev-tools": "^4.2|^3.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Prestashop\\ModuleLibGuzzleAdapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AFL-3.0" + ], + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + } + ], + "description": "Plug modules to the Guzzle client available on a running shop", + "support": { + "issues": "https://github.com/PrestaShopCorp/module-lib-guzzle-adapter/issues", + "source": "https://github.com/PrestaShopCorp/module-lib-guzzle-adapter/tree/v0.6" + }, + "time": "2023-01-11T15:09:56+00:00" + }, + { + "name": "prestashop/module-lib-mbo-installer", + "version": "v0.1", + "source": { + "type": "git", + "url": "https://github.com/PrestaShopCorp/module-lib-mbo-installer.git", + "reference": "c9e598307ef17975e10c98c98538c2d3512b962b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShopCorp/module-lib-mbo-installer/zipball/c9e598307ef17975e10c98c98538c2d3512b962b", + "reference": "c9e598307ef17975e10c98c98538c2d3512b962b", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "prestashop/module-lib-guzzle-adapter": "^0.6" + }, + "require-dev": { + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5|^8.5|^5.7", + "prestashop/php-dev-tools": "^4.2|^3.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Prestashop\\ModuleLibMboInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AFL-3.0" + ], + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + }, + { + "name": "Mikatux", + "email": "mickael@mayeur.eu" + } + ], + "description": "A helper to ease the download PS MBO from the Addons Marketplace", + "support": { + "issues": "https://github.com/PrestaShopCorp/module-lib-mbo-installer/issues", + "source": "https://github.com/PrestaShopCorp/module-lib-mbo-installer/tree/v0.1" + }, + "time": "2023-02-06T10:42:50+00:00" + }, + { + "name": "prestashop/module-lib-service-container", + "version": "v2.0", + "source": { + "type": "git", + "url": "https://github.com/PrestaShopCorp/module-lib-service-container.git", + "reference": "5525b56513d9ddad6e4232dfd93a24e028efdca7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShopCorp/module-lib-service-container/zipball/5525b56513d9ddad6e4232dfd93a24e028efdca7", + "reference": "5525b56513d9ddad6e4232dfd93a24e028efdca7", + "shasum": "" + }, + "require": { + "php": ">=5.6.0", + "prestashop/module-lib-cache-directory-provider": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.7" + }, + "suggest": { + "symfony/config": "Needed when the running PrestaShop does not already run with Symfony", + "symfony/dependency-injection": "Needed when the running PrestaShop does not already run with Symfony", + "symfony/expression-language": "Needed when the running PrestaShop does not already run with Symfony", + "symfony/yaml": "Needed when the running PrestaShop does not already run with Symfony" + }, + "type": "library", + "autoload": { + "psr-4": { + "PrestaShop\\ModuleLibServiceContainer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AFL-3.0" + ], + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + } + ], + "description": "Service container to use on prestashop modules", + "keywords": [ + "composer", + "modules", + "package", + "prestashop" + ], + "support": { + "issues": "https://github.com/PrestaShopCorp/module-lib-service-container/issues", + "source": "https://github.com/PrestaShopCorp/module-lib-service-container/tree/v2.0" + }, + "time": "2022-06-20T08:30:47+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/module-lib-cache-directory-provider/zipball/34a577b66a7e52ae16d6f40efd1db17290bad453", - "reference": "34a577b66a7e52ae16d6f40efd1db17290bad453", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "~5.7" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, - "type": "project", "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "PrestaShop\\ModuleLibCacheDirectoryProvider\\": "src/" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "AFL-3.0" + "MIT" ], "authors": [ { - "name": "PrestaShop SA", - "email": "contact@prestashop.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Cache directory provider to use on prestashop modules", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", "keywords": [ - "composer", - "modules", - "package", - "prestashop" + "compatibility", + "ctype", + "polyfill", + "portable" ], "support": { - "issues": "https://github.com/PrestaShopCorp/module-lib-cache-directory-provider/issues", - "source": "https://github.com/PrestaShopCorp/module-lib-cache-directory-provider/tree/master" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, - "time": "2020-09-08T14:13:23+00:00" + "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": "2024-01-29T20:11:03+00:00" }, { - "name": "prestashop/module-lib-service-container", - "version": "v2.0", + "name": "vlucas/phpdotenv", + "version": "v3.6.10", "source": { "type": "git", - "url": "https://github.com/PrestaShopCorp/module-lib-service-container.git", - "reference": "5525b56513d9ddad6e4232dfd93a24e028efdca7" + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "5b547cdb25825f10251370f57ba5d9d924e6f68e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/module-lib-service-container/zipball/5525b56513d9ddad6e4232dfd93a24e028efdca7", - "reference": "5525b56513d9ddad6e4232dfd93a24e028efdca7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/5b547cdb25825f10251370f57ba5d9d924e6f68e", + "reference": "5b547cdb25825f10251370f57ba5d9d924e6f68e", "shasum": "" }, "require": { - "php": ">=5.6.0", - "prestashop/module-lib-cache-directory-provider": "^1.0" + "php": "^5.4 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.5.2", + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { - "phpunit/phpunit": "~5.7" + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21" }, "suggest": { - "symfony/config": "Needed when the running PrestaShop does not already run with Symfony", - "symfony/dependency-injection": "Needed when the running PrestaShop does not already run with Symfony", - "symfony/expression-language": "Needed when the running PrestaShop does not already run with Symfony", - "symfony/yaml": "Needed when the running PrestaShop does not already run with Symfony" + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6-dev" + } + }, "autoload": { "psr-4": { - "PrestaShop\\ModuleLibServiceContainer\\": "src/" + "Dotenv\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "AFL-3.0" + "BSD-3-Clause" ], "authors": [ { - "name": "PrestaShop SA", - "email": "contact@prestashop.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" } ], - "description": "Service container to use on prestashop modules", + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", "keywords": [ - "composer", - "modules", - "package", - "prestashop" + "dotenv", + "env", + "environment" ], "support": { - "issues": "https://github.com/PrestaShopCorp/module-lib-service-container/issues", - "source": "https://github.com/PrestaShopCorp/module-lib-service-container/tree/v2.0" + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v3.6.10" }, - "time": "2022-06-20T08:30:47+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:02:06+00:00" } ], "packages-dev": [ { "name": "composer/pcre", - "version": "3.1.1", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { @@ -166,7 +949,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "source": "https://github.com/composer/pcre/tree/3.1.3" }, "funding": [ { @@ -182,7 +965,7 @@ "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2024-03-19T10:26:25+00:00" }, { "name": "composer/semver", @@ -267,16 +1050,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -287,7 +1070,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -311,9 +1094,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -329,54 +1112,54 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-03-26T18:29:49+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.35.1", + "version": "v3.54.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "ec1ccc264994b6764882669973ca435cf05bab08" + "reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/ec1ccc264994b6764882669973ca435cf05bab08", - "reference": "ec1ccc264994b6764882669973ca435cf05bab08", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2aecbc8640d7906c38777b3dcab6f4ca79004d08", + "reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3 || ^2.0", + "infection/infection": "^0.27.11", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", + "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -414,7 +1197,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.35.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.54.0" }, "funding": [ { @@ -422,25 +1205,25 @@ "type": "github" } ], - "time": "2023-10-12T13:47:26+00:00" + "time": "2024-04-17T08:12:13+00:00" }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.19.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", @@ -476,22 +1259,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-03-17T08:10:35+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.38", + "version": "1.10.67", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691" + "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691", - "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493", "shasum": "" }, "require": { @@ -534,13 +1317,9 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2023-10-06T14:19:14+00:00" + "time": "2024-04-16T07:22:02+00:00" }, { "name": "prestashop/autoindex", @@ -841,29 +1620,29 @@ }, { "name": "sebastian/diff", - "version": "5.0.3", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "reference": "ab83243ecc233de5655b76f577711de9f842e712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ab83243ecc233de5655b76f577711de9f842e712", + "reference": "ab83243ecc233de5655b76f577711de9f842e712", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -896,7 +1675,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.1" }, "funding": [ { @@ -904,20 +1683,20 @@ "type": "github" } ], - "time": "2023-05-01T07:48:21+00:00" + "time": "2024-03-02T07:30:33+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "version": "3.9.2", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480", + "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480", "shasum": "" }, "require": { @@ -927,11 +1706,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -946,35 +1725,58 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "standards", "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2023-02-22T23:07:41+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-04-23T20:25:34+00:00" }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", + "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", "shasum": "" }, "require": { @@ -982,7 +1784,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -996,12 +1798,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -1035,7 +1841,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v6.4.7" }, "funding": [ { @@ -1051,11 +1857,11 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -1102,7 +1908,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -1122,24 +1928,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.0.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db2a7fab994d67d92356bb39c367db115d9d30f9", + "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -1148,13 +1954,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -1182,7 +1988,7 @@ "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/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.7" }, "funding": [ { @@ -1198,20 +2004,20 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2024-04-18T09:29:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "4e64b49bf370ade88e567de29465762e316e4224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", + "reference": "4e64b49bf370ade88e567de29465762e316e4224", "shasum": "" }, "require": { @@ -1258,7 +2064,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" }, "funding": [ { @@ -1274,26 +2080,27 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/78dde75f8f6dbbca4ec436a4b0087f7af02076d4", + "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4", "shasum": "" }, "require": { "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "symfony/polyfill-mbstring": "~1.8", + "symfony/process": "^5.4|^6.4" }, "type": "library", "autoload": { @@ -1321,7 +2128,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + "source": "https://github.com/symfony/filesystem/tree/v6.4.7" }, "funding": [ { @@ -1337,27 +2144,27 @@ "type": "tidelift" } ], - "time": "2023-06-01T08:30:39+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "511c48990be17358c23bf45c5d71ab85d40fb764" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/511c48990be17358c23bf45c5d71ab85d40fb764", + "reference": "511c48990be17358c23bf45c5d71ab85d40fb764", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -1385,7 +2192,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v6.4.7" }, "funding": [ { @@ -1401,24 +2208,24 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2024-04-23T10:36:43+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.3.0", + "version": "v7.0.7", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" + "reference": "23cc173858776ad451e31f053b1c9f47840b2cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/23cc173858776ad451e31f053b1c9f47840b2cfa", + "reference": "23cc173858776ad451e31f053b1c9f47840b2cfa", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -1452,89 +2259,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.3.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": "2023-05-12T14:21:09+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.0.7" }, "funding": [ { @@ -1550,20 +2275,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-04-18T09:29:19+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -1574,9 +2299,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1615,7 +2337,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -1631,20 +2353,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -1655,9 +2377,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1699,7 +2418,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -1715,20 +2434,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -1742,9 +2461,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1782,7 +2498,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -1798,20 +2514,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -1819,9 +2535,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1865,7 +2578,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -1881,20 +2594,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", "shasum": "" }, "require": { @@ -1902,9 +2615,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1944,7 +2654,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" }, "funding": [ { @@ -1960,20 +2670,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "cdb1c81c145fd5aa9b0038bab694035020943381" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381", + "reference": "cdb1c81c145fd5aa9b0038bab694035020943381", "shasum": "" }, "require": { @@ -2005,7 +2715,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v6.4.7" }, "funding": [ { @@ -2021,25 +2731,25 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -2087,7 +2797,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" }, "funding": [ { @@ -2103,24 +2813,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-19T21:51:00+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.3.0", + "version": "v7.0.7", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" + "reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/41a7a24aa1dc82adf46a06bc292d1923acfe6b84", + "reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -2149,7 +2859,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v7.0.7" }, "funding": [ { @@ -2165,24 +2875,24 @@ "type": "tidelift" } ], - "time": "2023-02-16T10:14:28+00:00" + "time": "2024-04-18T09:29:19+00:00" }, { "name": "symfony/string", - "version": "v6.3.5", + "version": "v7.0.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" + "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", + "url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63", + "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -2192,11 +2902,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2235,7 +2945,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.5" + "source": "https://github.com/symfony/string/tree/v7.0.7" }, "funding": [ { @@ -2251,7 +2961,7 @@ "type": "tidelift" } ], - "time": "2023-09-18T10:38:32+00:00" + "time": "2024-04-18T09:29:19+00:00" } ], "aliases": [], @@ -2268,5 +2978,5 @@ "php": ">=7.1" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/config/admin/services.yml b/config/admin/services.yml new file mode 100644 index 0000000..9d263be --- /dev/null +++ b/config/admin/services.yml @@ -0,0 +1,20 @@ +services: + _defaults: + public: true + + ps_tech_vendor_boilerplate.module: + class: "Ps_tech_vendor_boilerplate" + factory: ["Module", "getInstanceByName"] + arguments: + - "ps_tech_vendor_boilerplate" + + PrestaShop\Module\Ps_tech_vendor_boilerplate\Helper\ModuleHelper: + class: PrestaShop\Module\Ps_tech_vendor_boilerplate\Helper\ModuleHelper + arguments: + - "@ps_tech_vendor_boilerplate.module" + + PrestaShop\Module\Ps_tech_vendor_boilerplate\Config\Env: + class: PrestaShop\Module\Ps_tech_vendor_boilerplate\Config\Env + arguments: + - "@ps_tech_vendor_boilerplate.module" + diff --git a/config/routes.yml b/config/routes.yml new file mode 100644 index 0000000..3a37b4c --- /dev/null +++ b/config/routes.yml @@ -0,0 +1,14 @@ +ps_tech_vendor_boilerplate_api_resolver: + path: ps_tech_vendor_boilerplate/api/{query} + methods: [GET, POST] + defaults: + query: "" + _controller: 'PrestaShop\Module\Ps_tech_vendor_boilerplate\Controller\Admin\BoilerplateResolverController::resolve' + +ps_tech_vendor_boilerplate: + path: ps_tech_vendor_boilerplate + methods: [GET] + defaults: + _controller: 'PrestaShop\Module\Ps_tech_vendor_boilerplate\Controller\Admin\BoilerplateController::renderApp' + _legacy_controller: 'BoilerplateController' + _legacy_link: "BoilerplateController" diff --git a/config/services.yml b/config/services.yml deleted file mode 100644 index 0baad47..0000000 --- a/config/services.yml +++ /dev/null @@ -1 +0,0 @@ -services: diff --git a/ps_tech_vendor_boilerplate.php b/ps_tech_vendor_boilerplate.php index 38f6976..0b01b16 100644 --- a/ps_tech_vendor_boilerplate.php +++ b/ps_tech_vendor_boilerplate.php @@ -68,7 +68,7 @@ public function __construct() /** * @return bool * - * @throws \PrestaShop\PrestaShop\Core\Domain\Theme\Exception\FailedToEnableThemeModuleException + * @throws PrestaShop\PrestaShop\Core\Domain\Theme\Exception\FailedToEnableThemeModuleException * @throws ErrorException */ public function install() @@ -106,75 +106,26 @@ public function getService($serviceName) } /** - * Load the configuration form + * Load the configuration page. * - * @return false|string + * @return string + * @return void * - * @throws SmartyException - * @throws ErrorException + * @throws PrestaShopException */ public function getContent() { - $this->context->smarty->assign('module_dir', $this->_path); + $link = $this->context->link; - $output = $this->context->smarty->fetch($this->local_path . 'views/templates/admin/configure.tpl'); - - $instance = ModuleManagerBuilder::getInstance(); - if ($instance == null) { - throw new ErrorException('No ModuleManagerBuilder instance'); + if (null == $link) { + throw new PrestaShopException('Link is null'); } - $moduleManager = $instance->build(); - /* - if ($moduleManager->isInstalled("ps_accounts")) { - - $accountsModule = \Module::getInstanceByName("ps_accounts"); - $accountPresenterService = - $accountsModule->getService('PrestaShop\Module\PsAccounts\Presenter\PsAccountsPresenter'); - - Media::addJsDef([ - 'contextPsAccounts' => $accountPresenterService->present($this->name), - ]); - } - */ - if ($moduleManager->isInstalled('ps_eventbus')) { - $eventbusModule = \Module::getInstanceByName('ps_eventbus'); - if (isset($eventbusModule->version) && version_compare($eventbusModule->version, '1.9.0', '>=')) { - // also use is_callable ? - if (!method_exists($eventbusModule, 'getService')) { - throw new ErrorException("getService doesn't exist on ps_eventbus"); - } - $eventbusPresenterService = - $eventbusModule->getService('PrestaShop\Module\PsEventbus\Service\PresenterService'); - - Media::addJsDef([ - 'contextPsEventbus' => $eventbusPresenterService->expose($this, [ - 'carriers', - 'carts', - 'categories', - 'currencies', - 'customers', - 'employees', - 'images', - 'info', - 'languages', - 'manufacturers', - 'modules', - 'orders', - 'products', - 'stocks', - 'stores', - 'suppliers', - 'taxonomies', - 'themes', - 'translations', - 'wishlists', - ]), - ]); - } - } - - return $output; + Tools::redirectAdmin( + $link->getAdminLink('BoilerplateController', true, [ + 'route' => 'ps_tech_vendor_boilerplate', + ]) + ); } /** diff --git a/src/Config/Env.php b/src/Config/Env.php new file mode 100644 index 0000000..d8b3fc2 --- /dev/null +++ b/src/Config/Env.php @@ -0,0 +1,53 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + +namespace PrestaShop\Module\Ps_tech_vendor_boilerplate\Config; + +use Dotenv\Dotenv; + +/** + * This class allows to retrieve config data that can be overwritten by a .env file. + * Otherwise it returns by default from the Config class. + */ +class Env +{ + public function __construct(\Ps_tech_vendor_boilerplate $module) + { + if (file_exists(_PS_MODULE_DIR_ . $module->name . '/.env')) { + $dotenv = Dotenv::create(_PS_MODULE_DIR_ . $module->name . '/'); + $dotenv->load(); + } + } + + /** + * @param string $key + * + * @return string + */ + public function get($key) + { + if (!empty($_ENV[$key])) { + return $_ENV[$key]; + } + + return ''; + } +} diff --git a/src/Controller/Admin/BoilerplateController.php b/src/Controller/Admin/BoilerplateController.php new file mode 100644 index 0000000..ea8a06b --- /dev/null +++ b/src/Controller/Admin/BoilerplateController.php @@ -0,0 +1,116 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + +namespace PrestaShop\Module\Ps_tech_vendor_boilerplate\Controller\Admin; + +use PrestaShop\Module\Ps_tech_vendor_boilerplate\Config\Env; +use PrestaShop\PrestaShop\Core\Addon\Module\ModuleManagerBuilder; +use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController; + +class BoilerplateController extends FrameworkBundleAdminController +{ + /** + * Initialize the content by loading the Twig template + * + * @return Response + */ + public function renderApp() + { + $contextPsEventbus = null; + $contextPsAccounts = null; + + /** @var Ps_tech_vendor_boilerplate $psTechVendorBoilerplateModule */ + $psTechVendorBoilerplateModule = \Module::getInstanceByName('ps_tech_vendor_boilerplate'); + if (!$psTechVendorBoilerplateModule) { + throw new \PrestaShopException('Module ps_tech_vendor_boilerplate not found'); + } + + $moduleHelper = $psTechVendorBoilerplateModule->getService('PrestaShop\Module\Ps_tech_vendor_boilerplate\Helper\ModuleHelper'); + + /** @var Env $envService */ + $envService = $psTechVendorBoilerplateModule->getService('PrestaShop\Module\Ps_tech_vendor_boilerplate\Config\Env'); + + $instance = ModuleManagerBuilder::getInstance(); + if ($instance == null) { + throw new \PrestaShopException('No ModuleManagerBuilder instance'); + } + + $moduleManager = $instance->build(); + + if ($moduleManager->isInstalled('ps_accounts')) { + $accountsModule = \Module::getInstanceByName('ps_accounts'); + $accountPresenterService = $accountsModule->getService('PrestaShop\Module\PsAccounts\Presenter\PsAccountsPresenter'); + $contextPsAccounts = $accountPresenterService->present($psTechVendorBoilerplateModule->name); + } + + if ($moduleManager->isInstalled('ps_eventbus')) { + $eventbusModule = \Module::getInstanceByName('ps_eventbus'); + if (isset($eventbusModule->version) && version_compare($eventbusModule->version, '1.9.0', '>=')) { + // also use is_callable ? + if (!method_exists($eventbusModule, 'getService')) { + throw new \PrestaShopException("getService doesn't exist on ps_eventbus"); + } + $eventbusPresenterService = $eventbusModule->getService('PrestaShop\Module\PsEventbus\Service\PresenterService'); + + $contextPsEventbus = $eventbusPresenterService->expose($psTechVendorBoilerplateModule, [ + 'carriers', + 'carts', + 'categories', + 'currencies', + 'customers', + 'employees', + 'images', + 'info', + 'languages', + 'manufacturers', + 'modules', + 'orders', + 'products', + 'stocks', + 'stores', + 'suppliers', + 'taxonomies', + 'themes', + 'translations', + 'wishlists', + ]); + } + } + + return $this->render( + '@Modules/ps_tech_vendor_boilerplate/views/templates/admin/configure.html.twig', + [ + 'contextPsEventbus' => $contextPsEventbus, + 'contextPsAccounts' => $contextPsAccounts, + 'mscUiUrl' => $envService->get('MSC_UI_URL'), + 'eventbusModule' => $moduleHelper->buildModuleInformation( + 'ps_eventbus' + ), + 'accountsModule' => $moduleHelper->buildModuleInformation( + 'ps_accounts' + ), + 'mboModule' => $moduleHelper->buildModuleInformation( + 'ps_mbo' + ), + ] + ); + } +} diff --git a/src/Controller/Admin/BoilerplateResolverController.php b/src/Controller/Admin/BoilerplateResolverController.php new file mode 100644 index 0000000..ff437e5 --- /dev/null +++ b/src/Controller/Admin/BoilerplateResolverController.php @@ -0,0 +1,116 @@ + + * @copyright 2007-2023 PrestaShop SA + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + * International Registered Trademark & Property of PrestaShop SA + * + */ + +namespace PrestaShop\Module\Ps_tech_vendor_boilerplate\Controller\Admin; + +use Prestashop\ModuleLibMboInstaller\Installer as MBOInstaller; +use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; + +class BoilerplateResolverController extends FrameworkBundleAdminController +{ + /** + * @var \Ps_tech_vendor_boilerplate + */ + private $module; + + public function __construct() + { + $this->module = \Module::getInstanceByName('ps_tech_vendor_boilerplate'); + } + + /** + * Api endpoint + * + * @param Request $request + * @param string $query + * + * @return Response + * + * @throws \Exception + */ + public function resolve(Request $request, string $query) + { + try { + if (is_callable([$this, $query])) { + /** @var callable $args */ + $args = [$this, $query]; + + /** @var Response $result */ + $result = call_user_func($args); + + return $result; + } + } catch (\Throwable $th) { + throw new \Exception('#001 Message : ' . $th->getMessage()); + } + + return new Response('Not found', 404); + } + + /** + * Install ps_mbo module + * + * @return Response + */ + public function installPsMbo(): Response + { + $mboInstaller = new MBOInstaller(_PS_VERSION_); + + return new Response(json_encode($mboInstaller->installModule(), JSON_FORCE_OBJECT), 200, [ + 'Content-Type' => 'application/json', + ]); + } + + /** + * Return dependencies information + * + * @return Response + */ + public function getModulesInformation(): Response + { + $moduleHelper = $this->module->get('PrestaShop\Module\Ps_tech_vendor_boilerplate\Helper\ModuleHelper'); + + if (!$moduleHelper) { + return new Response('Module helper not found', 404); + } + + $modulesInformation = [ + 'eventBus' => $moduleHelper->buildModuleInformation( + 'ps_eventbus' + ), + 'accounts' => $moduleHelper->buildModuleInformation( + 'ps_accounts' + ), + ]; + + return new Response(json_encode($modulesInformation, JSON_FORCE_OBJECT), 200, [ + 'Content-Type' => 'application/json', + ]); + } +} diff --git a/src/Helper/ModuleHelper.php b/src/Helper/ModuleHelper.php new file mode 100644 index 0000000..b42aa1a --- /dev/null +++ b/src/Helper/ModuleHelper.php @@ -0,0 +1,271 @@ + + * @copyright 2007-2023 PrestaShop SA + * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) + * International Registered Trademark & Property of PrestaShop SA + * + */ + +namespace PrestaShop\Module\Ps_tech_vendor_boilerplate\Helper; + +use PrestaShop\PrestaShop\Core\Addon\Module\ModuleManagerBuilder; +use PrestaShop\PrestaShop\Core\Module\ModuleManager; +use PrestaShopBundle\Service\Routing\Router; + +class ModuleHelper +{ + /** + * @var \Ps_tech_vendor_boilerplate + */ + private $module; + + /** + * @var ModuleManager + */ + private $moduleManager; + + public function __construct(\Ps_tech_vendor_boilerplate $module) + { + $this->module = $module; + + $moduleManagerBuilder = ModuleManagerBuilder::getInstance(); + + if (is_null($moduleManagerBuilder)) { + return; + } + + $this->moduleManager = $moduleManagerBuilder->build(); + } + + /** + * returns the module install status + * + * @param string $moduleName + * + * @return bool + */ + public function isInstalled(string $moduleName) + { + return $this->moduleManager->isInstalled($moduleName); + } + + /** + * returns the module enable status + * + * @param string $moduleName + * + * @return bool + */ + public function isEnabled(string $moduleName) + { + return $this->moduleManager->isEnabled($moduleName); + } + + /** + * @param string $moduleName + * + * @return bool + */ + public function isInstalledAndActive(string $moduleName) + { + return $this->isInstalled($moduleName) && $this->isEnabled($moduleName); + } + + /** + * returns true/false when module is out/up to date, and null when ps_mbo is not installed + * + * @param string $moduleName + * + * @return bool|null + */ + public function isUpToDate(string $moduleName) + { + $mboModule = \Module::getInstanceByName('ps_mbo'); + + if (!$mboModule) { + return null; + } + + try { + $mboHelper = $mboModule->get('mbo.modules.helper'); + } catch (\Exception $e) { + return null; + } + + if (!$mboHelper) { + return null; + } + + $moduleVersionInfos = $mboHelper->findForUpdates($moduleName); + + return $moduleVersionInfos['upgrade_available']; + } + + /** + * @param string $moduleName + * + * @return false|\ModuleCore + */ + public function getInstanceByName(string $moduleName) + { + return \ModuleCore::getInstanceByName($moduleName); + } + + /** + * returns the display name of the module + * + * @param string $moduleName + * + * @return string + */ + public function getDisplayName(string $moduleName) + { + if (false === $this->isInstalled($moduleName)) { + return ''; + } + + $module = $this->getInstanceByName($moduleName); + + if (false === $module) { + return ''; + } + + return $module->displayName; + } + + /** + * returns the installation link of the module if it is not installed. If installed, returns an empty string + * + * @param string $moduleName + * + * @return string + */ + public function getInstallLink(string $moduleName) + { + if (true === $this->isInstalled($moduleName)) { + return ''; + } + + /** @var Router $router * */ + $router = $this->module->get('router'); + + if ($moduleName === 'ps_mbo') { + return substr(\Tools::getShopDomainSsl(true) . __PS_BASE_URI__, 0, -1) . + $router->generate('ps_tech_vendor_boilerplate_api_resolver', [ + 'query' => 'installPsMbo', + ]); + } + + return substr(\Tools::getShopDomainSsl(true) . __PS_BASE_URI__, 0, -1) . + $router->generate('admin_module_manage_action', [ + 'action' => 'install', + 'module_name' => $moduleName, + ]); + } + + /** + * returns the enable link of the module if it is not enabled. If enabled, returns an empty string + * + * @param string $moduleName + * + * @return string + */ + public function getEnableLink(string $moduleName) + { + if (true === $this->isEnabled($moduleName)) { + return ''; + } + + /** @var Router $router * */ + $router = $this->module->get('router'); + + return substr(\Tools::getShopDomainSsl(true) . __PS_BASE_URI__, 0, -1) . + $router->generate('admin_module_manage_action', [ + 'action' => 'enable', + 'module_name' => $moduleName, + ]); + } + + /** + * returns the update link of the module + * + * @param string $moduleName + * + * @return string + */ + public function getUpdateLink(string $moduleName) + { + // need to check if module is up to date, if not, return empty string + + /** @var Router $router * */ + $router = $this->module->get('router'); + + return substr(\Tools::getShopDomainSsl(true) . __PS_BASE_URI__, 0, -1) . + $router->generate('admin_module_manage_action', [ + 'action' => 'upgrade', + 'module_name' => $moduleName, + ]); + } + + /** + * get module version + * + * @param string $moduleName + * + * @return string + */ + public function getModuleVersion(string $moduleName) + { + if (false === $this->isInstalled($moduleName)) { + return '0.0.0'; + } + + $module = \Module::getInstanceByName($moduleName); + + if (false === $module) { + return '0.0.0'; + } + + return $module->version; + } + + /** + * Build informations about module + * + * @param string $moduleName + * + * @return array + */ + public function buildModuleInformation(string $moduleName) + { + return [ + 'technicalName' => $moduleName, + 'displayName' => $this->getDisplayName($moduleName), + 'isInstalled' => $this->isInstalled($moduleName), + 'isEnabled' => $this->isEnabled($moduleName), + 'isUpToDate' => $this->isUpToDate($moduleName), + 'linkInstall' => $this->getInstallLink($moduleName), + 'linkEnable' => $this->getEnableLink($moduleName), + 'linkUpdate' => $this->getUpdateLink($moduleName), + ]; + } +} diff --git a/tools/interpolate.sh b/tools/interpolate.sh index f5084e4..1b4c4ef 100755 --- a/tools/interpolate.sh +++ b/tools/interpolate.sh @@ -39,8 +39,8 @@ if [ ! -f "./.env" ]; then exit 1; fi -# interpolate views/templates/admin/configure.tpl -cp "${DIST_DIR}"/views/templates/admin/configure.tpl "${TMP_FILE}" -env "$(cat ./.env | xargs)" envsubst < "${TMP_FILE}" > "${DIST_DIR}"/views/templates/admin/configure.tpl +# interpolate views/templates/admin/configure.html.twig +cp "${DIST_DIR}"/views/templates/admin/configure.html.twig "${TMP_FILE}" +env "$(cat ./.env | xargs)" envsubst < "${TMP_FILE}" > "${DIST_DIR}"/views/templates/admin/configure.html.twig rm -f "${TMP_FILE}" diff --git a/views/templates/admin/configure.html.twig b/views/templates/admin/configure.html.twig new file mode 100644 index 0000000..d91be42 --- /dev/null +++ b/views/templates/admin/configure.html.twig @@ -0,0 +1,119 @@ +{#** + * Copyright since 2007 PrestaShop SA and Contributors + * PrestaShop is an International Registered Trademark & Property of PrestaShop SA + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License version 3.0 + * that is bundled with this package in the file LICENSE.md. + * It is also available through the world-wide-web at this URL: + * https://opensource.org/licenses/AFL-3.0 + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@prestashop.com so we can send you a copy immediately. + * + * @author PrestaShop SA and Contributors + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + *#} + + {% extends '@PrestaShop/Admin/layout.html.twig' %} + +{% block content %} +
+

CloudSync module example

+

+ Here is my new generic module!
+ Thanks to PrestaShop, now I have a great module.
+ I can configure it using the following configuration form. +

+
+

+ This module will boost your sales! +

+

+ {% if eventbusModule.isInstalled == false or accountsModule.isInstalled == false or mboModule.isInstalled == false or eventbusModule.isEnabled == false or accountsModule.isEnabled == false or mboModule.isEnabled == false or eventbusModule.isUpToDate == false %} +

+

+ Warning! Some actions are required. +

+ + +
+ {% endif %} +

+
+
+{% endblock %} + +{% block stylesheets %} + +{% endblock %} + +{% block javascripts %} + + + +{% endblock %} diff --git a/views/templates/admin/configure.tpl b/views/templates/admin/configure.tpl deleted file mode 100644 index e3d8a39..0000000 --- a/views/templates/admin/configure.tpl +++ /dev/null @@ -1,51 +0,0 @@ -{* -* 2007-2023 PrestaShop -* -* NOTICE OF LICENSE -* -* This source file is subject to the Academic Free License (AFL 3.0) -* that is bundled with this package in the file LICENSE.txt. -* It is also available through the world-wide-web at this URL: -* http://opensource.org/licenses/afl-3.0.php -* If you did not receive a copy of the license and are unable to -* obtain it through the world-wide-web, please email -* license@prestashop.com, so we can send you a copy immediately. -* -* DISCLAIMER -* -* Do not edit or add to this file if you wish to upgrade PrestaShop to newer -* versions in the future. If you wish to customize PrestaShop for your -* needs please refer to http://www.prestashop.com for more information. -* -* @author PrestaShop SA -* @copyright 2007-2023 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -* -*} - -
-

CloudSync module example

-

- Here is my new generic module!
- Thanks to PrestaShop, now I have a great module.
- I can configure it using the following configuration form. -

-
-

- This module will boost your sales! -

-
- -
-