From 5782e813e77a96bdd46c4d60c713e255cd002172 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 18 Oct 2022 11:50:14 +0000 Subject: [PATCH 01/48] Update Crowdin configuration file --- crowdin.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 000000000..5816e89e1 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,15 @@ +preserve_hierarchy: +commit_message: 'fix: New (%language%) translations' +append_commit_message: +pull_request_title: 'Update translations for language : (%language%)' +pull_request_labels: + - translations +files: + - source: /translations/en-US/*.en-US.xlf + translation: /translations/%locale%/%original_file_name% + translation_replace: + en-US: '%locale%' + type: xliff + labels: + - ps_mbo + - module From c4889f426261bc317f068bf5c06f2638422a875e Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 19 Oct 2022 11:53:25 +0200 Subject: [PATCH 02/48] feat :chart_with_upwards_trend: Start to track module actions Add an asynchronous request to the API to track events on modules. Build event data. --- config/services/addons.php | 10 ++- .../ModuleManagementEventSubscriber.php | 82 +++++++++++++------ src/Distribution/Client.php | 41 ++++++++++ src/Service/View/ContextBuilder.php | 5 +- 4 files changed, 113 insertions(+), 25 deletions(-) diff --git a/config/services/addons.php b/config/services/addons.php index 29c6bd50e..3ba0735c1 100644 --- a/config/services/addons.php +++ b/config/services/addons.php @@ -30,7 +30,15 @@ //Only load event subscriber when module is enabled to avoid logging events if disabled if (ps_mbo::checkModuleStatus()) { $services->set('mbo.addons.event_subscriber', ModuleManagementEventSubscriber::class) - ->args([ref('logger'), ref('mbo.modules.repository'), ref('mbo.tab.collection.provider'), ref('mbo.cdc.context_builder')]) + ->args([ + ref('logger'), + ref('mbo.modules.repository'), + ref('mbo.tab.collection.provider'), + ref('mbo.cdc.context_builder'), + ref('mbo.cdc.client.distribution_api'), + ref('mbo.security.admin_authentication.provider'), + ref('mbo.accounts.data_provider'), + ]) ->public() ->tag('kernel.event_subscriber'); } diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index ff9342a26..baffcd95f 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -21,6 +21,9 @@ namespace PrestaShop\Module\Mbo\Addons\Subscriber; +use PrestaShop\Module\Mbo\Accounts\Provider\AccountsDataProvider; +use PrestaShop\Module\Mbo\Api\Security\AdminAuthenticationProvider; +use PrestaShop\Module\Mbo\Distribution\Client; use PrestaShop\Module\Mbo\Module\Repository; use PrestaShop\Module\Mbo\Service\View\ContextBuilder; use PrestaShop\Module\Mbo\Tab\TabCollectionProviderInterface; @@ -50,52 +53,73 @@ class ModuleManagementEventSubscriber implements EventSubscriberInterface */ private $contextBuilder; + /** + * @var Client + */ + private $distributionClient; + + /** + * @var AdminAuthenticationProvider + */ + private $adminAuthenticationProvider; + + /** + * @var AccountsDataProvider + */ + private $accountsDataProvider; + public function __construct( LoggerInterface $logger, Repository $moduleRepository, TabCollectionProviderInterface $tabCollectionProvider, - ContextBuilder $contextBuilder + ContextBuilder $contextBuilder, + Client $distributionClient, + AdminAuthenticationProvider $adminAuthenticationProvider, + AccountsDataProvider $accountsDataProvider ) { $this->logger = $logger; $this->moduleRepository = $moduleRepository; $this->tabCollectionProvider = $tabCollectionProvider; $this->contextBuilder = $contextBuilder; + $this->distributionClient = $distributionClient; + $this->adminAuthenticationProvider = $adminAuthenticationProvider; + $this->accountsDataProvider = $accountsDataProvider; } public static function getSubscribedEvents(): array { return [ ModuleManagementEvent::INSTALL => [ - ['onInstall'], ['clearCatalogCache'], + ['onInstall'], ], ModuleManagementEvent::POST_INSTALL => [ - ['onPostInstall'], ['clearCatalogCache'], + ['onPostInstall'], ], ModuleManagementEvent::UNINSTALL => [ - ['onUninstall'], ['clearCatalogCache'], + ['onUninstall'], ], ModuleManagementEvent::ENABLE => [ - ['onEnable'], ['clearCatalogCache'], + ['onEnable'], ], ModuleManagementEvent::DISABLE => [ - ['onDisable'], ['clearCatalogCache'], + ['onDisable'], ], ModuleManagementEvent::ENABLE_MOBILE => [ - ['onEnableMobile'], ['clearCatalogCache'], + ['onEnableMobile'], ], ModuleManagementEvent::DISABLE_MOBILE => [ - ['onDisableMobile'], ['clearCatalogCache'], + ['onDisableMobile'], ], ModuleManagementEvent::UPGRADE => [ - ['onUpgrade'], ['clearCatalogCache'], + ['onUpgrade'], ], ModuleManagementEvent::RESET => [ ['onReset'], @@ -103,11 +127,6 @@ public static function getSubscribedEvents(): array ]; } - public function onInstall(ModuleManagementEvent $event): void - { - $this->logEvent(ModuleManagementEvent::INSTALL); - } - public function clearCatalogCache(): void { $this->moduleRepository->clearCache(); @@ -115,48 +134,65 @@ public function clearCatalogCache(): void $this->contextBuilder->clearCache(); } + public function onInstall(ModuleManagementEvent $event): void + { + $this->logEvent(ModuleManagementEvent::INSTALL, $event); + } + public function onPostInstall(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::POST_INSTALL); + $this->logEvent(ModuleManagementEvent::POST_INSTALL, $event); } public function onUninstall(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::UNINSTALL); + $this->logEvent(ModuleManagementEvent::UNINSTALL, $event); } public function onEnable(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::ENABLE); + $this->logEvent(ModuleManagementEvent::ENABLE, $event); } public function onDisable(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::DISABLE); + $this->logEvent(ModuleManagementEvent::DISABLE, $event); } public function onEnableMobile(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::ENABLE); + $this->logEvent(ModuleManagementEvent::ENABLE, $event); } public function onDisableMobile(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::DISABLE); + $this->logEvent(ModuleManagementEvent::DISABLE, $event); } public function onUpgrade(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::UPGRADE); + $this->logEvent(ModuleManagementEvent::UPGRADE, $event); } public function onReset(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::RESET); + $this->logEvent(ModuleManagementEvent::RESET, $event); } - protected function logEvent(string $eventName): void + protected function logEvent(string $eventName, ModuleManagementEvent $event): void { $this->logger->info(sprintf('Event %s triggered', $eventName)); + + $data = []; + $data['event_name'] = $eventName; + $data['module_name'] = $event->getModule()->get('name'); + $data['modules'] = array_map(function ($module) { + return $module['name']; + }, $this->contextBuilder->getInstalledModules()); + $data['user_id'] = $this->accountsDataProvider->getAccountsToken(); + $data['shop_id'] = $this->accountsDataProvider->getAccountsShopId(); + + $this->distributionClient->setBearer($this->adminAuthenticationProvider->getMboJWT()); + $this->distributionClient->trackEvent($data); } } diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index 8be470407..d9b8eaea4 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -25,6 +25,7 @@ use Doctrine\Common\Cache\CacheProvider; use GuzzleHttp\Client as HttpClient; use GuzzleHttp\Exception\GuzzleException; +use GuzzleHttp\Promise\PromiseInterface; use PrestaShop\Module\Mbo\Helpers\Config; use ps_mbo; use stdClass; @@ -217,6 +218,23 @@ public function getConf() return $this->cacheProvider->fetch($cacheKey); } + /** + * Send a tracking to the API + * Send it asynchronously to avoid blocking process for this feature + * + * @param array $eventData + * + * @return PromiseInterface + */ + public function trackEvent(array $eventData): PromiseInterface + { + return $this->processAsyncRequest( + self::HTTP_METHOD_POST, + 'track-event', + ['form_params' => $eventData] + ); + } + private function mergeShopDataWithParams(array $params): array { return array_merge([ @@ -281,4 +299,27 @@ private function processRequest( ->request($method, '/api/' . ltrim($uri, '/'), $options) ->getBody(); } + + /** + * Process the request with the current parameters, given the $method, return the body as string + * + * @param string $method + * @param string $uri + * @param array $options + * + * @return PromiseInterface + */ + private function processAsyncRequest( + string $method = self::HTTP_METHOD_GET, + string $uri = '', + array $options = [] + ): PromiseInterface { + $options = array_merge($options, [ + 'query' => $this->queryParameters, + 'headers' => $this->headers, + ]); + + return $this->httpClient + ->requestAsync($method, '/api/' . ltrim($uri, '/'), $options); + } } diff --git a/src/Service/View/ContextBuilder.php b/src/Service/View/ContextBuilder.php index 513a8e7b5..cd09770c9 100644 --- a/src/Service/View/ContextBuilder.php +++ b/src/Service/View/ContextBuilder.php @@ -165,7 +165,10 @@ private function getCurrencyCode(): string return $currency->iso_code; } - private function getInstalledModules(): array + /** + * @return array + */ + public function getInstalledModules(): array { $cacheKey = $this->getCacheKey(); From c743b0bf872cb51bff8fec85508728caa6d7e521 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Mon, 31 Oct 2022 18:13:04 +0100 Subject: [PATCH 03/48] Feat :alembic: Testing async requests when tracking event Try to send event with a custom socket to be non blocking --- .../Provider/AccountsDataProvider.php | 7 ++ .../ModuleManagementEventSubscriber.php | 4 +- src/Distribution/Client.php | 49 ++++++---- src/Helpers/AsyncClient.php | 95 +++++++++++++++++++ src/Service/View/ContextBuilder.php | 4 +- 5 files changed, 135 insertions(+), 24 deletions(-) create mode 100644 src/Helpers/AsyncClient.php diff --git a/src/Accounts/Provider/AccountsDataProvider.php b/src/Accounts/Provider/AccountsDataProvider.php index 5f549bc5d..bb0d316bc 100644 --- a/src/Accounts/Provider/AccountsDataProvider.php +++ b/src/Accounts/Provider/AccountsDataProvider.php @@ -73,6 +73,13 @@ public function getAccountsShopId(): ?string return $this->getAccountsService()->getShopUuid() ?? null; } + public function getAccountsUserId(): ?string + { + $userUuid = $this->getAccountsService()->getUserUuid(); + + return $userUuid ? $userUuid : null; + } + private function isAccountLinked(): bool { try { diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index baffcd95f..d2e7581e8 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -189,8 +189,10 @@ protected function logEvent(string $eventName, ModuleManagementEvent $event): vo $data['modules'] = array_map(function ($module) { return $module['name']; }, $this->contextBuilder->getInstalledModules()); - $data['user_id'] = $this->accountsDataProvider->getAccountsToken(); + $data['user_id'] = $this->accountsDataProvider->getAccountsUserId(); $data['shop_id'] = $this->accountsDataProvider->getAccountsShopId(); + $data['iso_lang'] = $this->contextBuilder->getLanguage()->getIsoCode(); + $data['iso_code'] = $this->contextBuilder->getCountry()->iso_code; $this->distributionClient->setBearer($this->adminAuthenticationProvider->getMboJWT()); $this->distributionClient->trackEvent($data); diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index d9b8eaea4..2df235b85 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -25,7 +25,7 @@ use Doctrine\Common\Cache\CacheProvider; use GuzzleHttp\Client as HttpClient; use GuzzleHttp\Exception\GuzzleException; -use GuzzleHttp\Promise\PromiseInterface; +use PrestaShop\Module\Mbo\Helpers\AsyncClient; use PrestaShop\Module\Mbo\Helpers\Config; use ps_mbo; use stdClass; @@ -224,15 +224,17 @@ public function getConf() * * @param array $eventData * - * @return PromiseInterface + * @return bool */ - public function trackEvent(array $eventData): PromiseInterface + public function trackEvent(array $eventData) { - return $this->processAsyncRequest( - self::HTTP_METHOD_POST, - 'track-event', - ['form_params' => $eventData] - ); +// return $this->processRequestAndReturn( +// 'shops/events', +// null, +// self::HTTP_METHOD_POST, +// ['form_params' => $eventData] +// ); + return $this->processAsyncRequest('shops/events', $eventData); } private function mergeShopDataWithParams(array $params): array @@ -301,25 +303,30 @@ private function processRequest( } /** - * Process the request with the current parameters, given the $method, return the body as string + * Process a custom async request * - * @param string $method * @param string $uri - * @param array $options + * @param array $data + * @param string $method * - * @return PromiseInterface + * @return bool */ private function processAsyncRequest( - string $method = self::HTTP_METHOD_GET, string $uri = '', - array $options = [] - ): PromiseInterface { - $options = array_merge($options, [ - 'query' => $this->queryParameters, - 'headers' => $this->headers, - ]); + array $data = [], + string $method = self::HTTP_METHOD_POST + ): bool { + $uri = rtrim(getenv('DISTRIBUTION_API_URL'), '/') . '/api/' . ltrim($uri, '/'); + if (!empty($this->queryParameters)) { + $uri .= '?' . http_build_query($this->queryParameters); + } + + // Build headers for async request + $headers = []; + foreach ($this->headers as $key => $value) { + $headers[] = $key . ': ' . $value; + } - return $this->httpClient - ->requestAsync($method, '/api/' . ltrim($uri, '/'), $options); + return AsyncClient::request($uri, $data, $headers, $method); } } diff --git a/src/Helpers/AsyncClient.php b/src/Helpers/AsyncClient.php new file mode 100644 index 000000000..d90fbf8d2 --- /dev/null +++ b/src/Helpers/AsyncClient.php @@ -0,0 +1,95 @@ +contextAdapter->getContext(); } - private function getLanguage(): Language + public function getLanguage(): Language { return $this->getContext()->language ?? new Language((int) Configuration::get('PS_LANG_DEFAULT')); } - private function getCountry(): Country + public function getCountry(): Country { return $this->getContext()->country ?? new Country((int) Configuration::get('PS_COUNTRY_DEFAULT')); } From 7a7b30621cd79d2552851d121c340bb19ecd29fb Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 2 Nov 2022 11:41:39 +0100 Subject: [PATCH 04/48] Feat :sparkles: Possibility to send "fire & forget" requests --- src/Distribution/Client.php | 6 ------ src/Helpers/AsyncClient.php | 16 ++++++---------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index 2df235b85..75383a49f 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -228,12 +228,6 @@ public function getConf() */ public function trackEvent(array $eventData) { -// return $this->processRequestAndReturn( -// 'shops/events', -// null, -// self::HTTP_METHOD_POST, -// ['form_params' => $eventData] -// ); return $this->processAsyncRequest('shops/events', $eventData); } diff --git a/src/Helpers/AsyncClient.php b/src/Helpers/AsyncClient.php index d90fbf8d2..9f9167309 100644 --- a/src/Helpers/AsyncClient.php +++ b/src/Helpers/AsyncClient.php @@ -43,7 +43,6 @@ public static function request(string $url, array $params = [], array $customHea private static function get(array $endpointParts, $socket, array $customHeaders = []): bool { if (!empty($endpointParts['query'])) { - $contentLength = strlen($endpointParts['query']); $endpointParts['path'] .= '?' . $endpointParts['query']; } $request = "GET {$endpointParts['path']} HTTP/1.1\r\n"; @@ -51,10 +50,7 @@ private static function get(array $endpointParts, $socket, array $customHeaders foreach ($customHeaders as $header) { $request .= "{$header}\r\n"; } - $request .= "Content-Type:application/x-www-form-urlencoded\r\n"; - if (isset($contentLength)) { - $request .= "Content-Length: {$contentLength}\r\n"; - } + $request .= "Content-Type: application/json\r\n\r\n"; $request .= "Connection:Close\r\n\r\n"; fwrite($socket, $request); @@ -65,18 +61,18 @@ private static function get(array $endpointParts, $socket, array $customHeaders private static function post(array $endpointParts, $socket, array $postData = [], array $customHeaders = []): bool { - $encodedPostData = json_encode($postData); + $encodedPostData = http_build_query($postData, '', '&'); $contentLength = strlen($encodedPostData); $request = "POST {$endpointParts['path']} HTTP/1.1\r\n"; + $request .= "Accept: application/json\r\n"; + $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Host: {$endpointParts['host']}\r\n"; foreach ($customHeaders as $header) { $request .= "{$header}\r\n"; } - $request .= "Content-Type: application/json\r\n\r\n"; - $request .= "Content-Length: {$contentLength}\r\n"; + $request .= "Content-Length: {$contentLength}\r\n\r\n"; $request .= $encodedPostData; - $request .= "Connection:Close\r\n\r\n"; fwrite($socket, $request); fclose($socket); @@ -87,7 +83,7 @@ private static function post(array $endpointParts, $socket, array $postData = [] private static function openSocket(string $host, int $port) { try { - return fsockopen($host, $port); + return fsockopen($host, $port, $errno, $errstr, 0.1); } catch (\Exception $e) { return false; } From 54f4d689776d4a96d4fb72ee2fd19efef71e617b Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 2 Nov 2022 17:49:19 +0100 Subject: [PATCH 05/48] Feat :art: Move context building to context builder --- config/services/addons.php | 1 - config/services/cdc.yml | 1 + .../ModuleManagementEventSubscriber.php | 21 ++----------- src/Service/View/ContextBuilder.php | 31 ++++++++++++++++--- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/config/services/addons.php b/config/services/addons.php index 3ba0735c1..ec5acfd25 100644 --- a/config/services/addons.php +++ b/config/services/addons.php @@ -37,7 +37,6 @@ ref('mbo.cdc.context_builder'), ref('mbo.cdc.client.distribution_api'), ref('mbo.security.admin_authentication.provider'), - ref('mbo.accounts.data_provider'), ]) ->public() ->tag('kernel.event_subscriber'); diff --git a/config/services/cdc.yml b/config/services/cdc.yml index fd9c87ba8..ae9c88ec1 100644 --- a/config/services/cdc.yml +++ b/config/services/cdc.yml @@ -10,3 +10,4 @@ services: - '@router' - '@doctrine.cache.provider' - '@mbo.security.admin_authentication.provider' + - '@mbo.accounts.data_provider' diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index d2e7581e8..4f6a20d08 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -21,7 +21,6 @@ namespace PrestaShop\Module\Mbo\Addons\Subscriber; -use PrestaShop\Module\Mbo\Accounts\Provider\AccountsDataProvider; use PrestaShop\Module\Mbo\Api\Security\AdminAuthenticationProvider; use PrestaShop\Module\Mbo\Distribution\Client; use PrestaShop\Module\Mbo\Module\Repository; @@ -63,19 +62,13 @@ class ModuleManagementEventSubscriber implements EventSubscriberInterface */ private $adminAuthenticationProvider; - /** - * @var AccountsDataProvider - */ - private $accountsDataProvider; - public function __construct( LoggerInterface $logger, Repository $moduleRepository, TabCollectionProviderInterface $tabCollectionProvider, ContextBuilder $contextBuilder, Client $distributionClient, - AdminAuthenticationProvider $adminAuthenticationProvider, - AccountsDataProvider $accountsDataProvider + AdminAuthenticationProvider $adminAuthenticationProvider ) { $this->logger = $logger; $this->moduleRepository = $moduleRepository; @@ -83,7 +76,6 @@ public function __construct( $this->contextBuilder = $contextBuilder; $this->distributionClient = $distributionClient; $this->adminAuthenticationProvider = $adminAuthenticationProvider; - $this->accountsDataProvider = $accountsDataProvider; } public static function getSubscribedEvents(): array @@ -181,18 +173,9 @@ public function onReset(ModuleManagementEvent $event): void protected function logEvent(string $eventName, ModuleManagementEvent $event): void { - $this->logger->info(sprintf('Event %s triggered', $eventName)); - - $data = []; + $data = $this->contextBuilder->getEventContext(); $data['event_name'] = $eventName; $data['module_name'] = $event->getModule()->get('name'); - $data['modules'] = array_map(function ($module) { - return $module['name']; - }, $this->contextBuilder->getInstalledModules()); - $data['user_id'] = $this->accountsDataProvider->getAccountsUserId(); - $data['shop_id'] = $this->accountsDataProvider->getAccountsShopId(); - $data['iso_lang'] = $this->contextBuilder->getLanguage()->getIsoCode(); - $data['iso_code'] = $this->contextBuilder->getCountry()->iso_code; $this->distributionClient->setBearer($this->adminAuthenticationProvider->getMboJWT()); $this->distributionClient->trackEvent($data); diff --git a/src/Service/View/ContextBuilder.php b/src/Service/View/ContextBuilder.php index 9c554678c..7f6e9b5bc 100644 --- a/src/Service/View/ContextBuilder.php +++ b/src/Service/View/ContextBuilder.php @@ -26,6 +26,7 @@ use Country; use Doctrine\Common\Cache\CacheProvider; use Language; +use PrestaShop\Module\Mbo\Accounts\Provider\AccountsDataProvider; use PrestaShop\Module\Mbo\Api\Security\AdminAuthenticationProvider; use PrestaShop\Module\Mbo\Helpers\Config; use PrestaShop\Module\Mbo\Module\Module; @@ -63,20 +64,27 @@ class ContextBuilder /** * @var AdminAuthenticationProvider */ - private $adminAuthentificationProvider; + private $adminAuthenticationProvider; + + /** + * @var AccountsDataProvider + */ + private $accountsDataProvider; public function __construct( ContextAdapter $contextAdapter, ModuleRepository $moduleRepository, Router $router, CacheProvider $cacheProvider, - AdminAuthenticationProvider $adminAuthentificationProvider + AdminAuthenticationProvider $adminAuthenticationProvider, + AccountsDataProvider $accountsDataProvider ) { $this->contextAdapter = $contextAdapter; $this->moduleRepository = $moduleRepository; $this->router = $router; $this->cacheProvider = $cacheProvider; - $this->adminAuthentificationProvider = $adminAuthentificationProvider; + $this->adminAuthenticationProvider = $adminAuthenticationProvider; + $this->accountsDataProvider = $accountsDataProvider; } public function getViewContext(): array @@ -97,6 +105,21 @@ public function getRecommendedModulesContext(Tab $tab): array return $context; } + public function getEventContext(): array + { + $modules = array_map(function ($module) { + return $module['name']; + }, $this->getInstalledModules()); + + return [ + 'modules' => $modules, + 'user_id' => $this->accountsDataProvider->getAccountsUserId(), + 'shop_id' => $this->accountsDataProvider->getAccountsShopId(), + 'iso_lang' => $this->getLanguage()->getIsoCode(), + 'iso_code' => $this->getCountry()->iso_code, + ]; + } + public function clearCache(): bool { $cacheKey = $this->getCacheKey(); @@ -131,7 +154,7 @@ private function getCommonContextContent(): array 'shop_version' => _PS_VERSION_, 'shop_url' => Config::getShopUrl(), 'shop_uuid' => Config::getShopMboUuid(), - 'mbo_token' => $this->adminAuthentificationProvider->getMboJWT(), + 'mbo_token' => $this->adminAuthenticationProvider->getMboJWT(), 'user_id' => $context->cookie->id_employee, 'admin_token' => $token, 'refresh_url' => $refreshUrl, From 9860206f856712ca9d5fa2022a55fcb3291c5dd0 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 2 Nov 2022 17:51:06 +0100 Subject: [PATCH 06/48] Feat :page_facing_up: Updates following review --- crowdin.yml | 15 --------------- src/Helpers/AsyncClient.php | 19 +++++++++++++++++++ src/Service/View/ContextBuilder.php | 6 +++--- 3 files changed, 22 insertions(+), 18 deletions(-) delete mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index 5816e89e1..000000000 --- a/crowdin.yml +++ /dev/null @@ -1,15 +0,0 @@ -preserve_hierarchy: -commit_message: 'fix: New (%language%) translations' -append_commit_message: -pull_request_title: 'Update translations for language : (%language%)' -pull_request_labels: - - translations -files: - - source: /translations/en-US/*.en-US.xlf - translation: /translations/%locale%/%original_file_name% - translation_replace: - en-US: '%locale%' - type: xliff - labels: - - ps_mbo - - module diff --git a/src/Helpers/AsyncClient.php b/src/Helpers/AsyncClient.php index 9f9167309..d8929dc70 100644 --- a/src/Helpers/AsyncClient.php +++ b/src/Helpers/AsyncClient.php @@ -1,4 +1,23 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); namespace PrestaShop\Module\Mbo\Helpers; diff --git a/src/Service/View/ContextBuilder.php b/src/Service/View/ContextBuilder.php index 7f6e9b5bc..8e8782ca5 100644 --- a/src/Service/View/ContextBuilder.php +++ b/src/Service/View/ContextBuilder.php @@ -167,12 +167,12 @@ private function getContext(): Context return $this->contextAdapter->getContext(); } - public function getLanguage(): Language + private function getLanguage(): Language { return $this->getContext()->language ?? new Language((int) Configuration::get('PS_LANG_DEFAULT')); } - public function getCountry(): Country + private function getCountry(): Country { return $this->getContext()->country ?? new Country((int) Configuration::get('PS_COUNTRY_DEFAULT')); } @@ -191,7 +191,7 @@ private function getCurrencyCode(): string /** * @return array */ - public function getInstalledModules(): array + private function getInstalledModules(): array { $cacheKey = $this->getCacheKey(); From a5f6ce56a9090bd05b0cbf13892cd2e097caaa73 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Thu, 3 Nov 2022 10:12:13 +0000 Subject: [PATCH 07/48] Add domains to translatable strings --- src/Traits/Hooks/UseDisplayDashboardTop.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Traits/Hooks/UseDisplayDashboardTop.php b/src/Traits/Hooks/UseDisplayDashboardTop.php index a851f8420..cdb605d89 100644 --- a/src/Traits/Hooks/UseDisplayDashboardTop.php +++ b/src/Traits/Hooks/UseDisplayDashboardTop.php @@ -121,23 +121,23 @@ protected function displayPushOnConfigurationPage(string $moduleName): string switch ($moduleName) { case 'contactform': $this->smarty->assign([ - 'catchPhrase' => $this->trans('For even more security on your website forms, consult our Security & Access modules category on the'), - 'linkTarget' => $this->trans('https://addons.prestashop.com/en/429-website-security-access?utm_source=back-office&utm_medium=native-contactform&utm_campaign=back-office-EN&utm_content=security'), - 'linkText' => $this->trans('PrestaShop Addons Marketplace'), + 'catchPhrase' => $this->trans('For even more security on your website forms, consult our Security & Access modules category on the', 'Modules.Mbo.Global'), + 'linkTarget' => $this->trans('https://addons.prestashop.com/en/429-website-security-access?utm_source=back-office&utm_medium=native-contactform&utm_campaign=back-office-EN&utm_content=security', 'Modules.Mbo.Links'), + 'linkText' => $this->trans('PrestaShop Addons Marketplace', 'Modules.Mbo.Global'), ]); break; case 'blockreassurance': $this->smarty->assign([ - 'catchPhrase' => $this->trans('Discover more modules to improve your shop on'), - 'linkTarget' => $this->trans('https://addons.prestashop.com/en/517-blocks-tabs-banners?utm_source=back-office&utm_medium=modules&utm_campaign=back-office-EN'), + 'catchPhrase' => $this->trans('Discover more modules to improve your shop on', 'Modules.Mbo.Global'), + 'linkTarget' => $this->trans('https://addons.prestashop.com/en/517-blocks-tabs-banners?utm_source=back-office&utm_medium=modules&utm_campaign=back-office-EN', 'Modules.Mbo.Links'), 'linkText' => $this->trans('PrestaShop Addons Marketplace'), ]); break; default: $this->smarty->assign([ - 'catchPhrase' => $this->trans('Discover more modules to improve your shop on'), - 'linkTarget' => $this->trans('https://addons.prestashop.com/?utm_source=back-office&utm_medium=modules&utm_campaign=back-office-EN'), - 'linkText' => $this->trans('PrestaShop Addons Marketplace'), + 'catchPhrase' => $this->trans('Discover more modules to improve your shop on', 'Modules.Mbo.Global'), + 'linkTarget' => $this->trans('https://addons.prestashop.com/?utm_source=back-office&utm_medium=modules&utm_campaign=back-office-EN', 'Modules.Mbo.Links'), + 'linkText' => $this->trans('PrestaShop Addons Marketplace', 'Modules.Mbo.Global'), ]); } From 199568d50288ef503f17b7700e5906d84084f4e8 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 8 Nov 2022 08:32:49 +0000 Subject: [PATCH 08/48] Fill Shop PS version when querying for Menu config --- src/Distribution/Client.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index 75383a49f..5d68568a0 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -204,6 +204,7 @@ public function getConf() $this->setQueryParams([ 'isoLang' => $languageIsoCode, + 'shopVersion' => _PS_VERSION_, ]); try { $conf = $this->processRequestAndReturn('shops/conf'); From 76602fb08225c02fd6a23254d242ad53008ed200 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Tue, 8 Nov 2022 19:23:26 +0100 Subject: [PATCH 09/48] Fix :bug: Async request does not work in current server environment --- src/Distribution/Client.php | 56 +++++++++++++------------------------ 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index 5d68568a0..b60e9144e 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -25,7 +25,6 @@ use Doctrine\Common\Cache\CacheProvider; use GuzzleHttp\Client as HttpClient; use GuzzleHttp\Exception\GuzzleException; -use PrestaShop\Module\Mbo\Helpers\AsyncClient; use PrestaShop\Module\Mbo\Helpers\Config; use ps_mbo; use stdClass; @@ -189,9 +188,7 @@ public function updateShop(array $params): stdClass /** * Retrieve the user menu from NEST Api * - * @return false|\stdClass - * - * @throws \GuzzleHttp\Exception\GuzzleException + * @return false|stdClass */ public function getConf() { @@ -208,7 +205,7 @@ public function getConf() ]); try { $conf = $this->processRequestAndReturn('shops/conf'); - } catch (\Exception $e) { + } catch (\Throwable $e) { return false; } if (empty($conf)) { @@ -224,12 +221,19 @@ public function getConf() * Send it asynchronously to avoid blocking process for this feature * * @param array $eventData - * - * @return bool */ - public function trackEvent(array $eventData) + public function trackEvent(array $eventData): void { - return $this->processAsyncRequest('shops/events', $eventData); + try { + $this->processRequestAndReturn( + 'shops/events', + null, + self::HTTP_METHOD_POST, + ['form_params' => $eventData] + ); + } catch (\Throwable $e) { + // Do nothing if the tracking fails + } } private function mergeShopDataWithParams(array $params): array @@ -247,8 +251,10 @@ private function mergeShopDataWithParams(array $params): array * Process the request with the current parameters, given the $method, and return the $attribute from * the response body, or the default fallback value $default. * + * @param string $uri * @param string|null $attributeToReturn * @param string $method + * @param array $options * @param mixed $default * * @return mixed @@ -278,6 +284,10 @@ private function processRequestAndReturn( /** * Process the request with the current parameters, given the $method, return the body as string * + * @param string $method + * @param string $uri + * @param array $options + * * @return string * * @throws GuzzleException @@ -296,32 +306,4 @@ private function processRequest( ->request($method, '/api/' . ltrim($uri, '/'), $options) ->getBody(); } - - /** - * Process a custom async request - * - * @param string $uri - * @param array $data - * @param string $method - * - * @return bool - */ - private function processAsyncRequest( - string $uri = '', - array $data = [], - string $method = self::HTTP_METHOD_POST - ): bool { - $uri = rtrim(getenv('DISTRIBUTION_API_URL'), '/') . '/api/' . ltrim($uri, '/'); - if (!empty($this->queryParameters)) { - $uri .= '?' . http_build_query($this->queryParameters); - } - - // Build headers for async request - $headers = []; - foreach ($this->headers as $key => $value) { - $headers[] = $key . ': ' . $value; - } - - return AsyncClient::request($uri, $data, $headers, $method); - } } From e25b070fc60b5bd4aed00e4b52a72d4801f52252 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Tue, 8 Nov 2022 20:29:53 +0100 Subject: [PATCH 10/48] Fix :bug: Propagate correct events when enable/disable on mobile --- src/Addons/Subscriber/ModuleManagementEventSubscriber.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index 4f6a20d08..fe312243e 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -153,12 +153,12 @@ public function onDisable(ModuleManagementEvent $event): void public function onEnableMobile(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::ENABLE, $event); + $this->logEvent(ModuleManagementEvent::ENABLE_MOBILE, $event); } public function onDisableMobile(ModuleManagementEvent $event): void { - $this->logEvent(ModuleManagementEvent::DISABLE, $event); + $this->logEvent(ModuleManagementEvent::DISABLE_MOBILE, $event); } public function onUpgrade(ModuleManagementEvent $event): void From 0c5d6bceb614b085b8eef2cd5e234120e9e09f6e Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 9 Nov 2022 11:25:56 +0100 Subject: [PATCH 11/48] Fix :bug: Filter uninstalled but still on the disk module from the list given to tracking --- src/Service/View/ContextBuilder.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Service/View/ContextBuilder.php b/src/Service/View/ContextBuilder.php index 8e8782ca5..a6eb4055c 100644 --- a/src/Service/View/ContextBuilder.php +++ b/src/Service/View/ContextBuilder.php @@ -30,6 +30,7 @@ use PrestaShop\Module\Mbo\Api\Security\AdminAuthenticationProvider; use PrestaShop\Module\Mbo\Helpers\Config; use PrestaShop\Module\Mbo\Module\Module; +use PrestaShop\Module\Mbo\Module\Workflow\ModuleStateMachine; use PrestaShop\Module\Mbo\Tab\Tab; use PrestaShop\PrestaShop\Adapter\LegacyContext as ContextAdapter; use PrestaShop\PrestaShop\Adapter\Module\Module as CoreModule; @@ -107,9 +108,13 @@ public function getRecommendedModulesContext(Tab $tab): array public function getEventContext(): array { - $modules = array_map(function ($module) { - return $module['name']; - }, $this->getInstalledModules()); + $modules = []; + // Filter : remove uninstalled modules + foreach ($this->getInstalledModules() as $installedModule) { + if ($installedModule['status'] !== ModuleStateMachine::STATUS_UNINSTALLED) { + $modules[] = $installedModule['name']; + } + } return [ 'modules' => $modules, @@ -189,7 +194,7 @@ private function getCurrencyCode(): string } /** - * @return array + * @return array */ private function getInstalledModules(): array { From 94c39075d99b59888c1af98ee30d63af66f2f3aa Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Wed, 9 Nov 2022 14:25:55 +0000 Subject: [PATCH 12/48] Add shopversion as allowed query param --- src/Distribution/Client.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index b60e9144e..c471b2947 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -57,6 +57,7 @@ class Client 'shop_uuid', 'shop_url', 'isoLang', + 'shopVersion', ]; /** * @var array From 9ea28d8b1427d938274e2d347b702cbbaf52b5fd Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Wed, 26 Oct 2022 10:16:30 +0000 Subject: [PATCH 13/48] Add API endpoint, Process config received, save and apply --- config/services/api/distribution.yml | 27 +++ config/services/api_admin.yml | 1 + controllers/admin/apiConfigPsMbo.php | 41 ++++ controllers/admin/apiPsMbo.php | 35 ++++ ps_mbo.php | 40 ++++ .../Controller/AbstractAdminApiController.php | 36 ++-- src/Distribution/Config/Applier.php | 82 ++++++++ .../Appliers/ConfigApplierInterface.php | 31 +++ src/Distribution/Config/Appliers/Factory.php | 55 ++++++ .../ThemeCatalogMenuConfigApplier.php | 57 ++++++ .../Config/Command/ConfigChangeCommand.php | 92 +++++++++ .../ConfigChangeCommandHandler.php | 52 +++++ src/Distribution/Config/Config.php | 136 ++++++++++++++ .../Exception/CannotApplyConfigException.php | 26 +++ .../Exception/CannotSaveConfigException.php | 26 +++ .../Exception/InvalidConfigException.php | 26 +++ src/Distribution/Config/Factory.php | 177 ++++++++++++++++++ src/Traits/HaveTabs.php | 7 + 18 files changed, 935 insertions(+), 12 deletions(-) create mode 100644 config/services/api/distribution.yml create mode 100644 controllers/admin/apiConfigPsMbo.php create mode 100644 src/Distribution/Config/Applier.php create mode 100644 src/Distribution/Config/Appliers/ConfigApplierInterface.php create mode 100644 src/Distribution/Config/Appliers/Factory.php create mode 100644 src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php create mode 100644 src/Distribution/Config/Command/ConfigChangeCommand.php create mode 100644 src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php create mode 100644 src/Distribution/Config/Config.php create mode 100644 src/Distribution/Config/Exception/CannotApplyConfigException.php create mode 100644 src/Distribution/Config/Exception/CannotSaveConfigException.php create mode 100644 src/Distribution/Config/Exception/InvalidConfigException.php create mode 100644 src/Distribution/Config/Factory.php diff --git a/config/services/api/distribution.yml b/config/services/api/distribution.yml new file mode 100644 index 000000000..eea5ce535 --- /dev/null +++ b/config/services/api/distribution.yml @@ -0,0 +1,27 @@ +services: + _defaults: + public: true + + mbo.distribution.config_factory: + class: 'PrestaShop\Module\Mbo\Distribution\Config\Factory' + + mbo.distribution.config_applier: + class: 'PrestaShop\Module\Mbo\Distribution\Config\Applier' + arguments: + - '@mbo.distribution.config_appliers_factory' + + mbo.distribution.theme_catalog_menu_config_applier: + class: PrestaShop\Module\Mbo\Distribution\Config\Appliers\ThemeCatalogMenuConfigApplier + + mbo.distribution.config_appliers_factory: + class: 'PrestaShop\Module\Mbo\Distribution\Config\Appliers\Factory' + arguments: + - [ + '@mbo.distribution.theme_catalog_menu_config_applier' + ] + + mbo.distribution.api_config_change_handler: + class: 'PrestaShop\Module\Mbo\Distribution\Config\CommandHandler\ConfigChangeCommandHandler' + arguments: + - '@mbo.distribution.config_factory' + - '@mbo.distribution.config_applier' diff --git a/config/services/api_admin.yml b/config/services/api_admin.yml index 3991db20a..23dbd012a 100644 --- a/config/services/api_admin.yml +++ b/config/services/api_admin.yml @@ -1,3 +1,4 @@ imports: - { resource: modules.yml } - { resource: api/modules.yml } + - { resource: api/distribution.yml } diff --git a/controllers/admin/apiConfigPsMbo.php b/controllers/admin/apiConfigPsMbo.php new file mode 100644 index 000000000..2f0ca9b15 --- /dev/null +++ b/controllers/admin/apiConfigPsMbo.php @@ -0,0 +1,41 @@ +module->version + ); + + $configCollection = $this->module->get('mbo.distribution.api_config_change_handler')->handle($command); + + } catch (\Exception $exception) { + $this->exitWithExceptionMessage($exception); + } + + $this->exitWithResponse([ + 'message' => 'Config successfully applied', + ]); + } +} diff --git a/controllers/admin/apiPsMbo.php b/controllers/admin/apiPsMbo.php index ac1f6043e..ab89d2f04 100755 --- a/controllers/admin/apiPsMbo.php +++ b/controllers/admin/apiPsMbo.php @@ -2,8 +2,12 @@ use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; +use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; +use PrestaShop\Module\Mbo\Api\Exception\RetrieveNewKeyException; +use PrestaShop\Module\Mbo\Api\Exception\UnauthorizedException; use PrestaShop\Module\Mbo\Module\Command\ModuleStatusTransitionCommand; +use Tools; /** * This controller is responsible to execute actions on modules installed on the current shop. @@ -46,6 +50,37 @@ public function postProcess() ]); } + /** + * @inheritdoc + */ + protected function buildSignatureMessage(): string + { + // Payload elements + $action = Tools::getValue('action'); + $module = Tools::getValue('module'); + $adminToken = Tools::getValue('admin_token'); + $actionUuid = Tools::getValue('action_uuid'); + + if ( + !$action || + !$module || + !$adminToken || + !$actionUuid + ) { + throw new IncompleteSignatureParamsException('Expected signature elements are not given'); + } + + $keyVersion = Tools::getValue('version'); + + return json_encode([ + 'action' => $action, + 'module' => $module, + 'admin_token' => $adminToken, + 'action_uuid' => $actionUuid, + 'version' => $keyVersion, + ]); + } + private function generateTokenizedModuleActionUrl($url): string { $components = parse_url($url); diff --git a/ps_mbo.php b/ps_mbo.php index 701d9664f..87f09b1e3 100755 --- a/ps_mbo.php +++ b/ps_mbo.php @@ -138,6 +138,8 @@ public function install(): bool } if (parent::install() && $this->registerHook($this->getHooksNames())) { + $this->installTables(); + // Do come extra operations on modules' registration like modifying orders $this->installHooks(); @@ -176,6 +178,8 @@ public function uninstall() // This will reset cached configuration values (uuid, mail, ...) to avoid reusing them Config::resetConfigValues(); + $this->uninstallTables(); + /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher */ $eventDispatcher = $this->get('event_dispatcher'); if (!$eventDispatcher->hasListeners(ModuleManagementEvent::UNINSTALL)) { @@ -372,6 +376,42 @@ private function getModuleEnv(?string $default = null): string return getenv($this->getModuleEnvVar()) ?: $default ?: self::DEFAULT_ENV; } + private function installTables(): bool + { + $sqlQueries = []; + $sqlQueries[] = ' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'mbo_api_config` ( + `id_mbo_api_config` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `config_key` varchar(255) NULL, + `config_value` varchar(255) NULL, + `ps_version` varchar(255) NULL, + `mbo_version` varchar(255) NULL, + `applied` TINYINT(1) NOT NULL DEFAULT \'0\', + `date_add` datetime NOT NULL, + PRIMARY KEY (`id_mbo_api_config`) + ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=UTF8;'; + + foreach ($sqlQueries as $query) { + if (!Db::getInstance()->execute($query)) { + return false; + } + } + + return true; + } + + private function uninstallTables(): bool + { + $sqlQueries[] = 'DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'mbo_api_config`'; + + foreach ($sqlQueries as $query) { + if (!Db::getInstance()->execute($query)) { + return false; + } + } + + return true; + } + public function getAccountsDataProvider(): AccountsDataProvider { return $this->getService('mbo.accounts.data_provider'); diff --git a/src/Api/Controller/AbstractAdminApiController.php b/src/Api/Controller/AbstractAdminApiController.php index f611a91a3..5351405c9 100755 --- a/src/Api/Controller/AbstractAdminApiController.php +++ b/src/Api/Controller/AbstractAdminApiController.php @@ -154,34 +154,46 @@ private function dieWithResponse(array $response, int $code): void */ protected function authorize() { - $keyVersion = \Tools::getValue('version'); + $keyVersion = Tools::getValue('version'); $signature = isset($_SERVER['HTTP_MBO_SIGNATURE']) ? $_SERVER['HTTP_MBO_SIGNATURE'] : false; + if (!$keyVersion || !$signature) { + throw new IncompleteSignatureParamsException('Expected signature elements are not given'); + } + + $message = $this->buildSignatureMessage(); + + $this->authorizationChecker->verify($keyVersion, $signature, $message); + } + + /** + * Generate elements composing the signature. + * This is the standard composition. + * Please build your own if other elements are included to the signature. + * + * @return string + * + * @throws IncompleteSignatureParamsException + */ + protected function buildSignatureMessage(): string + { // Payload elements - $action = Tools::getValue('action'); - $module = Tools::getValue('module'); $adminToken = Tools::getValue('admin_token'); $actionUuid = Tools::getValue('action_uuid'); if ( - !$keyVersion || - !$signature || - !$action || - !$module || !$adminToken || !$actionUuid ) { throw new IncompleteSignatureParamsException('Expected signature elements are not given'); } - $message = json_encode([ - 'action' => $action, - 'module' => $module, + $keyVersion = Tools::getValue('version'); + + return json_encode([ 'admin_token' => $adminToken, 'action_uuid' => $actionUuid, 'version' => $keyVersion, ]); - - $this->authorizationChecker->verify($keyVersion, $signature, $message); } } diff --git a/src/Distribution/Config/Applier.php b/src/Distribution/Config/Applier.php new file mode 100644 index 000000000..08b523d19 --- /dev/null +++ b/src/Distribution/Config/Applier.php @@ -0,0 +1,82 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config; + +use Db; +use Doctrine\DBAL\Query\QueryException; +use PrestaShop\Module\Mbo\Distribution\Config\Appliers\Factory as AppliersFactory; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\CannotSaveConfigException; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; +use PrestaShopDatabaseException; + +final class Applier +{ + /** + * @var AppliersFactory + */ + private $appliersFactory; + + public function __construct(AppliersFactory $appliersFactory) + { + $this->appliersFactory = $appliersFactory; + } + + /** + * This method will receive an array of config objects and apply them. + * + * @param Config[] $config + * + * @throws QueryException + * @throws InvalidConfigException + * @throws CannotSaveConfigException + * @throws PrestaShopDatabaseException + */ + public function apply(array $configCollection, string $psVersion, string $mboVersion) + { + foreach ($configCollection as $config) { + if ($this->canBeApplied($config, $psVersion, $mboVersion)) { + $this->applyConfig($config); + } + } + } + + /** + * This method will determinate if the config given can be applied depending on the psVersion and mboVersion. + * + * @param Config $config + */ + private function canBeApplied(Config $config, string $psVersion, string $mboVersion): bool + { + return $psVersion === $config->getPsVersion() && $mboVersion === $config->getMboVersion(); + } + + private function applyConfig(Config $config) + { + $applier = $this->appliersFactory->get($config->getConfigKey()); + + if (null === $applier) { + return true; + } + + return $applier->apply($config); + } +} diff --git a/src/Distribution/Config/Appliers/ConfigApplierInterface.php b/src/Distribution/Config/Appliers/ConfigApplierInterface.php new file mode 100644 index 000000000..054c4d8ea --- /dev/null +++ b/src/Distribution/Config/Appliers/ConfigApplierInterface.php @@ -0,0 +1,31 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Appliers; + +use PrestaShop\Module\Mbo\Distribution\Config\Config; + +interface ConfigApplierInterface +{ + public function supports(string $configKey): bool; + + public function apply(Config $config): bool; +} diff --git a/src/Distribution/Config/Appliers/Factory.php b/src/Distribution/Config/Appliers/Factory.php new file mode 100644 index 000000000..256389353 --- /dev/null +++ b/src/Distribution/Config/Appliers/Factory.php @@ -0,0 +1,55 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Appliers; + +final class Factory +{ + /** + * @var ConfigApplierInterface[] + */ + private $configAppliers = []; + + public function __construct(array $configAppliers) + { + foreach ($configAppliers as $configApplier) { + if ($configApplier instanceof ConfigApplierInterface) { + $this->configAppliers[] = $configApplier; + } + } + } + + /** + * @param string $configKey + * + * @return ConfigApplierInterface|null + */ + public function get(string $configKey): ?ConfigApplierInterface + { + foreach ($this->configAppliers as $configApplier) { + if ($configApplier->supports($configKey)) { + return $configApplier; + } + } + + return null; + } +} diff --git a/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php b/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php new file mode 100644 index 000000000..5ac657a62 --- /dev/null +++ b/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php @@ -0,0 +1,57 @@ +getThemeCatalogMenu(); + if (null === $themeCatalogMenu) { + return true; + } + + $configValue = $config->getConfigValue(); + if ('hide' === $configValue) { + return $this->applyDown($themeCatalogMenu); + } elseif ('show' === $configValue) { + return $this->applyUp($themeCatalogMenu); + } else { + throw new InvalidConfigException(sprintf('%s is not a valid config value', $configValue)); + } + } + + private function getThemeCatalogMenu() + { + $tab = Tab::getInstanceFromClassName('AdminPsMboTheme'); + + return Validate::isLoadedObject($tab) ? $tab : null; + } + + private function applyUp(Tab $themeCatalogMenu): bool + { + $themeCatalogMenu->enabled = true; + $themeCatalogMenu->active = true; + + return $themeCatalogMenu->save(); + } + + private function applyDown(Tab $themeCatalogMenu): bool + { + $themeCatalogMenu->enabled = false; + $themeCatalogMenu->active = false; + + return $themeCatalogMenu->save(); + } +} diff --git a/src/Distribution/Config/Command/ConfigChangeCommand.php b/src/Distribution/Config/Command/ConfigChangeCommand.php new file mode 100644 index 000000000..08cdc32d2 --- /dev/null +++ b/src/Distribution/Config/Command/ConfigChangeCommand.php @@ -0,0 +1,92 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Command; + +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; + +class ConfigChangeCommand +{ + /** + * @var array + */ + private $config; + + /** + * This is the current PS version in the instance. + * + * @var string + */ + private $psVersion; + + /** + * This is the current MBO module version in the instance. + * + * @var string + */ + private $mboVersion; + + /** + * @param string $config + * @param string $psVersion + * @param string $mboVersion + */ + public function __construct(string $config, string $psVersion, string $mboVersion) + { + try { + $this->config = json_decode($config, true); + } catch (\JsonException $exception) { + throw new InvalidConfigException($exception->getMessage()); + } + + if ($this->config === null && json_last_error() !== JSON_ERROR_NONE) { + throw new InvalidConfigException('Config given is invalid. Please check the structure.'); + } + + $this->psVersion = $psVersion; + $this->mboVersion = $mboVersion; + } + + /** + * @return array + */ + public function getConfig(): array + { + return $this->config; + } + + /** + * @return string + */ + public function getPsVersion(): string + { + return $this->psVersion; + } + + /** + * @return string + */ + public function getMboVersion(): string + { + return $this->mboVersion; + } +} + diff --git a/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php b/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php new file mode 100644 index 000000000..797bfc6ee --- /dev/null +++ b/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php @@ -0,0 +1,52 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\CommandHandler; + +use PrestaShop\Module\Mbo\Distribution\Config\Applier; +use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; +use PrestaShop\Module\Mbo\Distribution\Config\Factory; + +final class ConfigChangeCommandHandler +{ + /** + * @var Factory + */ + private $configFactory; + + /** + * @var Applier + */ + private $configApplier; + + public function __construct(Factory $configFactory, Applier $configApplier) + { + $this->configFactory = $configFactory; + $this->configApplier = $configApplier; + } + + public function handle(ConfigChangeCommand $command): void + { + $collection = $this->configFactory->buildAndSave($command->getConfig()); + $this->configApplier->apply($collection, $command->getPsVersion(), $command->getMboVersion()); + } +} diff --git a/src/Distribution/Config/Config.php b/src/Distribution/Config/Config.php new file mode 100644 index 000000000..35ef1c1a9 --- /dev/null +++ b/src/Distribution/Config/Config.php @@ -0,0 +1,136 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config; + +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; + +class Config +{ + private const AVAILABLE_CONFIG_KEYS = [ + 'menu_test', + 'theme_catalog_menu_link', + ]; + + private const AVAILABLE_CONFIG_VALUES = [ + 'menu_test' => ['hide', 'show'], + 'theme_catalog_menu_link' => ['hide', 'show'], + ]; + + /** + * @var string + */ + private $configKey; + + /** + * @var string + */ + private $configValue; + + /** + * @var string + */ + private $psVersion; + + /** + * @var string + */ + private $mboVersion; + + /** + * @throws InvalidConfigException + */ + public function __construct( + string $configKey, + string $configValue, + string $psVersion, + string $mboVersion + ) { + $this->assertConfigKeyIsValid($configKey); + $this->assertConfigValueIsValid($configKey, $configValue); + $this->assertPsVersionIsValid($psVersion); + $this->assertMboVersionIsValid($mboVersion); + + $this->configKey = $configKey; + $this->configValue = $configValue; + $this->psVersion = $psVersion; + $this->mboVersion = $mboVersion; + } + + /** + * @return string + */ + public function getConfigKey(): string + { + return $this->configKey; + } + + /** + * @return string + */ + public function getConfigValue(): string + { + return $this->configValue; + } + + /** + * @return string + */ + public function getPsVersion(): string + { + return $this->psVersion; + } + + /** + * @return string + */ + public function getMboVersion(): string + { + return $this->mboVersion; + } + + private function assertConfigKeyIsValid(string $configKey) + { + if (!in_array($configKey, self::AVAILABLE_CONFIG_KEYS)) { + throw new InvalidConfigException(); + } + } + + private function assertConfigValueIsValid(string $configKey, string $configValue) + { + if ( + isset(self::AVAILABLE_CONFIG_VALUES[$configKey]) + && !in_array($configValue, self::AVAILABLE_CONFIG_VALUES[$configKey]) + ) { + throw new InvalidConfigException(); + } + } + + private function assertPsVersionIsValid(string $configKey) + { + // No validation yet + } + + private function assertMboVersionIsValid(string $configKey) + { + // No validation yet + } +} diff --git a/src/Distribution/Config/Exception/CannotApplyConfigException.php b/src/Distribution/Config/Exception/CannotApplyConfigException.php new file mode 100644 index 000000000..759795b84 --- /dev/null +++ b/src/Distribution/Config/Exception/CannotApplyConfigException.php @@ -0,0 +1,26 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Exception; + +class CannotApplyConfigException extends \Exception +{ +} diff --git a/src/Distribution/Config/Exception/CannotSaveConfigException.php b/src/Distribution/Config/Exception/CannotSaveConfigException.php new file mode 100644 index 000000000..f8d4c8572 --- /dev/null +++ b/src/Distribution/Config/Exception/CannotSaveConfigException.php @@ -0,0 +1,26 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Exception; + +class CannotSaveConfigException extends \Exception +{ +} diff --git a/src/Distribution/Config/Exception/InvalidConfigException.php b/src/Distribution/Config/Exception/InvalidConfigException.php new file mode 100644 index 000000000..f12151084 --- /dev/null +++ b/src/Distribution/Config/Exception/InvalidConfigException.php @@ -0,0 +1,26 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Exception; + +class InvalidConfigException extends \Exception +{ +} diff --git a/src/Distribution/Config/Factory.php b/src/Distribution/Config/Factory.php new file mode 100644 index 000000000..981a2ae58 --- /dev/null +++ b/src/Distribution/Config/Factory.php @@ -0,0 +1,177 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config; + +use Db; +use Doctrine\DBAL\Query\QueryException; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\CannotSaveConfigException; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; +use PrestaShopDatabaseException; + +final class Factory +{ + public function __construct() + { + $this->db = Db::getInstance(); + } + + /** + * This method will receive an array of config, validate its structure, + * build a collection of config objects and save it in DB. + * + * @param array $config + * + * @throws QueryException + * @throws InvalidConfigException + * @throws CannotSaveConfigException + * @throws PrestaShopDatabaseException + */ + public function buildAndSave(array $config) + { + if (!$this->assertConfigIsValid($config)) { + throw new InvalidConfigException('Config given is invalid. Please check the structure.'); + } + + $collection = $this->buildConfigCollection($config); + + $oldCollection = $this->getCollectionFromDB(); + + $this->cleanConfig(); + + try { + $this->saveCollection($collection); + } catch (\Exception $e) { + // If something goes wrong when saving config, we roll back the old config + $this->cleanConfig(); + $this->saveCollection($oldCollection); + + throw new CannotSaveConfigException('Unable to save the config given.'); + } + + return $collection; + } + + private function assertConfigIsValid(array $config): bool + { + if (empty($config)) { + return false; + } + + foreach ($config as $singleConfig) { + if ( + !isset($singleConfig['config_key']) || + !isset($singleConfig['config_value']) || + !isset($singleConfig['ps_version']) || + !isset($singleConfig['mbo_version']) + ) { + return false; + } + } + + return true; + } + + /** + * @param array $config + * + * @return Config[] + * + * @throws InvalidConfigException + */ + private function buildConfigCollection(array $config): array + { + $collection = []; + + foreach ($config as $singleConfig) { + $collection[] = new Config( + $singleConfig['config_key'], + $singleConfig['config_value'], + $singleConfig['ps_version'], + $singleConfig['mbo_version'] + ); + } + + return $collection; + } + + /** + * @throws PrestaShopDatabaseException + * @throws InvalidConfigException + */ + private function getCollectionFromDB(): array + { + $query = 'SELECT + `id_mbo_api_config`, + `config_key`, + `config_value`, + `ps_version`, + `mbo_version` + FROM ' . _DB_PREFIX_ . 'mbo_api_config'; + + /** @var array $results */ + $results = $this->db->executeS($query); + + return $this->buildConfigCollection($results); + } + + private function cleanConfig(): void + { + $sql = []; + $sql[] = 'TRUNCATE TABLE `' . _DB_PREFIX_ . 'mbo_api_config`'; + + foreach ($sql as $query) { + if ($this->db->execute($query) == false) { + throw new QueryException($this->db->getMsgError()); + } + } + } + + /** + * @param Config[] $collection + */ + private function saveCollection(array $collection) + { + if (empty($collection)) { + return true; + } + + $dateAdd = time(); + $sql = "INSERT INTO `" . _DB_PREFIX_ . "mbo_api_config`(`config_key`,`config_value`,`ps_version`,`mbo_version`,`date_add`) VALUES "; + /** + * @var Config $config + */ + foreach ($collection as $config) { + $sql .= sprintf( + "('%s', '%s', '%s', '%s', '%s'),", + $config->getConfigKey(), + $config->getConfigValue(), + $config->getPsVersion(), + $config->getMboVersion(), + $dateAdd + ); + } + + $sql = rtrim($sql, ',') . ';'; + + return $this->db->execute($sql); + } +} diff --git a/src/Traits/HaveTabs.php b/src/Traits/HaveTabs.php index 69be67900..c022835f3 100644 --- a/src/Traits/HaveTabs.php +++ b/src/Traits/HaveTabs.php @@ -78,6 +78,13 @@ trait HaveTabs 'class_name' => 'ApiSecurityPsMbo', 'parent_class_name' => 'AdminParentModulesSf', ], + 'ApiPsMboConfig' => [ + 'name' => 'MBO Api Config', + 'visible' => false, + 'position' => 1, + 'class_name' => 'ApiConfigPsMbo', + 'parent_class_name' => 'AdminParentModulesSf', + ], ]; /** From 08bb51889a3c5cb87e1f0a320012f5e2aa1728e3 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Wed, 26 Oct 2022 14:13:11 +0000 Subject: [PATCH 14/48] Apply config on MBO module upgrade --- config/services/addons.php | 1 + config/services/api/distribution.yml | 7 ++ controllers/admin/apiConfigPsMbo.php | 24 +++++-- controllers/admin/apiPsMbo.php | 24 +++++-- controllers/admin/apiSecurityPsMbo.php | 19 +++++- .../ModuleManagementEventSubscriber.php | 26 +++++++- src/Distribution/Config/Applier.php | 22 ++++++- .../Appliers/ConfigApplierInterface.php | 4 ++ .../ThemeCatalogMenuConfigApplier.php | 4 +- .../Config/Command/ConfigChangeCommand.php | 1 - .../VersionChangeApplyConfigCommand.php | 65 +++++++++++++++++++ .../ConfigChangeCommandHandler.php | 1 - ...VersionChangeApplyConfigCommandHandler.php | 51 +++++++++++++++ src/Distribution/Config/Config.php | 38 +++++++---- src/Distribution/Config/Factory.php | 16 +++-- 15 files changed, 266 insertions(+), 37 deletions(-) create mode 100644 src/Distribution/Config/Command/VersionChangeApplyConfigCommand.php create mode 100644 src/Distribution/Config/CommandHandler/VersionChangeApplyConfigCommandHandler.php diff --git a/config/services/addons.php b/config/services/addons.php index ec5acfd25..70ac6b744 100644 --- a/config/services/addons.php +++ b/config/services/addons.php @@ -37,6 +37,7 @@ ref('mbo.cdc.context_builder'), ref('mbo.cdc.client.distribution_api'), ref('mbo.security.admin_authentication.provider'), + ref('mbo.distribution.api_version_change_config_apply_handler'), ]) ->public() ->tag('kernel.event_subscriber'); diff --git a/config/services/api/distribution.yml b/config/services/api/distribution.yml index eea5ce535..aed4cc5f7 100644 --- a/config/services/api/distribution.yml +++ b/config/services/api/distribution.yml @@ -25,3 +25,10 @@ services: arguments: - '@mbo.distribution.config_factory' - '@mbo.distribution.config_applier' + + + mbo.distribution.api_version_change_config_apply_handler: + class: 'PrestaShop\Module\Mbo\Distribution\Config\CommandHandler\VersionChangeApplyConfigCommandHandler' + arguments: + - '@mbo.distribution.config_factory' + - '@mbo.distribution.config_applier' diff --git a/controllers/admin/apiConfigPsMbo.php b/controllers/admin/apiConfigPsMbo.php index 2f0ca9b15..2cb589acf 100644 --- a/controllers/admin/apiConfigPsMbo.php +++ b/controllers/admin/apiConfigPsMbo.php @@ -1,11 +1,24 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; -use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; -use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; -use PrestaShop\Module\Mbo\Api\Exception\RetrieveNewKeyException; -use PrestaShop\Module\Mbo\Api\Exception\UnauthorizedException; use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; /** @@ -29,7 +42,6 @@ public function postProcess() ); $configCollection = $this->module->get('mbo.distribution.api_config_change_handler')->handle($command); - } catch (\Exception $exception) { $this->exitWithExceptionMessage($exception); } diff --git a/controllers/admin/apiPsMbo.php b/controllers/admin/apiPsMbo.php index ab89d2f04..4cc1b1dc1 100755 --- a/controllers/admin/apiPsMbo.php +++ b/controllers/admin/apiPsMbo.php @@ -1,13 +1,27 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; -use PrestaShop\Module\Mbo\Api\Exception\RetrieveNewKeyException; -use PrestaShop\Module\Mbo\Api\Exception\UnauthorizedException; use PrestaShop\Module\Mbo\Module\Command\ModuleStatusTransitionCommand; -use Tools; /** * This controller is responsible to execute actions on modules installed on the current shop. @@ -51,7 +65,7 @@ public function postProcess() } /** - * @inheritdoc + * {@inheritdoc} */ protected function buildSignatureMessage(): string { diff --git a/controllers/admin/apiSecurityPsMbo.php b/controllers/admin/apiSecurityPsMbo.php index 23e90d542..792900fba 100755 --- a/controllers/admin/apiSecurityPsMbo.php +++ b/controllers/admin/apiSecurityPsMbo.php @@ -1,5 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index fe312243e..c7d18fffc 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -23,6 +23,8 @@ use PrestaShop\Module\Mbo\Api\Security\AdminAuthenticationProvider; use PrestaShop\Module\Mbo\Distribution\Client; +use PrestaShop\Module\Mbo\Distribution\Config\Command\VersionChangeApplyConfigCommand; +use PrestaShop\Module\Mbo\Distribution\Config\CommandHandler\VersionChangeApplyConfigCommandHandler; use PrestaShop\Module\Mbo\Module\Repository; use PrestaShop\Module\Mbo\Service\View\ContextBuilder; use PrestaShop\Module\Mbo\Tab\TabCollectionProviderInterface; @@ -62,13 +64,25 @@ class ModuleManagementEventSubscriber implements EventSubscriberInterface */ private $adminAuthenticationProvider; + /** + * @var VersionChangeApplyConfigCommandHandler + */ + private $versionChangeApplyConfigCommandHandler; + + /** + * @var ModuleRepository + */ + private $coreModuleRepository; + public function __construct( LoggerInterface $logger, Repository $moduleRepository, TabCollectionProviderInterface $tabCollectionProvider, ContextBuilder $contextBuilder, Client $distributionClient, - AdminAuthenticationProvider $adminAuthenticationProvider + AdminAuthenticationProvider $adminAuthenticationProvider, + ContextBuilder $contextBuilder, + VersionChangeApplyConfigCommandHandler $versionChangeApplyConfigCommandHandler ) { $this->logger = $logger; $this->moduleRepository = $moduleRepository; @@ -76,6 +90,7 @@ public function __construct( $this->contextBuilder = $contextBuilder; $this->distributionClient = $distributionClient; $this->adminAuthenticationProvider = $adminAuthenticationProvider; + $this->versionChangeApplyConfigCommandHandler = $versionChangeApplyConfigCommandHandler; } public static function getSubscribedEvents(): array @@ -164,6 +179,15 @@ public function onDisableMobile(ModuleManagementEvent $event): void public function onUpgrade(ModuleManagementEvent $event): void { $this->logEvent(ModuleManagementEvent::UPGRADE, $event); + + if ('ps_mbo' === $event->getModule()->get('name')) { + $command = new VersionChangeApplyConfigCommand( + _PS_VERSION_, + $event->getModule()->disk->get('version') + ); + } + + $configCollection = $this->versionChangeApplyConfigCommandHandler->handle($command); } public function onReset(ModuleManagementEvent $event): void diff --git a/src/Distribution/Config/Applier.php b/src/Distribution/Config/Applier.php index 08b523d19..4fd64e6d0 100644 --- a/src/Distribution/Config/Applier.php +++ b/src/Distribution/Config/Applier.php @@ -66,9 +66,18 @@ public function apply(array $configCollection, string $psVersion, string $mboVer */ private function canBeApplied(Config $config, string $psVersion, string $mboVersion): bool { - return $psVersion === $config->getPsVersion() && $mboVersion === $config->getMboVersion(); + return $psVersion === $config->getPsVersion() && + $mboVersion === $config->getMboVersion() && + true !== $config->isApplied(); } + /** + * @param Config $config + * + * @return bool|void + * + * @throws InvalidConfigException + */ private function applyConfig(Config $config) { $applier = $this->appliersFactory->get($config->getConfigKey()); @@ -77,6 +86,15 @@ private function applyConfig(Config $config) return true; } - return $applier->apply($config); + if ($applier->apply($config) && null !== $config->getConfigId()) { + $sql = []; + $sql[] = 'UPDATE `' . _DB_PREFIX_ . 'mbo_api_config` SET `applied` = 1 WHERE `id_mbo_api_config`=' . $config->getConfigId(); + + foreach ($sql as $query) { + if (Db::getInstance()->execute($query) == false) { + throw new QueryException($this->db->getMsgError()); + } + } + } } } diff --git a/src/Distribution/Config/Appliers/ConfigApplierInterface.php b/src/Distribution/Config/Appliers/ConfigApplierInterface.php index 054c4d8ea..c1307f521 100644 --- a/src/Distribution/Config/Appliers/ConfigApplierInterface.php +++ b/src/Distribution/Config/Appliers/ConfigApplierInterface.php @@ -22,10 +22,14 @@ namespace PrestaShop\Module\Mbo\Distribution\Config\Appliers; use PrestaShop\Module\Mbo\Distribution\Config\Config; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; interface ConfigApplierInterface { public function supports(string $configKey): bool; + /** + * @throws InvalidConfigException + */ public function apply(Config $config): bool; } diff --git a/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php b/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php index 5ac657a62..46a46b956 100644 --- a/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php +++ b/src/Distribution/Config/Appliers/ThemeCatalogMenuConfigApplier.php @@ -4,7 +4,6 @@ use PrestaShop\Module\Mbo\Distribution\Config\Config; use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; -use PrestaShop\Module\Mbo\Tab\TabCollectionProviderInterface; use Tab; use Validate; @@ -15,6 +14,9 @@ public function supports(string $configKey): bool return $configKey === 'theme_catalog_menu_link'; } + /** + * @throws InvalidConfigException + */ public function apply(Config $config): bool { $themeCatalogMenu = $this->getThemeCatalogMenu(); diff --git a/src/Distribution/Config/Command/ConfigChangeCommand.php b/src/Distribution/Config/Command/ConfigChangeCommand.php index 08cdc32d2..98c2ebc6c 100644 --- a/src/Distribution/Config/Command/ConfigChangeCommand.php +++ b/src/Distribution/Config/Command/ConfigChangeCommand.php @@ -89,4 +89,3 @@ public function getMboVersion(): string return $this->mboVersion; } } - diff --git a/src/Distribution/Config/Command/VersionChangeApplyConfigCommand.php b/src/Distribution/Config/Command/VersionChangeApplyConfigCommand.php new file mode 100644 index 000000000..9266630d5 --- /dev/null +++ b/src/Distribution/Config/Command/VersionChangeApplyConfigCommand.php @@ -0,0 +1,65 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\Command; + +class VersionChangeApplyConfigCommand +{ + /** + * This is the current PS version in the instance. May be just upgraded. + * + * @var string + */ + private $psVersion; + + /** + * This is the current MBO module version in the instance. May be just upgraded. + * + * @var string + */ + private $mboVersion; + + /** + * @param string $psVersion + * @param string $mboVersion + */ + public function __construct(string $psVersion, string $mboVersion) + { + $this->psVersion = $psVersion; + $this->mboVersion = $mboVersion; + } + + /** + * @return string + */ + public function getPsVersion(): string + { + return $this->psVersion; + } + + /** + * @return string + */ + public function getMboVersion(): string + { + return $this->mboVersion; + } +} diff --git a/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php b/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php index 797bfc6ee..51626983d 100644 --- a/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php +++ b/src/Distribution/Config/CommandHandler/ConfigChangeCommandHandler.php @@ -23,7 +23,6 @@ use PrestaShop\Module\Mbo\Distribution\Config\Applier; use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; -use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; use PrestaShop\Module\Mbo\Distribution\Config\Factory; final class ConfigChangeCommandHandler diff --git a/src/Distribution/Config/CommandHandler/VersionChangeApplyConfigCommandHandler.php b/src/Distribution/Config/CommandHandler/VersionChangeApplyConfigCommandHandler.php new file mode 100644 index 000000000..29f49da9f --- /dev/null +++ b/src/Distribution/Config/CommandHandler/VersionChangeApplyConfigCommandHandler.php @@ -0,0 +1,51 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Distribution\Config\CommandHandler; + +use PrestaShop\Module\Mbo\Distribution\Config\Applier; +use PrestaShop\Module\Mbo\Distribution\Config\Command\VersionChangeApplyConfigCommand; +use PrestaShop\Module\Mbo\Distribution\Config\Factory; + +class VersionChangeApplyConfigCommandHandler +{ + /** + * @var Factory + */ + private $configFactory; + + /** + * @var Applier + */ + private $configApplier; + + public function __construct(Factory $configFactory, Applier $configApplier) + { + $this->configFactory = $configFactory; + $this->configApplier = $configApplier; + } + + public function handle(VersionChangeApplyConfigCommand $command): void + { + $collection = $this->configFactory->getCollectionFromDB(); + $this->configApplier->apply($collection, $command->getPsVersion(), $command->getMboVersion()); + } +} diff --git a/src/Distribution/Config/Config.php b/src/Distribution/Config/Config.php index 35ef1c1a9..d224f5748 100644 --- a/src/Distribution/Config/Config.php +++ b/src/Distribution/Config/Config.php @@ -35,6 +35,11 @@ class Config 'theme_catalog_menu_link' => ['hide', 'show'], ]; + /** + * @var int|null + */ + private $configId; + /** * @var string */ @@ -55,6 +60,11 @@ class Config */ private $mboVersion; + /** + * @var bool + */ + private $applied; + /** * @throws InvalidConfigException */ @@ -62,51 +72,53 @@ public function __construct( string $configKey, string $configValue, string $psVersion, - string $mboVersion + string $mboVersion, + bool $applied, + ?int $configId = null ) { $this->assertConfigKeyIsValid($configKey); $this->assertConfigValueIsValid($configKey, $configValue); $this->assertPsVersionIsValid($psVersion); $this->assertMboVersionIsValid($mboVersion); + $this->configId = $configId; $this->configKey = $configKey; $this->configValue = $configValue; $this->psVersion = $psVersion; $this->mboVersion = $mboVersion; + $this->applied = $applied; + } + + public function getConfigId(): ?int + { + return $this->configId; } - /** - * @return string - */ public function getConfigKey(): string { return $this->configKey; } - /** - * @return string - */ public function getConfigValue(): string { return $this->configValue; } - /** - * @return string - */ public function getPsVersion(): string { return $this->psVersion; } - /** - * @return string - */ public function getMboVersion(): string { return $this->mboVersion; } + public function isApplied(): bool + { + return $this->applied; + } + private function assertConfigKeyIsValid(string $configKey) { if (!in_array($configKey, self::AVAILABLE_CONFIG_KEYS)) { diff --git a/src/Distribution/Config/Factory.php b/src/Distribution/Config/Factory.php index 981a2ae58..7d344f429 100644 --- a/src/Distribution/Config/Factory.php +++ b/src/Distribution/Config/Factory.php @@ -67,7 +67,7 @@ public function buildAndSave(array $config) throw new CannotSaveConfigException('Unable to save the config given.'); } - return $collection; + return $this->getCollectionFromDB(); } private function assertConfigIsValid(array $config): bool @@ -106,7 +106,9 @@ private function buildConfigCollection(array $config): array $singleConfig['config_key'], $singleConfig['config_value'], $singleConfig['ps_version'], - $singleConfig['mbo_version'] + $singleConfig['mbo_version'], + isset($singleConfig['applied']) ? (bool) $singleConfig['applied'] : false, + isset($singleConfig['id_mbo_api_config']) ? (int) $singleConfig['id_mbo_api_config'] : null ); } @@ -117,14 +119,15 @@ private function buildConfigCollection(array $config): array * @throws PrestaShopDatabaseException * @throws InvalidConfigException */ - private function getCollectionFromDB(): array + public function getCollectionFromDB(): array { $query = 'SELECT `id_mbo_api_config`, `config_key`, `config_value`, `ps_version`, - `mbo_version` + `mbo_version`, + `applied` FROM ' . _DB_PREFIX_ . 'mbo_api_config'; /** @var array $results */ @@ -155,17 +158,18 @@ private function saveCollection(array $collection) } $dateAdd = time(); - $sql = "INSERT INTO `" . _DB_PREFIX_ . "mbo_api_config`(`config_key`,`config_value`,`ps_version`,`mbo_version`,`date_add`) VALUES "; + $sql = 'INSERT INTO `' . _DB_PREFIX_ . 'mbo_api_config`(`config_key`,`config_value`,`ps_version`,`mbo_version`,`applied`,`date_add`) VALUES '; /** * @var Config $config */ foreach ($collection as $config) { $sql .= sprintf( - "('%s', '%s', '%s', '%s', '%s'),", + "('%s', '%s', '%s', '%s', '%d', '%s'),", $config->getConfigKey(), $config->getConfigValue(), $config->getPsVersion(), $config->getMboVersion(), + $config->isApplied(), $dateAdd ); } From 3b8ada51d086e16769a1465cd81d313e03681508 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Thu, 27 Oct 2022 12:06:32 +0000 Subject: [PATCH 15/48] Retrive config on MBO install + check and hanble change of PS version --- ps_mbo.php | 1 + .../ModuleManagementEventSubscriber.php | 4 +-- src/Distribution/Client.php | 19 +++++++++++ src/Helpers/Config.php | 19 +++++++++-- src/Traits/HaveShopOnExternalService.php | 28 ++++++++++++++++ .../Hooks/UseActionDispatcherBefore.php | 33 +++++++++++++++++++ 6 files changed, 100 insertions(+), 4 deletions(-) diff --git a/ps_mbo.php b/ps_mbo.php index 87f09b1e3..db472a333 100755 --- a/ps_mbo.php +++ b/ps_mbo.php @@ -66,6 +66,7 @@ class ps_mbo extends Module public $configurationList = [ 'PS_MBO_SHOP_ADMIN_UUID' => '', // 'ADMIN' because there will be only one for all shops in a multishop context 'PS_MBO_SHOP_ADMIN_MAIL' => '', + 'PS_MBO_LAST_PS_VERSION_API_CONFIG' => '', ]; /** diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index c7d18fffc..4fc03119b 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -185,9 +185,9 @@ public function onUpgrade(ModuleManagementEvent $event): void _PS_VERSION_, $event->getModule()->disk->get('version') ); - } - $configCollection = $this->versionChangeApplyConfigCommandHandler->handle($command); + $configCollection = $this->versionChangeApplyConfigCommandHandler->handle($command); + } } public function onReset(ModuleManagementEvent $event): void diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index c471b2947..e523ff9f7 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -216,6 +216,25 @@ public function getConf() return $this->cacheProvider->fetch($cacheKey); } + /** + * Register new Shop on Distribution API. + * + * @param array $params + * + * @return stdClass + * + * @throws \GuzzleHttp\Exception\GuzzleException + * @usage \PrestaShop\Module\Mbo\Traits\HaveShopOnExternalService::registerShop + */ + public function getApiConf(array $params = []): stdClass + { + return $this->processRequestAndReturn( + 'shops/conf/' . Config::getShopMboUuid(), + null, + self::HTTP_METHOD_GET, + ['form_params' => $this->mergeShopDataWithParams($params)] + ); + } /** * Send a tracking to the API diff --git a/src/Helpers/Config.php b/src/Helpers/Config.php index f3c20faf0..daa1a9168 100644 --- a/src/Helpers/Config.php +++ b/src/Helpers/Config.php @@ -49,7 +49,7 @@ public static function resetConfigValues(): void public static function getShopMboUuid(): ?string { if (null === self::$SHOP_MBO_UUID) { - // PS_MBO_SHOP_ADMIN_UUID have the save value for all shops + // PS_MBO_SHOP_ADMIN_UUID have the same value for all shops // to prevent errors in a multishop context, // we request the shops list and get the config value for the 1st one $singleShop = self::getSingleShop(); @@ -69,7 +69,7 @@ public static function getShopMboUuid(): ?string public static function getShopMboAdminMail(): ?string { if (null === self::$SHOP_MBO_ADMIN_MAIL) { - // PS_MBO_SHOP_ADMIN_ADMIN_MAIL have the save value for all shops + // PS_MBO_SHOP_ADMIN_ADMIN_MAIL have the same value for all shops // to prevent errors in a multishop context, // we request the shops list and get the config value for the 1st one $singleShop = self::getSingleShop(); @@ -129,6 +129,21 @@ public static function isUsingSecureProtocol(): bool $singleShop->id ); } + public static function getLastPsVersionApiConfig(): ?string + { + // PS_MBO_LAST_PS_VERSION_API_CONFIG have the same value for all shops + // to prevent errors in a multishop context, + // we request the shops list and get the config value for the 1st one + $singleShop = self::getSingleShop(); + + return Configuration::get( + 'PS_MBO_LAST_PS_VERSION_API_CONFIG', + null, + $singleShop->id_shop_group, + $singleShop->id, + null + ); + } private static function getSingleShop(): Shop { diff --git a/src/Traits/HaveShopOnExternalService.php b/src/Traits/HaveShopOnExternalService.php index 08f8095ad..ba6b0290a 100644 --- a/src/Traits/HaveShopOnExternalService.php +++ b/src/Traits/HaveShopOnExternalService.php @@ -25,6 +25,7 @@ use Exception; use GuzzleHttp\Exception\GuzzleException; use PrestaShop\Module\Mbo\Distribution\Client; +use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; use Ramsey\Uuid\Uuid; use Shop; @@ -42,6 +43,7 @@ private function registerShop(): void // Furthermore, this make a check and ensure existence in case of accidental removal $this->installConfiguration(); $this->callServiceWithLockFile('registerShop'); + $this->syncApiConfig(); } /** @@ -130,6 +132,7 @@ private function installConfiguration(): bool $adminUuid = Uuid::uuid4()->toString(); $this->configurationList['PS_MBO_SHOP_ADMIN_UUID'] = $adminUuid; $this->configurationList['PS_MBO_SHOP_ADMIN_MAIL'] = sprintf('mbo-%s@prestashop.com', $adminUuid); + $this->configurationList['PS_MBO_LAST_PS_VERSION_API_CONFIG'] = _PS_VERSION_; foreach (Shop::getShops(false, null, true) as $shopId) { foreach ($this->configurationList as $name => $value) { @@ -147,4 +150,29 @@ private function installConfiguration(): bool return $result; } + + private function syncApiConfig() + {return; + if (file_exists($this->moduleCacheDir . 'registerShop.lock')) { + // The shop is not registered yet, do nothing + return; + } + + /** @var Client $distributionApi */ + $distributionApi = $this->getService('mbo.cdc.client.distribution_api'); + + // Add the default params + $params = array_merge($params, [ + 'mbo_api_user_token' => $this->getAdminAuthenticationProvider()->getAdminToken(), + ]); + $distributionApi->setBearer($this->getAdminAuthenticationProvider()->getMboJWT()); + $apiConfig = $distributionApi->getApiConf(); + + if (empty($apiConfig) || empty($apiConfig->config)) { + return; + } + + $command = new ConfigChangeCommand($apiConfig->config, _PS_VERSION_, $this->version); + $configCollection = $this->getService('mbo.distribution.api_config_change_handler')->handle($command); + } } diff --git a/src/Traits/Hooks/UseActionDispatcherBefore.php b/src/Traits/Hooks/UseActionDispatcherBefore.php index 94a64ab6f..7165475b0 100644 --- a/src/Traits/Hooks/UseActionDispatcherBefore.php +++ b/src/Traits/Hooks/UseActionDispatcherBefore.php @@ -22,7 +22,10 @@ namespace PrestaShop\Module\Mbo\Traits\Hooks; use Cache; +use Configuration; use Context; +use PrestaShop\Module\Mbo\Distribution\Config\Command\VersionChangeApplyConfigCommand; +use PrestaShop\Module\Mbo\Helpers\Config; use PrestaShop\PrestaShop\Core\Domain\Employee\Exception\EmployeeException; use Tools; @@ -45,6 +48,7 @@ public function hookActionDispatcherBefore(array $params): void ])) { $this->ensureShopIsRegistered(); $this->ensureShopIsUpdated(); + $this->ensureApiConfigIsApplied(); } $this->ensureApiUserExistAndIsLogged($controllerName, $params); @@ -66,6 +70,35 @@ private function ensureShopIsUpdated(): void $this->updateShop(); } + private function ensureApiConfigIsApplied(): void + { + $cacheProvider = $this->get('doctrine.cache.provider'); + $cacheKey = 'mbo_last_ps_version_api_config_check'; + + if ($cacheProvider->contains($cacheKey)) { + $lastCheck = $cacheProvider->fetch($cacheKey); + + $timeSinceLastCheck = (strtotime('now') - strtotime($lastCheck)) / (60*60); + if ($timeSinceLastCheck < 3) { // If last check happened lss than 3hrs, do nothing + return; + } + } + + if (_PS_VERSION_ === Config::getLastPsVersionApiConfig()) { + // Config already applied for this version of PS + return; + } + + // Apply the config for the new PS version + $command = new VersionChangeApplyConfigCommand(_PS_VERSION_, $this->version); + $configCollection = $this->get('mbo.distribution.api_version_change_config_apply_handler')->handle($command); + + // Update the PS_MBO_LAST_PS_VERSION_API_CONFIG + Configuration::updateValue('PS_MBO_LAST_PS_VERSION_API_CONFIG', _PS_VERSION_); + + $cacheProvider->save($cacheKey, (new \DateTime())->format('Y-m-d H:i:s'), 0); + } + /** * @param string|bool $controllerName * @param array $params From 930d06ac168759eb3faab6868915a651ab162981 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Thu, 27 Oct 2022 22:23:49 +0000 Subject: [PATCH 16/48] Sync config on MBO install --- controllers/admin/apiConfigPsMbo.php | 17 +++++-- ps_mbo.php | 6 ++- src/Api/Config/Config.php | 1 + src/DependencyInjection/ContainerProvider.php | 1 + src/Distribution/Client.php | 16 ++----- src/Distribution/Config/Applier.php | 10 ++-- .../Config/Command/ConfigChangeCommand.php | 17 ++----- src/Distribution/Config/Config.php | 47 ------------------- src/Distribution/Config/Factory.php | 2 +- src/Helpers/Config.php | 1 + src/Traits/HaveShopOnExternalService.php | 15 +++--- .../Hooks/UseActionDispatcherBefore.php | 2 +- 12 files changed, 42 insertions(+), 93 deletions(-) diff --git a/controllers/admin/apiConfigPsMbo.php b/controllers/admin/apiConfigPsMbo.php index 2cb589acf..b7cc13ad8 100644 --- a/controllers/admin/apiConfigPsMbo.php +++ b/controllers/admin/apiConfigPsMbo.php @@ -20,14 +20,15 @@ use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; +use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; /** - * This controller is responsible to execute actions on modules installed on the current shop. + * This controller is responsible to receive api config, save it and apply modifications needed. * Caller have to be fully authenticated to perform actions given. */ class apiConfigPsMboController extends AbstractAdminApiController { - public $type = Config::MODULE_ACTIONS; + public $type = Config::API_CONFIG; /** * @return void @@ -35,8 +36,18 @@ class apiConfigPsMboController extends AbstractAdminApiController public function postProcess() { try { + try { + $config = json_decode(Tools::getValue('conf'), true); + } catch (\JsonException $exception) { + throw new InvalidConfigException($exception->getMessage()); + } + + if ($config === null && json_last_error() !== JSON_ERROR_NONE) { + throw new InvalidConfigException('Config given is invalid. Please check the structure.'); + } + $command = new ConfigChangeCommand( - Tools::getValue('config'), + $config, _PS_VERSION_, $this->module->version ); diff --git a/ps_mbo.php b/ps_mbo.php index db472a333..6c898c104 100755 --- a/ps_mbo.php +++ b/ps_mbo.php @@ -138,9 +138,8 @@ public function install(): bool // For now, do nothing } + $this->installTables(); if (parent::install() && $this->registerHook($this->getHooksNames())) { - $this->installTables(); - // Do come extra operations on modules' registration like modifying orders $this->installHooks(); @@ -150,6 +149,9 @@ public function install(): bool return true; } + // If installation fails, we remove the tables previously created + $this->uninstallTables(); + return false; } diff --git a/src/Api/Config/Config.php b/src/Api/Config/Config.php index 7c7c59778..1f78419cd 100755 --- a/src/Api/Config/Config.php +++ b/src/Api/Config/Config.php @@ -39,6 +39,7 @@ class Config self::RETRIEVE_NEW_KEY_ERROR_CODE => 'Failed to retrieve key', ]; + const API_CONFIG = 'api_config'; const MODULE_ACTIONS = 'module_actions'; const SECURITY_ME = 'security_me'; } diff --git a/src/DependencyInjection/ContainerProvider.php b/src/DependencyInjection/ContainerProvider.php index 358f0f9bc..13140bbca 100644 --- a/src/DependencyInjection/ContainerProvider.php +++ b/src/DependencyInjection/ContainerProvider.php @@ -98,6 +98,7 @@ public function get(string $containerName): ContainerInterface $loader->load('http_clients.yml'); $loader->load('distribution.yml'); $loader->load('accounts.yml'); + $loader->load('api/distribution.yml'); $containerBuilder->compile(true); $dumper = new PhpDumper($containerBuilder); diff --git a/src/Distribution/Client.php b/src/Distribution/Client.php index e523ff9f7..eed6331e8 100644 --- a/src/Distribution/Client.php +++ b/src/Distribution/Client.php @@ -216,24 +216,18 @@ public function getConf() return $this->cacheProvider->fetch($cacheKey); } + /** - * Register new Shop on Distribution API. + * Retrieve API config from Distribution API. * - * @param array $params - * - * @return stdClass + * @return array * * @throws \GuzzleHttp\Exception\GuzzleException * @usage \PrestaShop\Module\Mbo\Traits\HaveShopOnExternalService::registerShop */ - public function getApiConf(array $params = []): stdClass + public function getApiConf(): array { - return $this->processRequestAndReturn( - 'shops/conf/' . Config::getShopMboUuid(), - null, - self::HTTP_METHOD_GET, - ['form_params' => $this->mergeShopDataWithParams($params)] - ); + return $this->processRequestAndReturn('shops/conf-mbo'); } /** diff --git a/src/Distribution/Config/Applier.php b/src/Distribution/Config/Applier.php index 4fd64e6d0..3e34fb9b6 100644 --- a/src/Distribution/Config/Applier.php +++ b/src/Distribution/Config/Applier.php @@ -66,24 +66,22 @@ public function apply(array $configCollection, string $psVersion, string $mboVer */ private function canBeApplied(Config $config, string $psVersion, string $mboVersion): bool { - return $psVersion === $config->getPsVersion() && - $mboVersion === $config->getMboVersion() && + return version_compare($psVersion, $config->getPsVersion(), '==') && + version_compare($mboVersion, $config->getMboVersion(), '==') && true !== $config->isApplied(); } /** * @param Config $config * - * @return bool|void - * * @throws InvalidConfigException */ - private function applyConfig(Config $config) + private function applyConfig(Config $config): void { $applier = $this->appliersFactory->get($config->getConfigKey()); if (null === $applier) { - return true; + return; } if ($applier->apply($config) && null !== $config->getConfigId()) { diff --git a/src/Distribution/Config/Command/ConfigChangeCommand.php b/src/Distribution/Config/Command/ConfigChangeCommand.php index 98c2ebc6c..f8c2cb21b 100644 --- a/src/Distribution/Config/Command/ConfigChangeCommand.php +++ b/src/Distribution/Config/Command/ConfigChangeCommand.php @@ -21,8 +21,6 @@ namespace PrestaShop\Module\Mbo\Distribution\Config\Command; -use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; - class ConfigChangeCommand { /** @@ -45,22 +43,13 @@ class ConfigChangeCommand private $mboVersion; /** - * @param string $config + * @param array $config * @param string $psVersion * @param string $mboVersion */ - public function __construct(string $config, string $psVersion, string $mboVersion) + public function __construct(array $config, string $psVersion, string $mboVersion) { - try { - $this->config = json_decode($config, true); - } catch (\JsonException $exception) { - throw new InvalidConfigException($exception->getMessage()); - } - - if ($this->config === null && json_last_error() !== JSON_ERROR_NONE) { - throw new InvalidConfigException('Config given is invalid. Please check the structure.'); - } - + $this->config = $config; $this->psVersion = $psVersion; $this->mboVersion = $mboVersion; } diff --git a/src/Distribution/Config/Config.php b/src/Distribution/Config/Config.php index d224f5748..94ead485e 100644 --- a/src/Distribution/Config/Config.php +++ b/src/Distribution/Config/Config.php @@ -21,20 +21,8 @@ namespace PrestaShop\Module\Mbo\Distribution\Config; -use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; - class Config { - private const AVAILABLE_CONFIG_KEYS = [ - 'menu_test', - 'theme_catalog_menu_link', - ]; - - private const AVAILABLE_CONFIG_VALUES = [ - 'menu_test' => ['hide', 'show'], - 'theme_catalog_menu_link' => ['hide', 'show'], - ]; - /** * @var int|null */ @@ -65,9 +53,6 @@ class Config */ private $applied; - /** - * @throws InvalidConfigException - */ public function __construct( string $configKey, string $configValue, @@ -76,11 +61,6 @@ public function __construct( bool $applied, ?int $configId = null ) { - $this->assertConfigKeyIsValid($configKey); - $this->assertConfigValueIsValid($configKey, $configValue); - $this->assertPsVersionIsValid($psVersion); - $this->assertMboVersionIsValid($mboVersion); - $this->configId = $configId; $this->configKey = $configKey; $this->configValue = $configValue; @@ -118,31 +98,4 @@ public function isApplied(): bool { return $this->applied; } - - private function assertConfigKeyIsValid(string $configKey) - { - if (!in_array($configKey, self::AVAILABLE_CONFIG_KEYS)) { - throw new InvalidConfigException(); - } - } - - private function assertConfigValueIsValid(string $configKey, string $configValue) - { - if ( - isset(self::AVAILABLE_CONFIG_VALUES[$configKey]) - && !in_array($configValue, self::AVAILABLE_CONFIG_VALUES[$configKey]) - ) { - throw new InvalidConfigException(); - } - } - - private function assertPsVersionIsValid(string $configKey) - { - // No validation yet - } - - private function assertMboVersionIsValid(string $configKey) - { - // No validation yet - } } diff --git a/src/Distribution/Config/Factory.php b/src/Distribution/Config/Factory.php index 7d344f429..681845d51 100644 --- a/src/Distribution/Config/Factory.php +++ b/src/Distribution/Config/Factory.php @@ -157,7 +157,7 @@ private function saveCollection(array $collection) return true; } - $dateAdd = time(); + $dateAdd = (new \DateTime())->format('Y-m-d H:i:s'); $sql = 'INSERT INTO `' . _DB_PREFIX_ . 'mbo_api_config`(`config_key`,`config_value`,`ps_version`,`mbo_version`,`applied`,`date_add`) VALUES '; /** * @var Config $config diff --git a/src/Helpers/Config.php b/src/Helpers/Config.php index daa1a9168..3b0678b62 100644 --- a/src/Helpers/Config.php +++ b/src/Helpers/Config.php @@ -129,6 +129,7 @@ public static function isUsingSecureProtocol(): bool $singleShop->id ); } + public static function getLastPsVersionApiConfig(): ?string { // PS_MBO_LAST_PS_VERSION_API_CONFIG have the same value for all shops diff --git a/src/Traits/HaveShopOnExternalService.php b/src/Traits/HaveShopOnExternalService.php index ba6b0290a..3d7a9014a 100644 --- a/src/Traits/HaveShopOnExternalService.php +++ b/src/Traits/HaveShopOnExternalService.php @@ -152,7 +152,7 @@ private function installConfiguration(): bool } private function syncApiConfig() - {return; + { if (file_exists($this->moduleCacheDir . 'registerShop.lock')) { // The shop is not registered yet, do nothing return; @@ -161,18 +161,17 @@ private function syncApiConfig() /** @var Client $distributionApi */ $distributionApi = $this->getService('mbo.cdc.client.distribution_api'); - // Add the default params - $params = array_merge($params, [ - 'mbo_api_user_token' => $this->getAdminAuthenticationProvider()->getAdminToken(), - ]); $distributionApi->setBearer($this->getAdminAuthenticationProvider()->getMboJWT()); - $apiConfig = $distributionApi->getApiConf(); + $config = $distributionApi->getApiConf(); - if (empty($apiConfig) || empty($apiConfig->config)) { + if (empty($config)) { return; } - $command = new ConfigChangeCommand($apiConfig->config, _PS_VERSION_, $this->version); + // We need that conversion to ensure we have an array instead of stdClass + $config = json_decode(json_encode($config), true); + + $command = new ConfigChangeCommand($config, _PS_VERSION_, $this->version); $configCollection = $this->getService('mbo.distribution.api_config_change_handler')->handle($command); } } diff --git a/src/Traits/Hooks/UseActionDispatcherBefore.php b/src/Traits/Hooks/UseActionDispatcherBefore.php index 7165475b0..6f16c36f3 100644 --- a/src/Traits/Hooks/UseActionDispatcherBefore.php +++ b/src/Traits/Hooks/UseActionDispatcherBefore.php @@ -78,7 +78,7 @@ private function ensureApiConfigIsApplied(): void if ($cacheProvider->contains($cacheKey)) { $lastCheck = $cacheProvider->fetch($cacheKey); - $timeSinceLastCheck = (strtotime('now') - strtotime($lastCheck)) / (60*60); + $timeSinceLastCheck = (strtotime('now') - strtotime($lastCheck)) / (60 * 60); if ($timeSinceLastCheck < 3) { // If last check happened lss than 3hrs, do nothing return; } From ea457b914af6cee0aaf9789e5a1f073d99b17f3a Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Thu, 3 Nov 2022 20:53:35 +0000 Subject: [PATCH 17/48] Add upgrade script for V4.1.0 --- ps_mbo.php | 25 ++++++++++++++----------- upgrade/upgrade-4.1.0.php | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 upgrade/upgrade-4.1.0.php diff --git a/ps_mbo.php b/ps_mbo.php index 6c898c104..53c52a439 100755 --- a/ps_mbo.php +++ b/ps_mbo.php @@ -379,19 +379,22 @@ private function getModuleEnv(?string $default = null): string return getenv($this->getModuleEnvVar()) ?: $default ?: self::DEFAULT_ENV; } - private function installTables(): bool + public function installTables(?string $table = null): bool { $sqlQueries = []; - $sqlQueries[] = ' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'mbo_api_config` ( - `id_mbo_api_config` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `config_key` varchar(255) NULL, - `config_value` varchar(255) NULL, - `ps_version` varchar(255) NULL, - `mbo_version` varchar(255) NULL, - `applied` TINYINT(1) NOT NULL DEFAULT \'0\', - `date_add` datetime NOT NULL, - PRIMARY KEY (`id_mbo_api_config`) - ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=UTF8;'; + + if (null === $table || 'mbo_api_config' === $table) { + $sqlQueries[] = ' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'mbo_api_config` ( + `id_mbo_api_config` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `config_key` varchar(255) NULL, + `config_value` varchar(255) NULL, + `ps_version` varchar(255) NULL, + `mbo_version` varchar(255) NULL, + `applied` TINYINT(1) NOT NULL DEFAULT \'0\', + `date_add` datetime NOT NULL, + PRIMARY KEY (`id_mbo_api_config`) + ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=UTF8;'; + } foreach ($sqlQueries as $query) { if (!Db::getInstance()->execute($query)) { diff --git a/upgrade/upgrade-4.1.0.php b/upgrade/upgrade-4.1.0.php new file mode 100644 index 000000000..73a989007 --- /dev/null +++ b/upgrade/upgrade-4.1.0.php @@ -0,0 +1,34 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + +/** + * @param ps_mbo $module + * + * @return bool + */ +function upgrade_module_4_1_0($module) +{ + // We migrate Module Selections Tab to MBO + if (false === $module->installTables('mbo_api_config')) { + return false; + } + + return true; +} From 0264e0403c8c408e238de4f64ae4c20d4667f025 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 8 Nov 2022 07:45:37 +0000 Subject: [PATCH 18/48] Install MBO Api Config Tab for Upgrade to 4.1.0 --- src/Addons/Subscriber/ModuleManagementEventSubscriber.php | 1 - upgrade/upgrade-4.1.0.php | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php index 4fc03119b..942b225a7 100644 --- a/src/Addons/Subscriber/ModuleManagementEventSubscriber.php +++ b/src/Addons/Subscriber/ModuleManagementEventSubscriber.php @@ -81,7 +81,6 @@ public function __construct( ContextBuilder $contextBuilder, Client $distributionClient, AdminAuthenticationProvider $adminAuthenticationProvider, - ContextBuilder $contextBuilder, VersionChangeApplyConfigCommandHandler $versionChangeApplyConfigCommandHandler ) { $this->logger = $logger; diff --git a/upgrade/upgrade-4.1.0.php b/upgrade/upgrade-4.1.0.php index 73a989007..a6700a8ac 100644 --- a/upgrade/upgrade-4.1.0.php +++ b/upgrade/upgrade-4.1.0.php @@ -25,6 +25,11 @@ */ function upgrade_module_4_1_0($module) { + // We install MBO Api Config Tab + if (false === $module->installTab(ps_mbo::$ADMIN_CONTROLLERS['ApiPsMboConfig'])) { + return false; + } + // We migrate Module Selections Tab to MBO if (false === $module->installTables('mbo_api_config')) { return false; From 55d61ea62f8e7c450438d243d06a0af96afe05fa Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Wed, 9 Nov 2022 15:04:27 +0000 Subject: [PATCH 19/48] Change signature --- controllers/admin/apiConfigPsMbo.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/controllers/admin/apiConfigPsMbo.php b/controllers/admin/apiConfigPsMbo.php index b7cc13ad8..4f6f25d7e 100644 --- a/controllers/admin/apiConfigPsMbo.php +++ b/controllers/admin/apiConfigPsMbo.php @@ -19,6 +19,7 @@ */ use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; +use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; @@ -61,4 +62,29 @@ public function postProcess() 'message' => 'Config successfully applied', ]); } + + /** + * {@inheritdoc} + */ + protected function buildSignatureMessage(): string + { + // Payload elements + $conf = Tools::getValue('conf'); + $actionUuid = Tools::getValue('action_uuid'); + + if ( + !$conf || + !$actionUuid + ) { + throw new IncompleteSignatureParamsException('Expected signature elements are not given'); + } + + $keyVersion = Tools::getValue('version'); + + return json_encode([ + 'conf' => $conf, + 'action_uuid' => $actionUuid, + 'version' => $keyVersion, + ]); + } } From c8360f45660868a7fbeef26f9216419d493056bd Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Thu, 10 Nov 2022 15:02:20 +0000 Subject: [PATCH 20/48] Unique API controller for conf and module actions --- config/services/api.yml | 19 ++++ config/services/security.yml | 1 + controllers/admin/apiConfigPsMbo.php | 90 ------------------- controllers/admin/apiPsMbo.php | 66 +++----------- .../Controller/AbstractAdminApiController.php | 8 ++ src/Api/Exception/UnknownServiceException.php | 26 ++++++ src/Api/Security/AuthorizationChecker.php | 15 +++- src/Api/Service/ConfigApplyExecutor.php | 67 ++++++++++++++ src/Api/Service/Factory.php | 66 ++++++++++++++ src/Api/Service/ModuleTransitionExecutor.php | 86 ++++++++++++++++++ src/Api/Service/ServiceExecutorInterface.php | 25 ++++++ src/Traits/HaveTabs.php | 7 -- 12 files changed, 325 insertions(+), 151 deletions(-) delete mode 100644 controllers/admin/apiConfigPsMbo.php create mode 100755 src/Api/Exception/UnknownServiceException.php create mode 100644 src/Api/Service/ConfigApplyExecutor.php create mode 100644 src/Api/Service/Factory.php create mode 100644 src/Api/Service/ModuleTransitionExecutor.php create mode 100644 src/Api/Service/ServiceExecutorInterface.php diff --git a/config/services/api.yml b/config/services/api.yml index 83668b32e..826f9914a 100644 --- a/config/services/api.yml +++ b/config/services/api.yml @@ -26,3 +26,22 @@ services: - '@ps_mbo' - '@PrestaShop\Module\Mbo\Api\Config\Env' - '@logger' + + mbo.api.service.executors.module_transition: + class: PrestaShop\Module\Mbo\Api\Service\ModuleTransitionExecutor + arguments: + - '@mbo.modules.state_machine.module_status_transition_handler' + + mbo.api.service.executors.config_apply: + class: PrestaShop\Module\Mbo\Api\Service\ConfigApplyExecutor + arguments: + - '@mbo.distribution.api_config_change_handler' + - '@ps_mbo' + + mbo.api.service.factory: + class: PrestaShop\Module\Mbo\Api\Service\Factory + arguments: + - [ + '@mbo.api.service.executors.module_transition', + '@mbo.api.service.executors.config_apply' + ] diff --git a/config/services/security.yml b/config/services/security.yml index 96f886412..704b6cbfc 100644 --- a/config/services/security.yml +++ b/config/services/security.yml @@ -17,6 +17,7 @@ services: - '@doctrine.cache.provider' - '@mbo.cdc.client.distribution_api' - '@mbo.security.admin_authentication.provider' + - '@logger' mbo.security.permission_checker: class: PrestaShop\Module\Mbo\Security\PermissionChecker diff --git a/controllers/admin/apiConfigPsMbo.php b/controllers/admin/apiConfigPsMbo.php deleted file mode 100644 index 4f6f25d7e..000000000 --- a/controllers/admin/apiConfigPsMbo.php +++ /dev/null @@ -1,90 +0,0 @@ - - * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 - */ -use PrestaShop\Module\Mbo\Api\Config\Config; -use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; -use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; -use PrestaShop\Module\Mbo\Distribution\Config\Command\ConfigChangeCommand; -use PrestaShop\Module\Mbo\Distribution\Config\Exception\InvalidConfigException; - -/** - * This controller is responsible to receive api config, save it and apply modifications needed. - * Caller have to be fully authenticated to perform actions given. - */ -class apiConfigPsMboController extends AbstractAdminApiController -{ - public $type = Config::API_CONFIG; - - /** - * @return void - */ - public function postProcess() - { - try { - try { - $config = json_decode(Tools::getValue('conf'), true); - } catch (\JsonException $exception) { - throw new InvalidConfigException($exception->getMessage()); - } - - if ($config === null && json_last_error() !== JSON_ERROR_NONE) { - throw new InvalidConfigException('Config given is invalid. Please check the structure.'); - } - - $command = new ConfigChangeCommand( - $config, - _PS_VERSION_, - $this->module->version - ); - - $configCollection = $this->module->get('mbo.distribution.api_config_change_handler')->handle($command); - } catch (\Exception $exception) { - $this->exitWithExceptionMessage($exception); - } - - $this->exitWithResponse([ - 'message' => 'Config successfully applied', - ]); - } - - /** - * {@inheritdoc} - */ - protected function buildSignatureMessage(): string - { - // Payload elements - $conf = Tools::getValue('conf'); - $actionUuid = Tools::getValue('action_uuid'); - - if ( - !$conf || - !$actionUuid - ) { - throw new IncompleteSignatureParamsException('Expected signature elements are not given'); - } - - $keyVersion = Tools::getValue('version'); - - return json_encode([ - 'conf' => $conf, - 'action_uuid' => $actionUuid, - 'version' => $keyVersion, - ]); - } -} diff --git a/controllers/admin/apiPsMbo.php b/controllers/admin/apiPsMbo.php index 4cc1b1dc1..e2cbbfddc 100755 --- a/controllers/admin/apiPsMbo.php +++ b/controllers/admin/apiPsMbo.php @@ -17,11 +17,11 @@ * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ -use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; -use PrestaShop\Module\Mbo\Module\Command\ModuleStatusTransitionCommand; +use PrestaShop\Module\Mbo\Api\Service\Factory as ExcutorsFactory; +use Tools; /** * This controller is responsible to execute actions on modules installed on the current shop. @@ -29,39 +29,28 @@ */ class apiPsMboController extends AbstractAdminApiController { - public $type = Config::MODULE_ACTIONS; +// public $type = Config::MODULE_ACTIONS; /** * @return void */ public function postProcess() { - $module = null; + $response = null; try { - $transition = Tools::getValue('action'); - $moduleName = Tools::getValue('module'); - $source = Tools::getValue('source', null); - - if (empty($transition) || empty($moduleName)) { - throw new QueryParamsException('You need transition and module parameters'); + $service = Tools::getValue('service'); + if (empty($service)) { + throw new QueryParamsException('[service] parameter is required'); } - $command = new ModuleStatusTransitionCommand($transition, $moduleName, $source); - - /** @var \PrestaShop\Module\Mbo\Module\Module $module */ - $module = $this->module->get('mbo.modules.state_machine.module_status_transition_handler')->handle($command); + /** @var ExcutorsFactory $executorsFactory */ + $executorsFactory = $this->module->get('mbo.api.service.factory'); - $moduleUrls = $module->get('urls'); - $configUrl = (bool) $module->get('is_configurable') && isset($moduleUrls['configure']) ? $this->generateTokenizedModuleActionUrl($moduleUrls['configure']) : null; + $response = $executorsFactory->build($service)->execute($this->module); } catch (\Exception $exception) { $this->exitWithExceptionMessage($exception); } - $this->exitWithResponse([ - 'message' => 'Transition successfully executed', - 'module_status' => $module->getStatus(), - 'version' => $module->get('version'), - 'config_url' => $configUrl, - ]); + $this->exitWithResponse($response); } /** @@ -70,9 +59,9 @@ public function postProcess() protected function buildSignatureMessage(): string { // Payload elements - $action = Tools::getValue('action'); - $module = Tools::getValue('module'); - $adminToken = Tools::getValue('admin_token'); + $action = Tools::getValue('action', ''); + $module = Tools::getValue('module', ''); + $adminToken = Tools::getValue('admin_token', ''); $actionUuid = Tools::getValue('action_uuid'); if ( @@ -94,31 +83,4 @@ protected function buildSignatureMessage(): string 'version' => $keyVersion, ]); } - - private function generateTokenizedModuleActionUrl($url): string - { - $components = parse_url($url); - $baseUrl = ($components['path'] ?? ''); - $queryParams = []; - if (isset($components['query'])) { - $query = $components['query']; - - parse_str($query, $queryParams); - } - - if (!isset($queryParams['_token'])) { - return $url; - } - - $adminToken = Tools::getValue('admin_token'); - $queryParams['_token'] = $adminToken; - - $url = $baseUrl . '?' . http_build_query($queryParams, '', '&'); - if (isset($components['fragment']) && $components['fragment'] !== '') { - /* This copy-paste from Symfony's UrlGenerator */ - $url .= '#' . strtr(rawurlencode($components['fragment']), ['%2F' => '/', '%3F' => '?']); - } - - return $url; - } } diff --git a/src/Api/Controller/AbstractAdminApiController.php b/src/Api/Controller/AbstractAdminApiController.php index 5351405c9..9003063f9 100755 --- a/src/Api/Controller/AbstractAdminApiController.php +++ b/src/Api/Controller/AbstractAdminApiController.php @@ -33,6 +33,7 @@ use PrestaShop\Module\Mbo\Api\Security\AuthorizationChecker; use PrestaShop\Module\Mbo\Helpers\Config as ConfigHelper; use ps_mbo; +use Psr\Log\LoggerInterface; use Tools; abstract class AbstractAdminApiController extends ModuleAdminController @@ -64,6 +65,11 @@ abstract class AbstractAdminApiController extends ModuleAdminController */ private $authorizationChecker; + /** + * @var LoggerInterface + */ + protected $logger; + public function __construct() { parent::__construct(); @@ -71,11 +77,13 @@ public function __construct() $this->errorHandler = $this->module->get(ErrorHandler::class); $this->adminAuthenticationProvider = $this->module->get('mbo.security.admin_authentication.provider'); $this->authorizationChecker = $this->module->get(AuthorizationChecker::class); + $this->logger = $this->module->get('logger'); } public function init(): void { try { + $this->logger->info('API Call received = ' . $_SERVER['REQUEST_URI']); $this->authorize(); } catch (IncompleteSignatureParamsException $exception) { $this->errorHandler->handle($exception); diff --git a/src/Api/Exception/UnknownServiceException.php b/src/Api/Exception/UnknownServiceException.php new file mode 100755 index 000000000..f729a4fea --- /dev/null +++ b/src/Api/Exception/UnknownServiceException.php @@ -0,0 +1,26 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Api\Exception; + +class UnknownServiceException extends \Exception +{ +} diff --git a/src/Api/Security/AuthorizationChecker.php b/src/Api/Security/AuthorizationChecker.php index ff0c380f4..96cb77ca4 100644 --- a/src/Api/Security/AuthorizationChecker.php +++ b/src/Api/Security/AuthorizationChecker.php @@ -27,6 +27,7 @@ use PrestaShop\Module\Mbo\Api\Exception\UnauthorizedException; use PrestaShop\Module\Mbo\Distribution\Client; use PrestaShop\Module\Mbo\Helpers\Config; +use Psr\Log\LoggerInterface; class AuthorizationChecker { @@ -55,11 +56,21 @@ class AuthorizationChecker */ private $keyCacheIndex; - public function __construct(CacheProvider $cacheProvider, Client $distributionClient, AdminAuthenticationProvider $adminAuthenticationProvider) - { + /** + * @var LoggerInterface + */ + private $logger; + + public function __construct( + CacheProvider $cacheProvider, + Client $distributionClient, + AdminAuthenticationProvider $adminAuthenticationProvider, + LoggerInterface $logger + ) { $this->cacheProvider = $cacheProvider; $this->distributionClient = $distributionClient; $this->adminAuthenticationProvider = $adminAuthenticationProvider; + $this->logger = $logger; $shopUuid = Config::getShopMboUuid(); $this->keyVersionCacheIndex = 'api_key_version_' . $shopUuid; diff --git a/src/Api/Service/ConfigApplyExecutor.php b/src/Api/Service/ConfigApplyExecutor.php new file mode 100644 index 000000000..06d2385dc --- /dev/null +++ b/src/Api/Service/ConfigApplyExecutor.php @@ -0,0 +1,67 @@ +configChangeCommandHandler = $configChangeCommandHandler; + } + + /** + * @inheritDoc + */ + public function canExecute(string $service): bool + { + return self::SERVICE === $service; + } + + /** + * @inheritDoc + */ + public function execute(...$parameters): array + { + if (!$parameters[0] instanceof \Module) { + throw new InvalidArgumentException(); + } + + $module = $parameters[0]; + + try { + $config = json_decode(Tools::getValue('conf'), true); + } catch (\JsonException $exception) { + throw new InvalidConfigException($exception->getMessage()); + } + + if ($config === null && json_last_error() !== JSON_ERROR_NONE) { + var_dump(Tools::getValue('conf'), gettype(Tools::getValue('conf')), $config, json_last_error_msg()); + throw new InvalidConfigException('Config given is invalid. Please check the structure.'); + } + + $command = new ConfigChangeCommand( + $config, + _PS_VERSION_, + $module->version + ); + + $configCollection = $this->configChangeCommandHandler->handle($command); + + return [ + 'message' => 'Config successfully applied', + ]; + } +} diff --git a/src/Api/Service/Factory.php b/src/Api/Service/Factory.php new file mode 100644 index 000000000..c929bbd8e --- /dev/null +++ b/src/Api/Service/Factory.php @@ -0,0 +1,66 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ +declare(strict_types=1); + +namespace PrestaShop\Module\Mbo\Api\Service; + +use PrestaShop\Module\Mbo\Api\Exception\UnknownServiceException; + +final class Factory +{ + private const ALLOWED_SERVICES = [ + ModuleTransitionExecutor::SERVICE, + ConfigApplyExecutor::SERVICE, + ]; + + /** + * @param ServiceExecutorInterface[] $executors + */ + public function __construct(array $executors) + { + $this->executors = $executors; + } + + /** + * @var ServiceExecutorInterface[] + */ + private $executors; + + public function build(string $service): ServiceExecutorInterface + { + $this->assertServiceIsAllowed($service); + + foreach ($this->executors as $executor) { + if ($executor->canExecute($service)) { + return $executor; + } + } + + throw new UnknownServiceException('No executor have been found for that service'); + } + + private function assertServiceIsAllowed(string $service): void + { + if (!in_array($service, self::ALLOWED_SERVICES)) { + throw new UnknownServiceException(sprintf('Unknown service given : %s', $service)); + } + } + +} diff --git a/src/Api/Service/ModuleTransitionExecutor.php b/src/Api/Service/ModuleTransitionExecutor.php new file mode 100644 index 000000000..f6049ed65 --- /dev/null +++ b/src/Api/Service/ModuleTransitionExecutor.php @@ -0,0 +1,86 @@ +moduleStatusTransitionCommandHandler = $moduleStatusTransitionCommandHandler; + } + + /** + * @inheritDoc + */ + public function canExecute(string $service): bool + { + return self::SERVICE === $service; + } + + /** + * @inheritDoc + */ + public function execute(...$parameters): array + { + $transition = Tools::getValue('action'); + $moduleName = Tools::getValue('module'); + $source = Tools::getValue('source', null); + + if (empty($transition) || empty($moduleName)) { + throw new QueryParamsException('You need transition and module parameters'); + } + $command = new ModuleStatusTransitionCommand($transition, $moduleName, $source); + + /** @var \PrestaShop\Module\Mbo\Module\Module $module */ + $module = $this->moduleStatusTransitionCommandHandler->handle($command); + + $moduleUrls = $module->get('urls'); + $configUrl = (bool) $module->get('is_configurable') && isset($moduleUrls['configure']) ? $this->generateTokenizedModuleActionUrl($moduleUrls['configure']) : null; + + return [ + 'message' => 'Transition successfully executed', + 'module_status' => $module->getStatus(), + 'version' => $module->get('version'), + 'config_url' => $configUrl, + ]; + } + + private function generateTokenizedModuleActionUrl($url): string + { + $components = parse_url($url); + $baseUrl = ($components['path'] ?? ''); + $queryParams = []; + if (isset($components['query'])) { + $query = $components['query']; + + parse_str($query, $queryParams); + } + + if (!isset($queryParams['_token'])) { + return $url; + } + + $adminToken = Tools::getValue('admin_token'); + $queryParams['_token'] = $adminToken; + + $url = $baseUrl . '?' . http_build_query($queryParams, '', '&'); + if (isset($components['fragment']) && $components['fragment'] !== '') { + /* This copy-paste from Symfony's UrlGenerator */ + $url .= '#' . strtr(rawurlencode($components['fragment']), ['%2F' => '/', '%3F' => '?']); + } + + return $url; + } +} diff --git a/src/Api/Service/ServiceExecutorInterface.php b/src/Api/Service/ServiceExecutorInterface.php new file mode 100644 index 000000000..1b882ea5f --- /dev/null +++ b/src/Api/Service/ServiceExecutorInterface.php @@ -0,0 +1,25 @@ + 'ApiSecurityPsMbo', 'parent_class_name' => 'AdminParentModulesSf', ], - 'ApiPsMboConfig' => [ - 'name' => 'MBO Api Config', - 'visible' => false, - 'position' => 1, - 'class_name' => 'ApiConfigPsMbo', - 'parent_class_name' => 'AdminParentModulesSf', - ], ]; /** From eddf6e0b1ca5c5d60d525cf680df8ef824f5d989 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Mon, 14 Nov 2022 12:30:25 +0000 Subject: [PATCH 21/48] Update gitignore --- .gitignore | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.gitignore b/.gitignore index 76a7f9455..a60ed4884 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,23 @@ config_*.xml !/vendor/index.php tests/.phpunit.result.cache .env + +## Directory-based project format: + +### PhpStorm ### +.idea/ + +### NetBeans ### +nbproject/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml +.nb-gradle/ + +### Eclipse ### +.buildpath +.project +.settings/ +.externalToolBuilders/ From 0be2f2e17ce6f8f45953df17204de779a1854b30 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Mon, 14 Nov 2022 16:16:28 +0100 Subject: [PATCH 22/48] Feat :chart_with_upwards_trend: Add version on link presents in search panel --- src/Traits/Hooks/UseActionGetAlternativeSearchPanels.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Traits/Hooks/UseActionGetAlternativeSearchPanels.php b/src/Traits/Hooks/UseActionGetAlternativeSearchPanels.php index 2c6cdf9ea..d45548cf5 100644 --- a/src/Traits/Hooks/UseActionGetAlternativeSearchPanels.php +++ b/src/Traits/Hooks/UseActionGetAlternativeSearchPanels.php @@ -38,12 +38,19 @@ public function hookActionGetAlternativeSearchPanels(array $params): array { $searchedExpression = $params['bo_query']; + $version = defined('_PS_VERSION_') ? _PS_VERSION_ : ''; + if ($lastDotIndex = strrpos($version, '.')) { + $trailingVersion = str_replace('.', '', substr($version, 0, $lastDotIndex)); + } else { + $trailingVersion = ''; + } + $queryParams = [ 'search_query' => $searchedExpression, 'utm_source' => 'back-office', 'utm_medium' => 'search', 'utm_campaign' => 'back-office-' . $this->context->language->iso_code, - 'utm_content' => 'download', + 'utm_content' => 'download' . $trailingVersion, ]; $searchPanels = []; From 2cd31b3339841d9223146d483197769020dbce55 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Mon, 14 Nov 2022 17:53:27 +0000 Subject: [PATCH 23/48] Change the way to compare versions --- controllers/admin/apiPsMbo.php | 3 --- src/Api/Service/ConfigApplyExecutor.php | 4 ++-- src/Api/Service/Factory.php | 1 - src/Api/Service/ModuleTransitionExecutor.php | 4 ++-- src/Api/Service/ServiceExecutorInterface.php | 1 - src/Distribution/Config/Applier.php | 17 +++++++++++++++-- upgrade/upgrade-4.1.0.php | 5 ----- 7 files changed, 19 insertions(+), 16 deletions(-) diff --git a/controllers/admin/apiPsMbo.php b/controllers/admin/apiPsMbo.php index e2cbbfddc..3f5fec771 100755 --- a/controllers/admin/apiPsMbo.php +++ b/controllers/admin/apiPsMbo.php @@ -21,7 +21,6 @@ use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; use PrestaShop\Module\Mbo\Api\Service\Factory as ExcutorsFactory; -use Tools; /** * This controller is responsible to execute actions on modules installed on the current shop. @@ -29,8 +28,6 @@ */ class apiPsMboController extends AbstractAdminApiController { -// public $type = Config::MODULE_ACTIONS; - /** * @return void */ diff --git a/src/Api/Service/ConfigApplyExecutor.php b/src/Api/Service/ConfigApplyExecutor.php index 06d2385dc..b2016c5a0 100644 --- a/src/Api/Service/ConfigApplyExecutor.php +++ b/src/Api/Service/ConfigApplyExecutor.php @@ -23,7 +23,7 @@ public function __construct(ConfigChangeCommandHandler $configChangeCommandHandl } /** - * @inheritDoc + * {@inheritDoc} */ public function canExecute(string $service): bool { @@ -31,7 +31,7 @@ public function canExecute(string $service): bool } /** - * @inheritDoc + * {@inheritDoc} */ public function execute(...$parameters): array { diff --git a/src/Api/Service/Factory.php b/src/Api/Service/Factory.php index c929bbd8e..e5e2f75a0 100644 --- a/src/Api/Service/Factory.php +++ b/src/Api/Service/Factory.php @@ -62,5 +62,4 @@ private function assertServiceIsAllowed(string $service): void throw new UnknownServiceException(sprintf('Unknown service given : %s', $service)); } } - } diff --git a/src/Api/Service/ModuleTransitionExecutor.php b/src/Api/Service/ModuleTransitionExecutor.php index f6049ed65..2cb69e8ac 100644 --- a/src/Api/Service/ModuleTransitionExecutor.php +++ b/src/Api/Service/ModuleTransitionExecutor.php @@ -22,7 +22,7 @@ public function __construct(ModuleStatusTransitionCommandHandler $moduleStatusTr } /** - * @inheritDoc + * {@inheritDoc} */ public function canExecute(string $service): bool { @@ -30,7 +30,7 @@ public function canExecute(string $service): bool } /** - * @inheritDoc + * {@inheritDoc} */ public function execute(...$parameters): array { diff --git a/src/Api/Service/ServiceExecutorInterface.php b/src/Api/Service/ServiceExecutorInterface.php index 1b882ea5f..53741ca9a 100644 --- a/src/Api/Service/ServiceExecutorInterface.php +++ b/src/Api/Service/ServiceExecutorInterface.php @@ -21,5 +21,4 @@ public function canExecute(string $service): bool; * @return array */ public function execute(...$parameters): array; - } diff --git a/src/Distribution/Config/Applier.php b/src/Distribution/Config/Applier.php index 3e34fb9b6..ea6c6820c 100644 --- a/src/Distribution/Config/Applier.php +++ b/src/Distribution/Config/Applier.php @@ -66,8 +66,8 @@ public function apply(array $configCollection, string $psVersion, string $mboVer */ private function canBeApplied(Config $config, string $psVersion, string $mboVersion): bool { - return version_compare($psVersion, $config->getPsVersion(), '==') && - version_compare($mboVersion, $config->getMboVersion(), '==') && + return $this->versionCompareWithSemVer($psVersion, $config->getPsVersion(), '==') && + $this->versionCompareWithSemVer($mboVersion, $config->getMboVersion(), '==') && true !== $config->isApplied(); } @@ -95,4 +95,17 @@ private function applyConfig(Config $config): void } } } + + private function versionCompareWithSemVer(string $a, string $b, string $operator) + { + $a = explode('.', $a); + $b = explode('.', $b); + + $minSize = count($a) <= count($b) ? count($a) : count($b); + + $versionA = implode('.', array_slice($a, 0, $minSize)); + $versionB = implode('.', array_slice($b, 0, $minSize)); + + return version_compare($versionA, $versionB, $operator); + } } diff --git a/upgrade/upgrade-4.1.0.php b/upgrade/upgrade-4.1.0.php index a6700a8ac..73a989007 100644 --- a/upgrade/upgrade-4.1.0.php +++ b/upgrade/upgrade-4.1.0.php @@ -25,11 +25,6 @@ */ function upgrade_module_4_1_0($module) { - // We install MBO Api Config Tab - if (false === $module->installTab(ps_mbo::$ADMIN_CONTROLLERS['ApiPsMboConfig'])) { - return false; - } - // We migrate Module Selections Tab to MBO if (false === $module->installTables('mbo_api_config')) { return false; From 7a0ea451ad0528c1496ce8ca134b059e6866afb3 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 15 Nov 2022 10:13:45 +0000 Subject: [PATCH 24/48] Config applier for module_selection --- config/services/api/distribution.yml | 6 +- .../ModuleSelectionMenuConfigApplier.php | 59 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/Distribution/Config/Appliers/ModuleSelectionMenuConfigApplier.php diff --git a/config/services/api/distribution.yml b/config/services/api/distribution.yml index aed4cc5f7..5b2576e11 100644 --- a/config/services/api/distribution.yml +++ b/config/services/api/distribution.yml @@ -13,11 +13,15 @@ services: mbo.distribution.theme_catalog_menu_config_applier: class: PrestaShop\Module\Mbo\Distribution\Config\Appliers\ThemeCatalogMenuConfigApplier + mbo.distribution.module_selection_menu_config_applier: + class: PrestaShop\Module\Mbo\Distribution\Config\Appliers\ModuleSelectionMenuConfigApplier + mbo.distribution.config_appliers_factory: class: 'PrestaShop\Module\Mbo\Distribution\Config\Appliers\Factory' arguments: - [ - '@mbo.distribution.theme_catalog_menu_config_applier' + '@mbo.distribution.theme_catalog_menu_config_applier', + '@mbo.distribution.module_selection_menu_config_applier' ] mbo.distribution.api_config_change_handler: diff --git a/src/Distribution/Config/Appliers/ModuleSelectionMenuConfigApplier.php b/src/Distribution/Config/Appliers/ModuleSelectionMenuConfigApplier.php new file mode 100644 index 000000000..9958a08fe --- /dev/null +++ b/src/Distribution/Config/Appliers/ModuleSelectionMenuConfigApplier.php @@ -0,0 +1,59 @@ +getModuleSelectionMenu(); + if (null === $moduleSelectionMenu) { + return true; + } + + $configValue = $config->getConfigValue(); + if ('hide' === $configValue) { + return $this->applyDown($moduleSelectionMenu); + } elseif ('show' === $configValue) { + return $this->applyUp($moduleSelectionMenu); + } else { + throw new InvalidConfigException(sprintf('%s is not a valid config value', $configValue)); + } + } + + private function getModuleSelectionMenu() + { + $tab = Tab::getInstanceFromClassName('AdminPsMboSelection'); + + return Validate::isLoadedObject($tab) ? $tab : null; + } + + private function applyUp(Tab $moduleSelectionMenu): bool + { + $moduleSelectionMenu->enabled = true; + $moduleSelectionMenu->active = true; + + return $moduleSelectionMenu->save(); + } + + private function applyDown(Tab $moduleSelectionMenu): bool + { + $moduleSelectionMenu->enabled = false; + $moduleSelectionMenu->active = false; + + return $moduleSelectionMenu->save(); + } +} From 94f08cea7951b1fa4b4f9260bafba222bc2049d9 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Tue, 15 Nov 2022 12:13:39 +0100 Subject: [PATCH 25/48] Fix :bug: Force the version to be SemVer to avoid having 1.8.0.0 parameter --- config/services/addons.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/services/addons.yml b/config/services/addons.yml index bf10bc777..a8d5bd2be 100644 --- a/config/services/addons.yml +++ b/config/services/addons.yml @@ -32,7 +32,7 @@ services: - "@=service('translator').getLocale()" - "@=service('prestashop.adapter.data_provider.country').getIsoCodebyId()" - "@=service('prestashop.adapter.legacy.configuration').get('_PS_BASE_URL_')" - - "@=service('prestashop.core.foundation.version').getVersion()" + - "@=service('prestashop.core.foundation.version').getSemVersion()" mbo.addons.toolbar: class: PrestaShop\Module\Mbo\Addons\Toolbar From 83f65041133c835560fef23123f7478c4c09b18c Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 15 Nov 2022 11:27:21 +0000 Subject: [PATCH 26/48] Build release for 4.1.x --- .github/workflows/build-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 623f6f682..23344c6b2 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -11,6 +11,7 @@ on: - 3.x - 4.x - 4.0.x + - 4.1.x env: LABELS: ${{toJSON(github.event.pull_request.labels)}} From 756b64ccc7834b525baa96bbd57ba2d51abc55ae Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 15 Nov 2022 13:40:29 +0000 Subject: [PATCH 27/48] Build release for 4.1.x --- .github/workflows/build-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 23344c6b2..ab08b7186 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -97,7 +97,7 @@ jobs: upload_asset_preproduction: runs-on: ubuntu-latest needs: [deploy] - if: github.event_name == 'push' && (github.ref == 'refs/heads/4.x' || github.ref == 'refs/heads/4.0.x') + if: github.event_name == 'push' && (github.ref == 'refs/heads/4.x' || github.ref == 'refs/heads/4.0.x' || github.ref == 'refs/heads/4.1.x') steps: - name: Retrieve from cache module folder From a19dbf5b670116489fd02082b0723ad3070af980 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Tue, 15 Nov 2022 14:43:04 +0100 Subject: [PATCH 28/48] Fix :bug: Do not block processes if ps_account is not installed --- src/Accounts/Provider/AccountsDataProvider.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Accounts/Provider/AccountsDataProvider.php b/src/Accounts/Provider/AccountsDataProvider.php index bb0d316bc..2e8bba5f8 100644 --- a/src/Accounts/Provider/AccountsDataProvider.php +++ b/src/Accounts/Provider/AccountsDataProvider.php @@ -75,7 +75,11 @@ public function getAccountsShopId(): ?string public function getAccountsUserId(): ?string { - $userUuid = $this->getAccountsService()->getUserUuid(); + try { + $userUuid = $this->getAccountsService()->getUserUuid(); + } catch (Exception $e) { + $userUuid = null; + } return $userUuid ? $userUuid : null; } From e79bd882230ede4afca6fa5093e639ab1f80faf2 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 9 Nov 2022 17:41:15 +0100 Subject: [PATCH 29/48] Feat :pushpin: Update composer / Pin version 4.1 for module --- .github/workflows/build-release.yml | 2 +- composer.json | 4 +- composer.lock | 6328 +++++++++++++-------------- config.xml | 2 +- ps_mbo.php | 4 +- 5 files changed, 3027 insertions(+), 3313 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index ab08b7186..92f0d03cf 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -30,7 +30,7 @@ jobs: run: composer install --no-dev -o - name: Clean-up project - uses: 'PrestaShopCorp/github-action-clean-before-deploy@v1.1' + uses: 'PrestaShopCorp/github-action-clean-before-deploy@v2.0' - name: Cache module folder uses: 'actions/cache@v3' diff --git a/composer.json b/composer.json index 8f987ab2c..c19a72240 100644 --- a/composer.json +++ b/composer.json @@ -24,9 +24,9 @@ "prestashop/circuit-breaker": "^4", "guzzlehttp/guzzle": "^7.4", "ramsey/uuid": "^4.2", - "sentry/sdk": "^3.2", + "sentry/sdk": "^3.3", "symfony/workflow": "^4.4.20", - "prestashop/prestashop-accounts-installer": "^1.0.1", + "prestashop/prestashop-accounts-installer": "^1.0", "firebase/php-jwt": "^6.3" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 956536041..bd5c87e3b 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": "14738e893435dc71fe853ca417fa7a60", + "content-hash": "ea6d9358bd5432abf6a413a749bae2a1", "packages": [ { "name": "brick/math", @@ -133,112 +133,120 @@ "time": "2022-02-21T13:15:14+00:00" }, { - "name": "composer/semver", - "version": "3.2.6", + "name": "firebase/php-jwt", + "version": "v6.3.1", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "83e511e247de329283478496f7a1e114c9517506" + "url": "https://github.com/firebase/php-jwt.git", + "reference": "ddfaddcb520488b42bca3a75e17e9dd53c3667da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", - "reference": "83e511e247de329283478496f7a1e114c9517506", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/ddfaddcb520488b42bca3a75e17e9dd53c3667da", + "reference": "ddfaddcb520488b42bca3a75e17e9dd53c3667da", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.1||^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.54", - "symfony/phpunit-bridge": "^4.2 || ^5" + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^1.1", + "phpunit/phpunit": "^7.5||^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } + "suggest": { + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" }, + "type": "library", "autoload": { "psr-4": { - "Composer\\Semver\\": "src" + "Firebase\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", "keywords": [ - "semantic", - "semver", - "validation", - "versioning" + "jwt", + "php" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.6" + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.3.1" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-10-25T11:34:17+00:00" + "time": "2022-11-01T21:20:08+00:00" }, { - "name": "composer/xdebug-handler", - "version": "2.0.2", + "name": "guzzlehttp/guzzle", + "version": "7.5.0", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", - "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1 || ^2 || ^3" + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-dev" + } + }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Composer\\XdebugHandler\\": "src" + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -247,67 +255,105 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "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": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "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": "Restarts a process without Xdebug.", + "description": "Guzzle is a PHP HTTP client library", "keywords": [ - "Xdebug", - "performance" + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" + "url": "https://github.com/GrahamCampbell", + "type": "github" }, { - "url": "https://github.com/composer", + "url": "https://github.com/Nyholm", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", "type": "tidelift" } ], - "time": "2021-07-31T17:03:58+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { - "name": "doctrine/annotations", - "version": "1.13.2", + "name": "guzzlehttp/promises", + "version": "1.5.2", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" + "php": ">=5.5" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + "GuzzleHttp\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -316,70 +362,95 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "description": "Guzzle promises library", "keywords": [ - "annotations", - "docblock", - "parser" + "promise" ], "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, - "time": "2021-08-05T19:00:23+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" }, { - "name": "doctrine/lexer", - "version": "1.2.1", + "name": "guzzlehttp/psr7", + "version": "2.4.3", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "url": "https://github.com/guzzle/psr7.git", + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "2.4-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "GuzzleHttp\\Psr7\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -388,170 +459,160 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "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" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" ], "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" + "url": "https://github.com/GrahamCampbell", + "type": "github" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/Nyholm", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { - "name": "firebase/php-jwt", - "version": "v6.3.0", + "name": "http-interop/http-factory-guzzle", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "018dfc4e1da92ad8a1b90adc4893f476a3b41cb8" + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "6e1efa1e020bf1c47cf0f13654e8ef9efb1463b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/018dfc4e1da92ad8a1b90adc4893f476a3b41cb8", - "reference": "018dfc4e1da92ad8a1b90adc4893f476a3b41cb8", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/6e1efa1e020bf1c47cf0f13654e8ef9efb1463b3", + "reference": "6e1efa1e020bf1c47cf0f13654e8ef9efb1463b3", "shasum": "" }, "require": { - "php": "^7.1||^8.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", - "phpspec/prophecy-phpunit": "^1.1", - "phpunit/phpunit": "^7.5||^9.5", - "psr/cache": "^1.0||^2.0", - "psr/http-client": "^1.0", + "guzzlehttp/psr7": "^1.4.2||^2.0", "psr/http-factory": "^1.0" }, - "suggest": { - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5" }, "type": "library", "autoload": { "psr-4": { - "Firebase\\JWT\\": "src" + "Http\\Factory\\Guzzle\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", + "description": "An HTTP Factory using Guzzle PSR7", "keywords": [ - "jwt", - "php" + "factory", + "http", + "psr-17", + "psr-7" ], "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.3.0" + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.1.1" }, - "time": "2022-07-15T16:48:45+00:00" + "time": "2021-07-23T15:14:50+00:00" }, { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.3.1", + "name": "jean85/pretty-package-versions", + "version": "2.0.5", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "b37bf90405cec3f7a83c18e645ef748bcb87ac11" + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/b37bf90405cec3f7a83c18e645ef748bcb87ac11", - "reference": "b37bf90405cec3f7a83c18e645ef748bcb87ac11", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", "shasum": "" }, "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^2.0", - "doctrine/annotations": "^1.12", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.2.5 || ^8.0", - "php-cs-fixer/diff": "^2.0", - "symfony/console": "^4.4.20 || ^5.1.3", - "symfony/event-dispatcher": "^4.4.20 || ^5.0", - "symfony/filesystem": "^4.4.20 || ^5.0", - "symfony/finder": "^4.4.20 || ^5.0", - "symfony/options-resolver": "^4.4.20 || ^5.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.23", - "symfony/polyfill-php81": "^1.23", - "symfony/process": "^4.4.20 || ^5.0", - "symfony/stopwatch": "^4.4.20 || ^5.0" + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.8", - "php-coveralls/php-coveralls": "^2.4.3", - "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.10.3", - "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^5.2.4", - "symfony/yaml": "^4.4.20 || ^5.0" + "friendsofphp/php-cs-fixer": "^2.17", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^0.12.66", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", "autoload": { "psr-4": { - "PhpCsFixer\\": "src/" + "Jean85\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -560,76 +621,72 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" } ], - "description": "A tool to automatically fix PHP code style", + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.3.1" + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2021-11-15T18:01:18+00:00" + "time": "2021-10-08T21:21:46+00:00" }, { - "name": "guzzlehttp/guzzle", - "version": "7.4.5", + "name": "php-http/client-common", + "version": "2.6.0", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + "url": "https://github.com/php-http/client-common.git", + "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "url": "https://api.github.com/repos/php-http/client-common/zipball/45db684cd4e186dcdc2b9c06b22970fe123796c0", + "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0", "shasum": "" }, "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", - "php": "^7.2.5 || ^8.0", + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.17" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", - "psr/log": "^1.1 || ^2.0 || ^3.0" + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" }, "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "GuzzleHttp\\": "src/" + "Http\\Client\\Common\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -637,106 +694,63 @@ "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": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "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" + "email": "mark.sagikazar@gmail.com" } ], - "description": "Guzzle is a PHP HTTP client library", + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", "keywords": [ "client", - "curl", - "framework", + "common", "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" + "httplug" ], "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.6.0" }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2022-06-20T22:16:13+00:00" + "time": "2022-09-29T09:59:43+00:00" }, { - "name": "guzzlehttp/promises", - "version": "1.5.1", + "name": "php-http/discovery", + "version": "1.14.3", "source": { "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "url": "https://github.com/php-http/discovery.git", + "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735", + "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.9-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "GuzzleHttp\\Promise\\": "src/" + "Http\\Discovery\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -745,91 +759,60 @@ ], "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": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "Guzzle promises library", + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", "keywords": [ - "promise" + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" ], "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.3" }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-07-11T14:04:40+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "2.4.0", + "name": "php-http/httplug", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "13388f00956b1503577598873fffb5ae994b5737" + "url": "https://github.com/php-http/httplug.git", + "reference": "f640739f80dfa1152533976e3c112477f69274eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", - "reference": "13388f00956b1503577598873fffb5ae994b5737", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" + "Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -838,34 +821,8 @@ ], "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" + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" }, { "name": "Márk Sági-Kazár", @@ -873,67 +830,68 @@ "homepage": "https://sagikazarmark.hu" } ], - "description": "PSR-7 message implementation that also provides common utility methods", + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" + "client", + "http" ], "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.0" + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" }, - "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": "2022-06-20T21:43:11+00:00" + "time": "2022-02-21T09:52:22+00:00" }, { - "name": "http-interop/http-factory-guzzle", - "version": "1.1.1", + "name": "php-http/message", + "version": "1.13.0", "source": { "type": "git", - "url": "https://github.com/http-interop/http-factory-guzzle.git", - "reference": "6e1efa1e020bf1c47cf0f13654e8ef9efb1463b3" + "url": "https://github.com/php-http/message.git", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/6e1efa1e020bf1c47cf0f13654e8ef9efb1463b3", - "reference": "6e1efa1e020bf1c47cf0f13654e8ef9efb1463b3", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.4.2||^2.0", - "psr/http-factory": "^1.0" + "clue/stream-filter": "^1.5", + "php": "^7.1 || ^8.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" }, "provide": { - "psr/http-factory-implementation": "^1.0" + "php-http/message-factory-implementation": "1.0" }, "require-dev": { - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5" + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "laminas/laminas-diactoros": "^2.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Factory\\Guzzle\\": "src/" - } + "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", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -941,57 +899,50 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "An HTTP Factory using Guzzle PSR7", + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", "keywords": [ - "factory", "http", - "psr-17", + "message", "psr-7" ], "support": { - "issues": "https://github.com/http-interop/http-factory-guzzle/issues", - "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.1.1" + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.13.0" }, - "time": "2021-07-23T15:14:50+00:00" + "time": "2022-02-11T13:41:14+00:00" }, { - "name": "jean85/pretty-package-versions", - "version": "2.0.5", + "name": "php-http/message-factory", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", - "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", "shasum": "" }, "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.17", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^0.12.66", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" + "php": ">=5.4", + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { "psr-4": { - "Jean85\\": "src/" + "Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1000,245 +951,201 @@ ], "authors": [ { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "A library to get pretty versions strings of installed dependencies", + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", "keywords": [ - "composer", - "package", - "release", - "versions" + "factory", + "http", + "message", + "stream", + "uri" ], "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/master" }, - "time": "2021-10-08T21:21:46+00:00" + "time": "2015-12-19T14:08:53+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.13.2", + "name": "php-http/promise", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" + "Http\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "A PHP parser written in PHP", + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", "keywords": [ - "parser", - "php" + "promise" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2020-07-07T09:29:14+00:00" }, { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", + "name": "prestashop/circuit-breaker", + "version": "v4.0.1", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + "url": "https://github.com/PrestaShop/circuit-breaker.git", + "reference": "8dff14c1411448d4d64b740d12100637ad64f5c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "url": "https://api.github.com/repos/PrestaShop/circuit-breaker/zipball/8dff14c1411448d4d64b740d12100637ad64f5c7", + "reference": "8dff14c1411448d4d64b740d12100637ad64f5c7", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0 || ^8.0" + "guzzlehttp/guzzle": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" + "doctrine/cache": "^1.10.2", + "phpunit/phpunit": "^8", + "prestashop/php-dev-tools": "^4.1", + "psr/simple-cache": "^1.0", + "symfony/cache": "^4.4", + "symfony/event-dispatcher": "^4.4" + }, + "suggest": { + "doctrine/cache": "Allows use of Doctrine Cache adapters to store transactions", + "ext-apcu": "Allows use of APCu adapter (performant) to store transactions", + "symfony/cache": "Allows use of Symfony Cache adapters to store transactions" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PrestaShop\\CircuitBreaker\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PrestaShop SA", + "email": "contact@prestashop.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "PrestaShop Community", + "homepage": "http://contributors.prestashop.com/" } ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], + "description": "A circuit breaker implementation for PHP", "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + "issues": "https://github.com/PrestaShop/circuit-breaker/issues", + "source": "https://github.com/PrestaShop/circuit-breaker/tree/v4.0.1" }, - "time": "2020-10-14T08:32:19+00:00" + "time": "2021-10-12T15:22:50+00:00" }, { - "name": "php-http/client-common", - "version": "2.5.0", + "name": "prestashop/prestashop-accounts-installer", + "version": "v1.0.1", "source": { "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "d135751167d57e27c74de674d6a30cef2dc8e054" + "url": "https://github.com/PrestaShopCorp/prestashop-accounts-installer.git", + "reference": "f038af2408968d1045330b32aa1fed65fcaf4c9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054", - "reference": "d135751167d57e27c74de674d6a30cef2dc8e054", + "url": "https://api.github.com/repos/PrestaShopCorp/prestashop-accounts-installer/zipball/f038af2408968d1045330b32aa1fed65fcaf4c9b", + "reference": "f038af2408968d1045330b32aa1fed65fcaf4c9b", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "php-http/httplug": "^2.0", - "php-http/message": "^1.6", - "php-http/message-factory": "^1.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", - "symfony/polyfill-php80": "^1.17" + "php": ">=5.6" }, "require-dev": { - "doctrine/instantiator": "^1.1", - "guzzlehttp/psr7": "^1.4", - "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" - }, - "suggest": { - "ext-json": "To detect JSON responses with the ContentTypePlugin", - "ext-libxml": "To detect XML responses with the ContentTypePlugin", - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + "friendsofphp/php-cs-fixer": "^2.16", + "fzaninotto/faker": "^1.9", + "phpunit/phpunit": "^5.7", + "prestashop/php-dev-tools": "3.*" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, "autoload": { "psr-4": { - "Http\\Client\\Common\\": "src/" + "PrestaShop\\PsAccountsInstaller\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], + "description": "Utility package to install `ps_accounts` module or present data to trigger manual install from psx configuration page.", "support": { - "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.5.0" + "issues": "https://github.com/PrestaShopCorp/prestashop-accounts-installer/issues", + "source": "https://github.com/PrestaShopCorp/prestashop-accounts-installer/tree/v1.0.1" }, - "time": "2021-11-26T15:01:24+00:00" + "time": "2021-07-23T15:40:36+00:00" }, { - "name": "php-http/discovery", - "version": "1.14.3", + "name": "psr/container", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735" + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735", - "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.2.0" }, - "conflict": { - "nyholm/psr7": "<1.0" - }, - "require-dev": { - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1" - }, - "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - } + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1246,60 +1153,52 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Finds installed HTTPlug implementations and PSR-7 message factories", - "homepage": "http://php-http.org", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr7" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.14.3" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2022-07-11T14:04:40+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { - "name": "php-http/httplug", - "version": "2.3.0", + "name": "psr/http-client", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "f640739f80dfa1152533976e3c112477f69274eb" + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", - "reference": "f640739f80dfa1152533976e3c112477f69274eb", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", + "php": "^7.0 || ^8.0", "psr/http-message": "^1.0" }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1", - "phpspec/phpspec": "^5.1 || ^6.0" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Http\\Client\\": "src/" + "Psr\\Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1308,76 +1207,50 @@ ], "authors": [ { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "client", - "http" + "http", + "http-client", + "psr", + "psr-18" ], "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.3.0" + "source": "https://github.com/php-fig/http-client/tree/master" }, - "time": "2022-02-21T09:52:22+00:00" + "time": "2020-06-29T06:28:15+00:00" }, { - "name": "php-http/message", - "version": "1.13.0", + "name": "psr/http-factory", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", - "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", "shasum": "" }, "require": { - "clue/stream-filter": "^1.5", - "php": "^7.1 || ^8.0", - "php-http/message-factory": "^1.0.2", + "php": ">=7.0.0", "psr/http-message": "^1.0" }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0", - "laminas/laminas-diactoros": "^2.0", - "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", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "src/filters.php" - ], "psr-4": { - "Http\\Message\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1386,50 +1259,52 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ + "factory", "http", "message", - "psr-7" + "psr", + "psr-17", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.13.0" + "source": "https://github.com/php-fig/http-factory/tree/master" }, - "time": "2022-02-11T13:41:14+00:00" + "time": "2019-04-30T12:38:16+00:00" }, { - "name": "php-http/message-factory", - "version": "v1.0.2", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Http\\Message\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1438,55 +1313,51 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "factory", "http", - "message", - "stream", - "uri" + "http-message", + "psr", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" + "source": "https://github.com/php-fig/http-message/tree/master" }, - "time": "2015-12-19T14:08:53+00:00" + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "php-http/promise", - "version": "1.1.0", + "name": "psr/log", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", - "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", - "phpspec/phpspec": "^5.1.2 || ^6.2" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { - "Http\\Promise\\": "src/" + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1495,109 +1366,105 @@ ], "authors": [ { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "promise" + "log", + "psr", + "psr-3" ], "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.1.0" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "time": "2020-07-07T09:29:14+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { - "name": "prestashop/autoindex", - "version": "v2.0.0", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/PrestaShopCorp/autoindex.git", - "reference": "355c224de4ca8766d63a038dcdcb24f56cb19fec" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/autoindex/zipball/355c224de4ca8766d63a038dcdcb24f56cb19fec", - "reference": "355c224de4ca8766d63a038dcdcb24f56cb19fec", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", - "php": ">=7.2", - "symfony/console": "^3.4 || ~4.0 || ~5.0", - "symfony/finder": "^3.4 || ~4.0 || ~5.0" + "php": ">=5.6" }, "require-dev": { - "phpstan/phpstan": "^0.12.83", - "prestashop/php-dev-tools": "1.*" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, - "bin": [ - "bin/autoindex" - ], "type": "library", "autoload": { - "psr-4": { - "PrestaShop\\AutoIndex\\": "src/" - } + "files": [ + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "AFL-3.0" + "MIT" ], "authors": [ { - "name": "PrestaShop SA", - "email": "contact@prestashop.com" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Automatically add an 'index.php' in all the current or specified directories and all sub-directories.", - "homepage": "https://github.com/PrestaShopCorp/autoindex", + "description": "A polyfill for getallheaders.", "support": { - "source": "https://github.com/PrestaShopCorp/autoindex/tree/v2.0.0" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2021-06-09T15:37:17+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "prestashop/circuit-breaker", - "version": "v4.0.0", + "name": "ramsey/collection", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/PrestaShop/circuit-breaker.git", - "reference": "9744f98f5f5a3c678fd14cd60b70d2872d9295f2" + "url": "https://github.com/ramsey/collection.git", + "reference": "ab2237657ad99667a5143e32ba2683c8029563d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/circuit-breaker/zipball/9744f98f5f5a3c678fd14cd60b70d2872d9295f2", - "reference": "9744f98f5f5a3c678fd14cd60b70d2872d9295f2", + "url": "https://api.github.com/repos/ramsey/collection/zipball/ab2237657ad99667a5143e32ba2683c8029563d4", + "reference": "ab2237657ad99667a5143e32ba2683c8029563d4", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^7.3", - "prestashop/php-dev-tools": "^4.0" + "php": "^7.2 || ^8" }, "require-dev": { - "doctrine/cache": "^1.10.2", - "phpunit/phpunit": "^8", - "psr/simple-cache": "^1.0", - "symfony/cache": "^4.4", - "symfony/event-dispatcher": "^4.4" - }, - "suggest": { - "doctrine/cache": "Allows use of Doctrine Cache adapters to store transactions", - "ext-apcu": "Allows use of APCu adapter (performant) to store transactions", - "symfony/cache": "Allows use of Symfony Cache adapters to store transactions" + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" }, "type": "library", "autoload": { "psr-4": { - "PrestaShop\\CircuitBreaker\\": "src/" + "Ramsey\\Collection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1606,280 +1473,326 @@ ], "authors": [ { - "name": "PrestaShop SA", - "email": "contact@prestashop.com" - }, - { - "name": "PrestaShop Community", - "homepage": "http://contributors.prestashop.com/" + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" } ], - "description": "A circuit breaker implementation for PHP", + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], "support": { - "issues": "https://github.com/PrestaShop/circuit-breaker/issues", - "source": "https://github.com/PrestaShop/circuit-breaker/tree/v4.0.0" + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.4" }, - "time": "2021-04-20T14:48:25+00:00" + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-07-30T00:58:27+00:00" }, { - "name": "prestashop/header-stamp", - "version": "v2.1", + "name": "ramsey/uuid", + "version": "4.2.3", "source": { "type": "git", - "url": "https://github.com/PrestaShopCorp/header-stamp.git", - "reference": "d00c2ce550fe9b1a3713cebafee669f44a93ff2a" + "url": "https://github.com/ramsey/uuid.git", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/d00c2ce550fe9b1a3713cebafee669f44a93ff2a", - "reference": "d00c2ce550fe9b1a3713cebafee669f44a93ff2a", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", - "php": ">=7.2.5", - "symfony/console": "^3.4 || ~4.0 || ~5.0", - "symfony/finder": "^3.4 || ~4.0 || ~5.0" + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" + }, + "replace": { + "rhumsaa/uuid": "self.version" }, "require-dev": { - "phpstan/phpstan": "^0.12.83", - "prestashop/php-dev-tools": "1.*" + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, - "bin": [ - "bin/header-stamp" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true + } + }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "PrestaShop\\HeaderStamp\\": "src/" + "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "AFL-3.0" + "MIT" ], - "authors": [ - { - "name": "PrestaShop SA", - "email": "contact@prestashop.com" - } + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" ], - "description": "Rewrite your file headers to add the license or to make them up-to-date", - "homepage": "https://github.com/PrestaShopCorp/header-stamp", "support": { - "issues": "https://github.com/PrestaShopCorp/header-stamp/issues", - "source": "https://github.com/PrestaShopCorp/header-stamp/tree/v2.1" + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" }, - "time": "2021-11-15T16:57:29+00:00" + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2021-09-25T23:10:38+00:00" }, { - "name": "prestashop/php-dev-tools", - "version": "v4.2.1", + "name": "sentry/sdk", + "version": "3.3.0", "source": { "type": "git", - "url": "https://github.com/PrestaShop/php-dev-tools.git", - "reference": "359a2896c5115014b01155af1af2bea18ea28451" + "url": "https://github.com/getsentry/sentry-php-sdk.git", + "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/php-dev-tools/zipball/359a2896c5115014b01155af1af2bea18ea28451", - "reference": "359a2896c5115014b01155af1af2bea18ea28451", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/d0678fc7274dbb03046ed05cb24eb92945bedf8e", + "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e", "shasum": "" }, "require": { - "friendsofphp/php-cs-fixer": "^3.2", - "php": ">=7.2.5", - "prestashop/autoindex": "^2.0", - "prestashop/header-stamp": "^2.0", - "squizlabs/php_codesniffer": "^3.4", - "symfony/console": "~3.2 || ~4.0 || ~5.0", - "symfony/filesystem": "~3.2 || ~4.0 || ~5.0" - }, - "bin": [ - "bin/prestashop-coding-standards" - ], - "type": "library", - "autoload": { - "psr-4": { - "PrestaShop\\CodingStandards\\": "src/" - } + "http-interop/http-factory-guzzle": "^1.0", + "sentry/sentry": "^3.9", + "symfony/http-client": "^4.3|^5.0|^6.0" }, + "type": "metapackage", "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PrestaShop coding standards", + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], "support": { - "issues": "https://github.com/PrestaShop/php-dev-tools/issues", - "source": "https://github.com/PrestaShop/php-dev-tools/tree/v4.2.1" + "issues": "https://github.com/getsentry/sentry-php-sdk/issues", + "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.3.0" }, - "time": "2021-12-01T11:02:58+00:00" + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2022-10-11T09:05:00+00:00" }, { - "name": "prestashop/prestashop-accounts-installer", - "version": "v1.0.1", + "name": "sentry/sentry", + "version": "3.11.0", "source": { "type": "git", - "url": "https://github.com/PrestaShopCorp/prestashop-accounts-installer.git", - "reference": "f038af2408968d1045330b32aa1fed65fcaf4c9b" + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "91bd6e54d9352754bbdd1d800d2b88618f8130d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/prestashop-accounts-installer/zipball/f038af2408968d1045330b32aa1fed65fcaf4c9b", - "reference": "f038af2408968d1045330b32aa1fed65fcaf4c9b", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/91bd6e54d9352754bbdd1d800d2b88618f8130d4", + "reference": "91bd6e54d9352754bbdd1d800d2b88618f8130d4", "shasum": "" }, "require": { - "php": ">=5.6" + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", + "php-http/async-client-implementation": "^1.0", + "php-http/client-common": "^1.5|^2.0", + "php-http/discovery": "^1.11", + "php-http/httplug": "^1.1|^2.0", + "php-http/message": "^1.5", + "psr/http-factory": "^1.0", + "psr/http-message-implementation": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0", + "symfony/polyfill-php80": "^1.17" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "fzaninotto/faker": "^1.9", - "phpunit/phpunit": "^5.7", - "prestashop/php-dev-tools": "3.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "PrestaShop\\PsAccountsInstaller\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Utility package to install `ps_accounts` module or present data to trigger manual install from psx configuration page.", - "support": { - "issues": "https://github.com/PrestaShopCorp/prestashop-accounts-installer/issues", - "source": "https://github.com/PrestaShopCorp/prestashop-accounts-installer/tree/v1.0.1" - }, - "time": "2021-07-23T15:40:36+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "conflict": { + "php-http/client-common": "1.8.0", + "raven/raven": "*" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "http-interop/http-factory-guzzle": "^1.0", + "monolog/monolog": "^1.6|^2.0|^3.0", + "nikic/php-parser": "^4.10.3", + "php-http/mock-client": "^1.3", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5.14|^9.4", + "symfony/phpunit-bridge": "^5.2|^6.0", + "vimeo/psalm": "^4.17" }, - "require": { - "php": ">=5.3.0" + "suggest": { + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.11.x-dev" } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Psr\\Cache\\": "src/" + "Sentry\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sentry", + "email": "accounts@sentry.io" } ], - "description": "Common interface for caching libraries", + "description": "A PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", "keywords": [ - "cache", - "psr", - "psr-6" + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/3.11.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "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" + "time": "2022-10-25T14:36:50+00:00" }, { - "name": "psr/http-client", - "version": "1.0.1", + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } + "files": [ + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1887,51 +1800,86 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, - "time": "2020-06-29T06:28:15+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": "2022-01-02T09:53:40+00:00" }, { - "name": "psr/http-factory", - "version": "1.0.1", + "name": "symfony/http-client", + "version": "v5.4.15", "source": { "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "url": "https://github.com/symfony/http-client.git", + "reference": "8f29b0f06c9ff48c8431e78eb90c8bd6f82cb12b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/symfony/http-client/zipball/8f29b0f06c9ff48c8431e78eb90c8bd6f82cb12b", + "reference": "8f29b0f06c9ff48c8431e78eb90c8bd6f82cb12b", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-client-contracts": "^2.4", + "symfony/polyfill-php73": "^1.11", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.0|^2|^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "2.4" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" - } + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1939,52 +1887,68 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/symfony/http-client/tree/v5.4.15" }, - "time": "2019-04-30T12:38:16+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": "2022-10-25T16:22:13+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "symfony/http-client-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", + "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Symfony\\Contracts\\HttpClient\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1993,52 +1957,71 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2" }, - "time": "2016-08-06T14:39:51+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": "2022-04-12T15:48:08+00:00" }, { - "name": "psr/log", - "version": "1.1.4", + "name": "symfony/options-resolver", + "version": "v5.4.11", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2046,105 +2029,79 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", "keywords": [ - "log", - "psr", - "psr-3" + "config", + "configuration", + "options" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+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/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] + "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "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" } ], - "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" + "time": "2022-07-20T13:00:38+00:00" }, - { - "name": "ramsey/collection", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "ab2237657ad99667a5143e32ba2683c8029563d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/ab2237657ad99667a5143e32ba2683c8029563d4", - "reference": "ab2237657ad99667a5143e32ba2683c8029563d4", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8" - }, - "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "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": { - "Ramsey\\Collection\\": "src/" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2153,408 +2110,404 @@ ], "authors": [ { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" + "compatibility", + "ctype", + "polyfill", + "portable" ], "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.4" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/ramsey", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-07-30T00:58:27+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "ramsey/uuid", - "version": "4.2.3", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", - "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "php": ">=7.1" }, "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.x-dev" + "dev-main": "1.26-dev" }, - "captainhook": { - "force-install": true + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ - "src/functions.php" + "bootstrap.php" ], "psr-4": { - "Ramsey\\Uuid\\": "src/" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "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": [ - "guid", - "identifier", - "uuid" + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/ramsey", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sentry/sdk", - "version": "3.2.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/getsentry/sentry-php-sdk.git", - "reference": "6d78bd83b43efbb52f81d6824f4af344fa9ba292" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/6d78bd83b43efbb52f81d6824f4af344fa9ba292", - "reference": "6d78bd83b43efbb52f81d6824f4af344fa9ba292", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { - "http-interop/http-factory-guzzle": "^1.0", - "sentry/sentry": "^3.5", - "symfony/http-client": "^4.3|^5.0|^6.0" + "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\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, - "type": "metapackage", "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Sentry", - "email": "accounts@sentry.io" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", - "homepage": "http://sentry.io", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", "keywords": [ - "crash-reporting", - "crash-reports", - "error-handler", - "error-monitoring", - "log", - "logging", - "sentry" + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/getsentry/sentry-php-sdk/issues", - "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.2.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { - "url": "https://sentry.io/", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://sentry.io/pricing/", - "type": "custom" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-05-21T11:10:11+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sentry/sentry", - "version": "3.7.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/getsentry/sentry-php.git", - "reference": "877bca3f0f0ac0fc8ec0a218c6070cccea266795" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/877bca3f0f0ac0fc8ec0a218c6070cccea266795", - "reference": "877bca3f0f0ac0fc8ec0a218c6070cccea266795", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.8.4|^2.1.1", - "jean85/pretty-package-versions": "^1.5|^2.0.4", - "php": "^7.2|^8.0", - "php-http/async-client-implementation": "^1.0", - "php-http/client-common": "^1.5|^2.0", - "php-http/discovery": "^1.11", - "php-http/httplug": "^1.1|^2.0", - "php-http/message": "^1.5", - "psr/http-factory": "^1.0", - "psr/http-message-implementation": "^1.0", - "psr/log": "^1.0|^2.0|^3.0", - "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0", - "symfony/polyfill-php80": "^1.17", - "symfony/polyfill-uuid": "^1.13.1" - }, - "conflict": { - "php-http/client-common": "1.8.0", - "raven/raven": "*" + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19|3.4.*", - "http-interop/http-factory-guzzle": "^1.0", - "monolog/monolog": "^1.6|^2.0|^3.0", - "nikic/php-parser": "^4.10.3", - "php-http/mock-client": "^1.3", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^8.5.14|^9.4", - "symfony/phpunit-bridge": "^5.2|^6.0", - "vimeo/psalm": "^4.17" + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" }, "suggest": { - "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7.x-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ - "src/functions.php" + "bootstrap.php" ], "psr-4": { - "Sentry\\": "src/" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sentry", - "email": "accounts@sentry.io" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PHP SDK for Sentry (http://sentry.io)", - "homepage": "http://sentry.io", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "crash-reporting", - "crash-reports", - "error-handler", - "error-monitoring", - "log", - "logging", - "sentry" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.7.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { - "url": "https://sentry.io/", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://sentry.io/pricing/", - "type": "custom" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-07-18T07:55:36+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.6.1", + "name": "symfony/polyfill-php73", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f268ca40d54617c6e06757f83f699775c9b3ff2e", - "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": ">=7.1" }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Greg Sherwood", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/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", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "phpcs", - "standards" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, - "time": "2021-10-11T04:00:11+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": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/console", - "version": "v5.4.0", + "name": "symfony/polyfill-php80", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ec3661faca1d110d6c307e124b44f99ac54179e3", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "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|2.0" - }, - "require-dev": { - "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", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "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\\Component\\Console\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2563,24 +2516,28 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "cli", - "command line", - "console", - "terminal" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -2596,38 +2553,41 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "name": "symfony/property-access", + "version": "v5.4.15", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "url": "https://github.com/symfony/property-access.git", + "reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/property-access/zipball/0f3e8f40a1d3da90f674b3dd772e4777ccde4273", + "reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/property-info": "^5.2|^6.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "require-dev": { + "symfony/cache": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." }, + "type": "library", "autoload": { - "files": [ - "function.php" + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2636,18 +2596,29 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A generic function and convention to trigger deprecation notices", + "description": "Provides functions to read and write from/to an object or array using a simple string notation", "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/property-access/tree/v5.4.15" }, "funding": [ { @@ -2663,52 +2634,51 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-10-27T07:55:40+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v4.4.44", + "name": "symfony/property-info", + "version": "v5.4.15", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" + "url": "https://github.com/symfony/property-info.git", + "reference": "3ef5e026a71a39345da241292c153979893033c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", - "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "url": "https://api.github.com/repos/symfony/property-info/zipball/3ef5e026a71a39345da241292c153979893033c2", + "reference": "3ef5e026a71a39345da241292c153979893033c2", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/string": "^5.1|^6.0" }, "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<4.4" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" + "doctrine/annotations": "^1.10.4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\PropertyInfo\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -2720,18 +2690,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "description": "Extracts information about PHP class' properties using metadata of popular sources", "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44" + "source": "https://github.com/symfony/property-info/tree/v5.4.15" }, "funding": [ { @@ -2747,33 +2725,37 @@ "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" + "time": "2022-10-27T07:55:40+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.13", + "name": "symfony/service-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", - "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" + "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.1-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2782,7 +2764,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" + "Symfony\\Contracts\\Service\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2799,7 +2781,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ "abstractions", @@ -2810,7 +2792,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -2826,95 +2808,46 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { - "name": "symfony/filesystem", - "version": "v5.4.0", + "name": "symfony/string", + "version": "v5.4.15", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" + "url": "https://github.com/symfony/string.git", + "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", + "url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", + "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.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": "2021-10-28T13:39:27+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", - "shasum": "" + "conflict": { + "symfony/translation-contracts": ">=3.0" }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "require-dev": { + "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\\Finder\\": "" + "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -2926,18 +2859,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": "Finds files and directories via an intuitive fluent interface", + "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/finder/tree/v5.4.0" + "source": "https://github.com/symfony/string/tree/v5.4.15" }, "funding": [ { @@ -2953,59 +2894,43 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2022-10-05T15:16:54+00:00" }, { - "name": "symfony/http-client", - "version": "v5.4.9", + "name": "symfony/workflow", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/http-client.git", - "reference": "dc0b15e42b762c040761c1eb9ce86a55d47cf672" + "url": "https://github.com/symfony/workflow.git", + "reference": "19ab88556cf9d09d08a376bbb6152a4f8f40a449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/dc0b15e42b762c040761c1eb9ce86a55d47cf672", - "reference": "dc0b15e42b762c040761c1eb9ce86a55d47cf672", + "url": "https://api.github.com/repos/symfony/workflow/zipball/19ab88556cf9d09d08a376bbb6152a4f8f40a449", + "reference": "19ab88556cf9d09d08a376bbb6152a4f8f40a449", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-client-contracts": "^2.4", - "symfony/polyfill-php73": "^1.11", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.0|^2|^3" + "php": ">=7.1.3", + "symfony/property-access": "^3.4|^4.3|^5.0" }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "2.4" + "conflict": { + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/security-core": ">=5" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", - "amphp/socket": "^1.1", - "guzzlehttp/promises": "^1.4", - "nyholm/psr7": "^1.0", - "php-http/httplug": "^1.0|^2.0", - "psr/http-client": "^1.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.0", + "symfony/validator": "^3.4|^4.0|^5.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\HttpClient\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Component\\Workflow\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3013,18 +2938,30 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "description": "Provides tools for managing a workflow or finite state machine", "homepage": "https://symfony.com", + "keywords": [ + "petrinet", + "place", + "state", + "statemachine", + "transition", + "workflow" + ], "support": { - "source": "https://github.com/symfony/http-client/tree/v5.4.9" + "source": "https://github.com/symfony/workflow/tree/v4.4.44" }, "funding": [ { @@ -3040,41 +2977,41 @@ "type": "tidelift" } ], - "time": "2022-05-21T08:57:05+00:00" - }, + "time": "2022-07-20T09:59:04+00:00" + } + ], + "packages-dev": [ { - "name": "symfony/http-client-contracts", - "version": "v2.5.2", + "name": "composer/pcre", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70" + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", - "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": "^5.3.2 || ^7.0 || ^8.0" }, - "suggest": { - "symfony/http-client-implementation": "" + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-main": "1.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3083,71 +3020,69 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/1.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/composer", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2022-04-12T15:48:08+00:00" + "time": "2022-01-21T20:24:37+00:00" }, { - "name": "symfony/options-resolver", - "version": "v5.4.3", + "name": "composer/semver", + "version": "3.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Composer\\Semver\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3155,77 +3090,78 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "config", - "configuration", - "options" + "semantic", + "semver", + "validation", + "versioning" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/composer", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "name": "composer/xdebug-handler", + "version": "2.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", "shasum": "" }, "require": { - "php": ">=7.1" + "composer/pcre": "^1", + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Composer\\XdebugHandler\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3233,78 +3169,69 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Restarts a process without Xdebug.", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "Xdebug", + "performance" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/composer", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-02-24T20:20:32+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "name": "doctrine/annotations", + "version": "1.13.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "url": "https://github.com/doctrine/annotations.git", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0", "shasum": "" }, "require": { - "php": ">=7.1" + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2", + "vimeo/psalm": "^4.10" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3312,83 +3239,71 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.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.23.1" - }, - "funding": [ + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { - "url": "https://symfony.com/sponsor", - "type": "custom" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" }, { - "url": "https://github.com/fabpot", - "type": "github" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "time": "2021-05-27T12:26:48+00:00" + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.3" + }, + "time": "2022-07-02T10:48:51+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "name": "doctrine/instantiator", + "version": "1.4.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.1 || ^8.0" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3396,80 +3311,65 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" + "constructor", + "instantiate" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "name": "doctrine/lexer", + "version": "1.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.1 || ^8.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3477,76 +3377,109 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "b37bf90405cec3f7a83c18e645ef748bcb87ac11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/b37bf90405cec3f7a83c18e645ef748bcb87ac11", + "reference": "b37bf90405cec3f7a83c18e645ef748bcb87ac11", "shasum": "" }, "require": { - "php": ">=7.1" + "composer/semver": "^3.2", + "composer/xdebug-handler": "^2.0", + "doctrine/annotations": "^1.12", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.2.5 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^4.4.20 || ^5.1.3", + "symfony/event-dispatcher": "^4.4.20 || ^5.0", + "symfony/filesystem": "^4.4.20 || ^5.0", + "symfony/finder": "^4.4.20 || ^5.0", + "symfony/options-resolver": "^4.4.20 || ^5.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.23", + "symfony/polyfill-php81": "^1.23", + "symfony/process": "^4.4.20 || ^5.0", + "symfony/stopwatch": "^4.4.20 || ^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.8", + "php-coveralls/php-coveralls": "^2.4.3", + "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.10.3", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^5.2.4", + "symfony/yaml": "^4.4.20 || ^5.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] + "PhpCsFixer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3554,1066 +3487,840 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "A tool to automatically fix PHP code style", "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.3.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/keradus", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2021-11-15T18:01:18+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.1-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "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" - } + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "test" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.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-05-24T11:49:31+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "name": "mockery/mockery", + "version": "1.3.6", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "url": "https://github.com/mockery/mockery.git", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0", "shasum": "" }, "require": { - "php": ">=7.1" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.3.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "psr-0": { + "Mockery": "library/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.3.6" }, - "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" + "time": "2022-09-07T15:05:49+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "name": "myclabs/deep-copy", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.1 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, + "type": "library", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ - "bootstrap.php" + "src/DeepCopy/deep_copy.php" ], - "classmap": [ - "Resources/stubs" - ] + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "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", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.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", + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.26.0", + "name": "nikic/php-parser", + "version": "v4.15.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/a41886c1c81dc075a09c71fe6db5b9d68c79de23", - "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-uuid": "*" + "ext-tokenizer": "*", + "php": ">=7.0" }, - "suggest": { - "ext-uuid": "For best performance" + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.9-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Nikita Popov" } ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", + "description": "A PHP parser written in PHP", "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" + "parser", + "php" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.26.0" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.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-05-24T11:49:31+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { - "name": "symfony/process", - "version": "v5.4.0", + "name": "phar-io/manifest", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "url": "https://github.com/fabpot", - "type": "github" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "time": "2021-11-28T15:25:38+00:00" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { - "name": "symfony/property-access", - "version": "v5.4.11", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "c641d63e943ed31981bad4b4dcf29fe7da2ffa8c" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/c641d63e943ed31981bad4b4dcf29fe7da2ffa8c", - "reference": "c641d63e943ed31981bad4b4dcf29fe7da2ffa8c", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/property-info": "^5.2|^6.0" - }, - "require-dev": { - "symfony/cache": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v5.4.11" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "url": "https://github.com/fabpot", - "type": "github" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "time": "2022-06-27T16:58:25+00:00" + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "symfony/property-info", - "version": "v5.4.11", + "name": "php-cs-fixer/diff", + "version": "v2.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "8a9a2b638a808cc92a2fbce185b9318e76b0e20c" + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/8a9a2b638a808cc92a2fbce185b9318e76b0e20c", - "reference": "8a9a2b638a808cc92a2fbce185b9318e76b0e20c", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" - }, - "suggest": { - "phpdocumentor/reflection-docblock": "To use the PHPDoc", - "psr/cache-implementation": "To cache results", - "symfony/doctrine-bridge": "To use Doctrine metadata", - "symfony/serializer": "To use Serializer metadata" + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" + "diff" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v5.4.11" + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" }, - "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-07-19T08:07:51+00:00" + "abandoned": true, + "time": "2020-10-14T08:32:19+00:00" }, { - "name": "symfony/service-contracts", - "version": "v2.5.0", + "name": "phpstan/phpstan", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f", + "reference": "a59c8b5bfd4a236f27efc8b5ce72c313c2b54b5f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "php": "^7.2|^8.0" }, "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "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\\": "" - } + "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": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "dev", + "static analysis" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.9.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/ondrejmirtes", + "type": "github" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/phpstan", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-11-04T13:35:59+00:00" }, { - "name": "symfony/stopwatch", - "version": "v5.4.0", + "name": "phpunit/php-code-coverage", + "version": "7.0.15", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "819f92bba8b001d4363065928088de22f25a3a48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", + "reference": "819f92bba8b001d4363065928088de22f25a3a48", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": ">=7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.3 || ^4.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.0" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2021-07-26T12:20:09+00:00" }, { - "name": "symfony/string", - "version": "v5.4.0", + "name": "phpunit/php-file-iterator", + "version": "2.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", "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" + "php": ">=7.1" }, "require-dev": { - "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" + "phpunit/phpunit": "^8.5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "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", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "filesystem", + "iterator" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.0" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-11-24T10:02:00+00:00" + "time": "2021-12-02T12:42:26+00:00" }, { - "name": "symfony/workflow", - "version": "v4.4.44", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/workflow.git", - "reference": "19ab88556cf9d09d08a376bbb6152a4f8f40a449" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/workflow/zipball/19ab88556cf9d09d08a376bbb6152a4f8f40a449", - "reference": "19ab88556cf9d09d08a376bbb6152a4f8f40a449", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/property-access": "^3.4|^4.3|^5.0" - }, - "conflict": { - "symfony/event-dispatcher": "<4.3|>=5", - "symfony/security-core": ">=5" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/security-core": "^3.4|^4.0", - "symfony/validator": "^3.4|^4.0|^5.0" + "php": ">=5.3.3" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Workflow\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides tools for managing a workflow or finite state machine", - "homepage": "https://symfony.com", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "petrinet", - "place", - "state", - "statemachine", - "transition", - "workflow" + "template" ], "support": { - "source": "https://github.com/symfony/workflow/tree/v4.4.44" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.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-07-20T09:59:04+00:00" - } - ], - "packages-dev": [ + "time": "2015-06-21T13:50:34+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.4.0", + "name": "phpunit/php-timer", + "version": "2.1.3", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.1" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^8.5" }, "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "constructor", - "instantiate" + "timer" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2020-11-30T08:20:02+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "name": "phpunit/php-token-stream", + "version": "3.1.3", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" + "ext-tokenizer": "*", + "php": ">=7.1" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.1-dev" } }, "autoload": { "classmap": [ - "hamcrest" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "This is the PHP port of Hamcrest Matchers", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "test" + "tokenizer" ], "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" }, - "time": "2020-07-09T08:09:16+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2021-07-26T12:15:06+00:00" }, { - "name": "mockery/mockery", - "version": "1.3.5", + "name": "phpunit/phpunit", + "version": "8.5.31", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "33c126b09a42de5c99e5e8032b54e8221264a74e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/472fa8ca4e55483d55ee1e73c963718c4393791d", - "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33c126b09a42de5c99e5e8032b54e8221264a74e", + "reference": "33c126b09a42de5c99e5e8032b54e8221264a74e", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.0", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.2", + "phpunit/php-code-coverage": "^7.0.12", + "phpunit/php-file-iterator": "^2.0.4", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.5", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.3", + "sebastian/exporter": "^3.1.5", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" }, - "require-dev": { - "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "8.5-dev" } }, "autoload": { - "psr-0": { - "Mockery": "library/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4621,231 +4328,208 @@ ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" + "phpunit", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.3.5" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.31" }, - "time": "2021-09-13T15:33:03+00:00" + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2022-10-28T05:57:37+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", + "name": "prestashop/autoindex", + "version": "v2.1.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "url": "https://github.com/PrestaShopCorp/autoindex.git", + "reference": "235f3ec115432ffc32d582198ea498467b3946d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/PrestaShopCorp/autoindex/zipball/235f3ec115432ffc32d582198ea498467b3946d0", + "reference": "235f3ec115432ffc32d582198ea498467b3946d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "nikic/php-parser": "^4.10", + "php": "^8.0 || ^7.2", + "symfony/console": "^3.4 || ~4.0 || ~5.0 || ~6.0", + "symfony/finder": "^3.4 || ~4.0 || ~5.0 || ~6.0" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpstan/phpstan": "^0.12.83", + "prestashop/php-dev-tools": "1.*" }, + "bin": [ + "bin/autoindex" + ], "type": "library", "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] + "PrestaShop\\AutoIndex\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "AFL-3.0" ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "name": "PrestaShop SA", + "email": "contact@prestashop.com" } ], - "time": "2020-11-13T09:40:50+00:00" + "description": "Automatically add an 'index.php' in all the current or specified directories and all sub-directories.", + "homepage": "https://github.com/PrestaShopCorp/autoindex", + "support": { + "source": "https://github.com/PrestaShopCorp/autoindex/tree/v2.1.0" + }, + "time": "2022-10-10T08:35:00+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.3", + "name": "prestashop/header-stamp", + "version": "v2.2", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "url": "https://github.com/PrestaShopCorp/header-stamp.git", + "reference": "ae1533967ca797e7c8efd5bbbf4351d163253cf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/ae1533967ca797e7c8efd5bbbf4351d163253cf4", + "reference": "ae1533967ca797e7c8efd5bbbf4351d163253cf4", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "nikic/php-parser": "^4.10", + "php": "^8.0 || ^7.2", + "symfony/console": "^3.4 || ~4.0 || ~5.0 || ~6.0", + "symfony/finder": "^3.4 || ~4.0 || ~5.0 || ~6.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "phpstan/phpstan": "^0.12.83", + "prestashop/php-dev-tools": "1.*" }, + "bin": [ + "bin/header-stamp" + ], + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PrestaShop\\HeaderStamp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "AFL-3.0" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "PrestaShop SA", + "email": "contact@prestashop.com" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Rewrite your file headers to add the license or to make them up-to-date", + "homepage": "https://github.com/PrestaShopCorp/header-stamp", "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "issues": "https://github.com/PrestaShopCorp/header-stamp/issues", + "source": "https://github.com/PrestaShopCorp/header-stamp/tree/v2.2" }, - "time": "2021-07-20T11:28:43+00:00" + "time": "2022-10-10T08:26:55+00:00" }, { - "name": "phar-io/version", - "version": "3.1.0", + "name": "prestashop/php-dev-tools", + "version": "v4.3.0", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "url": "https://github.com/PrestaShop/php-dev-tools.git", + "reference": "843275b19729ba810d8ba2b9c97b568e5bbabe03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/PrestaShop/php-dev-tools/zipball/843275b19729ba810d8ba2b9c97b568e5bbabe03", + "reference": "843275b19729ba810d8ba2b9c97b568e5bbabe03", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "friendsofphp/php-cs-fixer": "^3.2", + "php": ">=7.2.5", + "prestashop/autoindex": "^2.0", + "prestashop/header-stamp": "^2.0", + "squizlabs/php_codesniffer": "^3.4", + "symfony/console": "~3.2 || ~4.0 || ~5.0 || ~6.0", + "symfony/filesystem": "~3.2 || ~4.0 || ~5.0 || ~6.0" }, + "bin": [ + "bin/prestashop-coding-standards" + ], "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PrestaShop\\CodingStandards\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } + "MIT" ], - "description": "Library for handling version information and constraints", + "description": "PrestaShop coding standards", "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "issues": "https://github.com/PrestaShop/php-dev-tools/issues", + "source": "https://github.com/PrestaShop/php-dev-tools/tree/v4.3.0" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-10-18T14:19:51+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4854,299 +4538,305 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Common interface for caching libraries", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "cache", + "psr", + "psr-6" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "source": "https://github.com/php-fig/cache/tree/master" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": ">=5.6" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" }, - "time": "2021-10-19T17:43:47+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:15:22+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "name": "sebastian/comparator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": ">=7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" }, - "time": "2021-10-02T14:08:47+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:31:48+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.14.0", + "name": "sebastian/diff", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": ">=7.1" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" }, - "time": "2021-09-10T09:02:12+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:59:04+00:00" }, { - "name": "phpstan/phpstan", - "version": "1.4.6", + "name": "sebastian/environment", + "version": "4.2.4", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "8a7761f1c520e0dad6e04d862fdc697445457cfe" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8a7761f1c520e0dad6e04d862fdc697445457cfe", - "reference": "8a7761f1c520e0dad6e04d862fdc697445457cfe", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": ">=7.1" }, - "conflict": { - "phpstan/phpstan-shim": "*" + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, - "bin": [ - "phpstan", - "phpstan.phar" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" ], - "description": "PHPStan - PHP Static Analysis Tool", "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.4.6" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2022-02-06T12:56:13+00:00" + "time": "2020-11-30T07:53:42+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "7.0.15", + "name": "sebastian/exporter", + "version": "3.1.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "819f92bba8b001d4363065928088de22f25a3a48" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", - "reference": "819f92bba8b001d4363065928088de22f25a3a48", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", "shasum": "" }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": ">=7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.3 || ^4.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "require": { + "php": ">=7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" - }, - "suggest": { - "ext-xdebug": "^2.7.2" + "ext-mbstring": "*", + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -5161,20 +4851,34 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "coverage", - "testing", - "xunit" + "export", + "exporter" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" }, "funding": [ { @@ -5182,32 +4886,38 @@ "type": "github" } ], - "time": "2021-07-26T12:20:09+00:00" + "time": "2022-09-14T06:00:17+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "2.0.4", + "name": "sebastian/global-state", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "28af674ff175d0768a5a978e6de83f697d4a7f05" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "de036ec91d55d2a9e0db2ba975b512cdb1c23921" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/28af674ff175d0768a5a978e6de83f697d4a7f05", - "reference": "28af674ff175d0768a5a978e6de83f697d4a7f05", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/de036ec91d55d2a9e0db2ba975b512cdb1c23921", + "reference": "de036ec91d55d2a9e0db2ba975b512cdb1c23921", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5222,19 +4932,17 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "filesystem", - "iterator" + "global state" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.4" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.2" }, "funding": [ { @@ -5242,26 +4950,36 @@ "type": "github" } ], - "time": "2021-07-19T06:46:01+00:00" + "time": "2022-02-10T06:55:38+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "sebastian/object-enumerator", + "version": "3.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -5274,45 +4992,47 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:40:27+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.3", + "name": "sebastian/object-reflector", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -5327,18 +5047,14 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" }, "funding": [ { @@ -5346,33 +5062,32 @@ "type": "github" } ], - "time": "2020-11-30T08:20:02+00:00" + "time": "2020-11-30T07:37:18+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.3", + "name": "sebastian/recursion-context", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -5388,16 +5103,21 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" }, "funding": [ { @@ -5405,65 +5125,29 @@ "type": "github" } ], - "abandoned": true, - "time": "2021-07-26T12:15:06+00:00" + "time": "2020-11-30T07:34:24+00:00" }, { - "name": "phpunit/phpunit", - "version": "8.5.26", + "name": "sebastian/resource-operations", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ef117c59fc4c54a979021b26d08a3373e386606d" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ef117c59fc4c54a979021b26d08a3373e386606d", - "reference": "ef117c59fc4c54a979021b26d08a3373e386606d", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.0", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.2", - "phpspec/prophecy": "^1.10.3", - "phpunit/php-code-coverage": "^7.0.12", - "phpunit/php-file-iterator": "^2.0.4", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.3", - "sebastian/exporter": "^3.1.2", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "php": ">=7.1" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5478,57 +5162,47 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.26" + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" }, "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2022-04-01T12:34:39+00:00" + "time": "2020-11-30T07:30:19+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", + "name": "sebastian/type", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -5543,14 +5217,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" }, "funding": [ { @@ -5558,34 +5233,29 @@ "type": "github" } ], - "time": "2020-11-30T08:15:22+00:00" + "time": "2020-11-30T07:25:11+00:00" }, { - "name": "sebastian/comparator", - "version": "3.0.3", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -5600,497 +5270,551 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:04:30+00:00" + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "sebastian/diff", - "version": "3.0.3", + "name": "squizlabs/php_codesniffer", + "version": "3.7.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Greg Sherwood", + "role": "lead" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "phpcs", + "standards" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:59:04+00:00" + "time": "2022-06-18T07:21:10+00:00" }, { - "name": "sebastian/environment", - "version": "4.2.4", + "name": "symfony/console", + "version": "v5.4.15", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" + "url": "https://github.com/symfony/console.git", + "reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "url": "https://api.github.com/repos/symfony/console/zipball/ea59bb0edfaf9f28d18d8791410ee0355f317669", + "reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669", "shasum": "" }, "require": { - "php": ">=7.1" + "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": { + "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|2.0" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "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": { - "ext-posix": "*" + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "cli", + "command line", + "console", + "terminal" ], "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + "source": "https://github.com/symfony/console/tree/v5.4.15" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:53:42+00:00" + "time": "2022-10-26T21:41:52+00:00" }, { - "name": "sebastian/exporter", - "version": "3.1.3", + "name": "symfony/event-dispatcher", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "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": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:47:53+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "sebastian/global-state", - "version": "3.0.1", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.13", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", - "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", "shasum": "" }, "require": { - "php": ">=7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^8.0" + "php": ">=7.1.3" }, "suggest": { - "ext-uopz": "*" + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "global state" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:43:24+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "3.0.4", + "name": "symfony/filesystem", + "version": "v5.4.13", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + "url": "https://github.com/symfony/filesystem.git", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + "source": "https://github.com/symfony/filesystem/tree/v5.4.13" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:40:27+00:00" + "time": "2022-09-21T19:53:16+00:00" }, { - "name": "sebastian/object-reflector", - "version": "1.1.2", + "name": "symfony/finder", + "version": "v5.4.11", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + "url": "https://github.com/symfony/finder.git", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", "shasum": "" }, "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + "source": "https://github.com/symfony/finder/tree/v5.4.11" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:37:18+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { - "name": "sebastian/recursion-context", - "version": "3.0.1", + "name": "symfony/polyfill-php72", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:34:24+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sebastian/resource-operations", - "version": "2.0.2", + "name": "symfony/polyfill-php81", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -6099,140 +5823,188 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "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": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:30:19+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "sebastian/type", - "version": "1.1.4", + "name": "symfony/process", + "version": "v5.4.11", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + "url": "https://github.com/symfony/process.git", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.2" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + "source": "https://github.com/symfony/process/tree/v5.4.11" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-11-30T07:25:11+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { - "name": "sebastian/version", - "version": "2.0.1", + "name": "symfony/stopwatch", + "version": "v5.4.13", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6df7a3effde34d81717bbef4591e5ffe32226d69", + "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.13" }, - "time": "2016-10-03T07:35:21+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": "2022-09-28T13:19:49+00:00" }, { "name": "theseer/tokenizer", @@ -6283,64 +6055,6 @@ } ], "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], diff --git a/config.xml b/config.xml index 151ba5075..bfbee3e32 100644 --- a/config.xml +++ b/config.xml @@ -2,7 +2,7 @@ ps_mbo - + diff --git a/ps_mbo.php b/ps_mbo.php index 53c52a439..c872ce960 100755 --- a/ps_mbo.php +++ b/ps_mbo.php @@ -48,7 +48,7 @@ class ps_mbo extends Module /** * @var string */ - public const VERSION = '4.0.0'; + public const VERSION = '4.1.0'; public const CONTROLLERS_WITH_CONNECTION_TOOLBAR = [ 'AdminPsMboModule', @@ -100,7 +100,7 @@ class ps_mbo extends Module public function __construct() { $this->name = 'ps_mbo'; - $this->version = self::VERSION; + $this->version = '4.1.0'; $this->author = 'PrestaShop'; $this->tab = 'administration'; $this->module_key = '6cad5414354fbef755c7df4ef1ab74eb'; From fe19dfa9e27c9da308f779f592aca9dbbc5867e8 Mon Sep 17 00:00:00 2001 From: Vincent Garcia Date: Wed, 9 Nov 2022 17:56:52 +0100 Subject: [PATCH 30/48] Feat :page_facing_up: Update license --- controllers/admin/apiPsMbo.php | 1 + controllers/admin/apiSecurityPsMbo.php | 1 + controllers/admin/index.php | 40 ++++++++----------- controllers/index.php | 40 ++++++++----------- src/Api/Config/index.php | 40 ++++++++----------- src/Api/Exception/index.php | 14 +++---- src/Api/Handler/ErrorHandler/index.php | 40 ++++++++----------- src/Api/Repository/index.php | 14 +++---- src/Service/View/InstalledModule.php | 18 +++++++++ tests/Helpers/VersionTest.php | 6 +-- tests/Module/Filters/FiltersTest.php | 6 +-- tests/Module/TransitionModuleTest.php | 6 +-- .../Workflow/ModuleStateMachineTest.php | 6 +-- tests/bootstrap.php | 19 ++++++++- views/css/addons-connect.css | 18 +++++++++ .../includes/action_menu.html.twig | 34 ++++++++-------- .../recommended-modules.html.twig | 18 +++++++++ .../module_catalog/see-more.html.twig | 18 +++++++++ views/templates/hook/configure-toolbar.tpl | 18 +++++++++ views/templates/hook/push-configuration.tpl | 18 +++++++++ views/templates/hook/recommended-themes.tpl | 14 +++---- ...e_manager_additional_description.html.twig | 18 +++++++++ .../module_manager_empty_category.html.twig | 18 +++++++++ 23 files changed, 282 insertions(+), 143 deletions(-) diff --git a/controllers/admin/apiPsMbo.php b/controllers/admin/apiPsMbo.php index 3f5fec771..4c4c5afde 100755 --- a/controllers/admin/apiPsMbo.php +++ b/controllers/admin/apiPsMbo.php @@ -17,6 +17,7 @@ * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ + use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; use PrestaShop\Module\Mbo\Api\Exception\IncompleteSignatureParamsException; use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; diff --git a/controllers/admin/apiSecurityPsMbo.php b/controllers/admin/apiSecurityPsMbo.php index 792900fba..d01815b08 100755 --- a/controllers/admin/apiSecurityPsMbo.php +++ b/controllers/admin/apiSecurityPsMbo.php @@ -17,6 +17,7 @@ * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ + use PrestaShop\Module\Mbo\Api\Config\Config; use PrestaShop\Module\Mbo\Api\Controller\AbstractAdminApiController; diff --git a/controllers/admin/index.php b/controllers/admin/index.php index 1dd39a599..296d682e8 100755 --- a/controllers/admin/index.php +++ b/controllers/admin/index.php @@ -1,28 +1,22 @@ -* @copyright 2007-2020 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ + * 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 + */ header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/controllers/index.php b/controllers/index.php index 1dd39a599..296d682e8 100755 --- a/controllers/index.php +++ b/controllers/index.php @@ -1,28 +1,22 @@ -* @copyright 2007-2020 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ + * 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 + */ header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/src/Api/Config/index.php b/src/Api/Config/index.php index 1dd39a599..296d682e8 100644 --- a/src/Api/Config/index.php +++ b/src/Api/Config/index.php @@ -1,28 +1,22 @@ -* @copyright 2007-2020 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ + * 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 + */ header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/src/Api/Exception/index.php b/src/Api/Exception/index.php index 4b8dc0718..296d682e8 100755 --- a/src/Api/Exception/index.php +++ b/src/Api/Exception/index.php @@ -1,21 +1,21 @@ - * @copyright 2007-2020 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - * International Registered Trademark & Property of PrestaShop SA + * @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 */ header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/src/Api/Handler/ErrorHandler/index.php b/src/Api/Handler/ErrorHandler/index.php index 1dd39a599..296d682e8 100644 --- a/src/Api/Handler/ErrorHandler/index.php +++ b/src/Api/Handler/ErrorHandler/index.php @@ -1,28 +1,22 @@ -* @copyright 2007-2020 PrestaShop SA -* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ + * 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 + */ header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/src/Api/Repository/index.php b/src/Api/Repository/index.php index 4b8dc0718..296d682e8 100755 --- a/src/Api/Repository/index.php +++ b/src/Api/Repository/index.php @@ -1,21 +1,21 @@ - * @copyright 2007-2020 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) - * International Registered Trademark & Property of PrestaShop SA + * @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 */ header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/src/Service/View/InstalledModule.php b/src/Service/View/InstalledModule.php index 7fc70ff02..9a73e09c6 100644 --- a/src/Service/View/InstalledModule.php +++ b/src/Service/View/InstalledModule.php @@ -1,4 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ namespace PrestaShop\Module\Mbo\Service\View; diff --git a/tests/Helpers/VersionTest.php b/tests/Helpers/VersionTest.php index 5ae6e5c0b..f0f03bf96 100644 --- a/tests/Helpers/VersionTest.php +++ b/tests/Helpers/VersionTest.php @@ -5,7 +5,7 @@ * * NOTICE OF LICENSE * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) + * 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 @@ -13,9 +13,9 @@ * 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 + * @author PrestaShop SA and Contributors * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\Mbo\Tests\Helpers; diff --git a/tests/Module/Filters/FiltersTest.php b/tests/Module/Filters/FiltersTest.php index 4c7b5b84a..4b17b4959 100644 --- a/tests/Module/Filters/FiltersTest.php +++ b/tests/Module/Filters/FiltersTest.php @@ -5,7 +5,7 @@ * * NOTICE OF LICENSE * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) + * 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 @@ -13,9 +13,9 @@ * 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 + * @author PrestaShop SA and Contributors * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\Mbo\Tests\Module\Filters; diff --git a/tests/Module/TransitionModuleTest.php b/tests/Module/TransitionModuleTest.php index 6c71af968..7f1acf041 100644 --- a/tests/Module/TransitionModuleTest.php +++ b/tests/Module/TransitionModuleTest.php @@ -5,7 +5,7 @@ * * NOTICE OF LICENSE * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) + * 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 @@ -13,9 +13,9 @@ * 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 + * @author PrestaShop SA and Contributors * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\Mbo\Tests\Module; diff --git a/tests/Module/Workflow/ModuleStateMachineTest.php b/tests/Module/Workflow/ModuleStateMachineTest.php index 7f31ae507..70727f187 100644 --- a/tests/Module/Workflow/ModuleStateMachineTest.php +++ b/tests/Module/Workflow/ModuleStateMachineTest.php @@ -5,7 +5,7 @@ * * NOTICE OF LICENSE * - * This source file is subject to the Academic Free License 3.0 (AFL-3.0) + * 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 @@ -13,9 +13,9 @@ * 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 + * @author PrestaShop SA and Contributors * @copyright Since 2007 PrestaShop SA and Contributors - * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\Mbo\Tests\Module\Workflow; diff --git a/tests/bootstrap.php b/tests/bootstrap.php index d36682b0d..ddfd676a1 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,5 +1,22 @@ + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ require __DIR__ . '/../vendor/autoload.php'; define('_PS_IN_TEST_', true); diff --git a/views/css/addons-connect.css b/views/css/addons-connect.css index 096d3a90a..05aa6f4df 100644 --- a/views/css/addons-connect.css +++ b/views/css/addons-connect.css @@ -1,3 +1,21 @@ +/** + * 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 + */ .modal-open { overflow: hidden; display: block; diff --git a/views/templates/admin/controllers/module_catalog/includes/action_menu.html.twig b/views/templates/admin/controllers/module_catalog/includes/action_menu.html.twig index 7769dbf27..870584bd0 100644 --- a/views/templates/admin/controllers/module_catalog/includes/action_menu.html.twig +++ b/views/templates/admin/controllers/module_catalog/includes/action_menu.html.twig @@ -1,21 +1,21 @@ {#** - * 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 - *#} + * 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 + *#} {% set url, priceRaw, priceDisplay, url_active, urls, name, transDomains = module.attributes.url, module.attributes.price.raw, diff --git a/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig b/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig index 275e5153f..900809a14 100644 --- a/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig +++ b/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig @@ -1,3 +1,21 @@ +{#** + * 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 + *#} {# ** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA diff --git a/views/templates/admin/controllers/module_catalog/see-more.html.twig b/views/templates/admin/controllers/module_catalog/see-more.html.twig index fd0cc1121..9e9cea012 100644 --- a/views/templates/admin/controllers/module_catalog/see-more.html.twig +++ b/views/templates/admin/controllers/module_catalog/see-more.html.twig @@ -1,3 +1,21 @@ +{#** + * 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 + *#} {% if module.attributes.id != "0" %} {% endblock %} {% block content %} -
+
{% include '@Modules/ps_mbo/views/templates/admin/controllers/module_catalog/includes/modal_import.html.twig' with { 'level' : level, 'errorMessage' : errorMessage } %} {% endblock %} diff --git a/views/templates/admin/controllers/module_catalog/cdc-error.html.twig b/views/templates/admin/controllers/module_catalog/cdc-error.html.twig new file mode 100644 index 000000000..7fb01f7fd --- /dev/null +++ b/views/templates/admin/controllers/module_catalog/cdc-error.html.twig @@ -0,0 +1,17 @@ +
+
+
+

+ {{ 'Oh no.. something went wrong'|trans({}, 'Modules.Mbo.Global') }} +

+

+ {{ 'There has been a problem on our side. Refresh your page and if the problem persists, try again later.'|trans({}, 'Modules.Mbo.Global') }} +

+
+
+ +
+
+
diff --git a/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig b/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig index 900809a14..765708531 100644 --- a/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig +++ b/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig @@ -39,11 +39,19 @@ {% block content %} -
+
{% endblock %} diff --git a/views/templates/hook/dashboard-zone-one.tpl b/views/templates/hook/dashboard-zone-one.tpl index a1b553976..6e0105249 100644 --- a/views/templates/hook/dashboard-zone-one.tpl +++ b/views/templates/hook/dashboard-zone-one.tpl @@ -36,11 +36,19 @@ *} -
+
diff --git a/views/templates/hook/dashboard-zone-three.tpl b/views/templates/hook/dashboard-zone-three.tpl index a5b74edbb..b121c1896 100644 --- a/views/templates/hook/dashboard-zone-three.tpl +++ b/views/templates/hook/dashboard-zone-three.tpl @@ -18,22 +18,32 @@ *} -
+
-
+
-
\ No newline at end of file +
diff --git a/views/templates/hook/dashboard-zone-two.tpl b/views/templates/hook/dashboard-zone-two.tpl index 0f47cdefb..e2b9102e7 100644 --- a/views/templates/hook/dashboard-zone-two.tpl +++ b/views/templates/hook/dashboard-zone-two.tpl @@ -18,11 +18,19 @@ *} -
+
diff --git a/views/templates/hook/recommended-themes.tpl b/views/templates/hook/recommended-themes.tpl index e6500be23..dfbe1e681 100644 --- a/views/templates/hook/recommended-themes.tpl +++ b/views/templates/hook/recommended-themes.tpl @@ -18,12 +18,20 @@ *} -
+
From 77c2de2b959636895244b73baf4e3141ee29517e Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Mon, 14 Nov 2022 12:32:51 +0000 Subject: [PATCH 38/48] Apply gitignore --- .idea/.gitignore | 8 -- .idea/inspectionProfiles/Project_Default.xml | 9 -- .idea/modules.xml | 8 -- .idea/php.xml | 117 ------------------- .idea/ps_mbo.iml | 104 ----------------- .idea/vcs.xml | 7 -- 6 files changed, 253 deletions(-) delete mode 100755 .idea/.gitignore delete mode 100755 .idea/inspectionProfiles/Project_Default.xml delete mode 100755 .idea/modules.xml delete mode 100755 .idea/php.xml delete mode 100755 .idea/ps_mbo.iml delete mode 100755 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100755 index 73f69e095..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100755 index 04877b215..000000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100755 index 2dc1edf37..000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100755 index b45e8c258..000000000 --- a/.idea/php.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/ps_mbo.iml b/.idea/ps_mbo.iml deleted file mode 100755 index 9ec3fb737..000000000 --- a/.idea/ps_mbo.iml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100755 index 8f4c9da76..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From ac55a0941d189315267b2df168d32d2ef26f15d3 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Mon, 14 Nov 2022 17:17:57 +0000 Subject: [PATCH 39/48] Add white background for CDC error template --- views/css/cdc-error-templating.css | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/views/css/cdc-error-templating.css b/views/css/cdc-error-templating.css index a199f5168..dabe87fa8 100644 --- a/views/css/cdc-error-templating.css +++ b/views/css/cdc-error-templating.css @@ -1,5 +1,18 @@ .cdc-error-container { padding-bottom: 1rem; + margin-bottom: 15px; + background: #FFFFFF; + border-radius: 0.5rem; + border-width: 1px; + flex-direction: column; + display: flex; + --tw-border-opacity: 1; + border-color: rgb(200 215 228 / var(--tw-border-opacity)); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); + --tw-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + --tw-shadow-colored: 0px 4px 8px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .cdc-error-content { display: flex; From 76becbf41d940eb183c86bc64321911f9bc70244 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Fri, 18 Nov 2022 08:32:25 +0000 Subject: [PATCH 40/48] Update translations for EN - FR- IT - ES - DE --- src/Traits/HaveConfigurationPage.php | 6 +- src/Traits/Hooks/UseDisplayDashboardTop.php | 2 +- translations/de-DE/ModulesMboAddons.de-DE.xlf | 8 +- translations/de-DE/ModulesMboErrors.de-DE.xlf | 2 +- translations/de-DE/ModulesMboGlobal.de-DE.xlf | 42 ++++++++- translations/de-DE/ModulesMboLinks.de-DE.xlf | 19 ++++ .../de-DE/ModulesMboModulescatalog.de-DE.xlf | 93 +++++++++++++++++-- translations/de-DE/ModulesMboPsmbo.de-DE.xlf | 37 -------- translations/de-DE/ModulesMboSearch.de-DE.xlf | 4 +- translations/en-US/ModulesMboAddons.en-US.xlf | 8 +- translations/en-US/ModulesMboErrors.en-US.xlf | 2 +- translations/en-US/ModulesMboGlobal.en-US.xlf | 42 ++++++++- translations/en-US/ModulesMboLinks.en-US.xlf | 23 ++++- .../en-US/ModulesMboModulescatalog.en-US.xlf | 93 +++++++++++++++++-- translations/en-US/ModulesMboPsmbo.en-US.xlf | 37 -------- translations/en-US/ModulesMboSearch.en-US.xlf | 4 +- translations/es-ES/ModulesMboAddons.es-ES.xlf | 8 +- translations/es-ES/ModulesMboErrors.es-ES.xlf | 2 +- translations/es-ES/ModulesMboGlobal.es-ES.xlf | 42 ++++++++- translations/es-ES/ModulesMboLinks.es-ES.xlf | 19 ++++ .../es-ES/ModulesMboModulescatalog.es-ES.xlf | 93 +++++++++++++++++-- translations/es-ES/ModulesMboPsmbo.es-ES.xlf | 37 -------- translations/es-ES/ModulesMboSearch.es-ES.xlf | 4 +- translations/fr-FR/ModulesMboAddons.fr-FR.xlf | 8 +- translations/fr-FR/ModulesMboErrors.fr-FR.xlf | 2 +- translations/fr-FR/ModulesMboGlobal.fr-FR.xlf | 42 ++++++++- translations/fr-FR/ModulesMboLinks.fr-FR.xlf | 23 ++++- .../fr-FR/ModulesMboModulescatalog.fr-FR.xlf | 93 +++++++++++++++++-- translations/fr-FR/ModulesMboPsmbo.fr-FR.xlf | 37 -------- translations/fr-FR/ModulesMboSearch.fr-FR.xlf | 4 +- translations/it-IT/ModulesMboAddons.it-IT.xlf | 8 +- translations/it-IT/ModulesMboErrors.it-IT.xlf | 2 +- translations/it-IT/ModulesMboGlobal.it-IT.xlf | 42 ++++++++- translations/it-IT/ModulesMboLinks.it-IT.xlf | 19 ++++ .../it-IT/ModulesMboModulescatalog.it-IT.xlf | 93 +++++++++++++++++-- translations/it-IT/ModulesMboPsmbo.it-IT.xlf | 37 -------- translations/it-IT/ModulesMboSearch.it-IT.xlf | 4 +- 37 files changed, 763 insertions(+), 278 deletions(-) delete mode 100644 translations/de-DE/ModulesMboPsmbo.de-DE.xlf delete mode 100644 translations/en-US/ModulesMboPsmbo.en-US.xlf delete mode 100644 translations/es-ES/ModulesMboPsmbo.es-ES.xlf delete mode 100644 translations/fr-FR/ModulesMboPsmbo.fr-FR.xlf delete mode 100644 translations/it-IT/ModulesMboPsmbo.it-IT.xlf diff --git a/src/Traits/HaveConfigurationPage.php b/src/Traits/HaveConfigurationPage.php index 76380551d..539fa91b3 100644 --- a/src/Traits/HaveConfigurationPage.php +++ b/src/Traits/HaveConfigurationPage.php @@ -125,12 +125,12 @@ public function displayForm(): string $form = [ 'form' => [ 'legend' => [ - 'title' => $this->l('Settings'), + 'title' => $this->trans('Settings', [], 'Admin.Global'), ], 'input' => [ [ 'type' => 'select', - 'label' => $this->l('Configuration value'), + 'label' => $this->trans('Configuration value', [], 'Admin.Global'), 'name' => 'DISTRIBUTION_ENVIRONMENT', 'options' => [ 'id' => 'value', @@ -141,7 +141,7 @@ public function displayForm(): string ], ], 'submit' => [ - 'title' => $this->l('Save'), + 'title' => $this->trans('Save', [], 'Admin.Global'), 'class' => 'btn btn-default pull-right', ], ], diff --git a/src/Traits/Hooks/UseDisplayDashboardTop.php b/src/Traits/Hooks/UseDisplayDashboardTop.php index cdb605d89..0d9620228 100644 --- a/src/Traits/Hooks/UseDisplayDashboardTop.php +++ b/src/Traits/Hooks/UseDisplayDashboardTop.php @@ -130,7 +130,7 @@ protected function displayPushOnConfigurationPage(string $moduleName): string $this->smarty->assign([ 'catchPhrase' => $this->trans('Discover more modules to improve your shop on', 'Modules.Mbo.Global'), 'linkTarget' => $this->trans('https://addons.prestashop.com/en/517-blocks-tabs-banners?utm_source=back-office&utm_medium=modules&utm_campaign=back-office-EN', 'Modules.Mbo.Links'), - 'linkText' => $this->trans('PrestaShop Addons Marketplace'), + 'linkText' => $this->trans('PrestaShop Addons Marketplace', 'Modules.Mbo.Global'), ]); break; default: diff --git a/translations/de-DE/ModulesMboAddons.de-DE.xlf b/translations/de-DE/ModulesMboAddons.de-DE.xlf index f64a53466..443bac1ab 100644 --- a/translations/de-DE/ModulesMboAddons.de-DE.xlf +++ b/translations/de-DE/ModulesMboAddons.de-DE.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Mit dem Addons Marktplatz verbinden - Line: 127 + Line: 24 - - - - Confirm logout Abmeldung bestätigen diff --git a/translations/de-DE/ModulesMboErrors.de-DE.xlf b/translations/de-DE/ModulesMboErrors.de-DE.xlf index 2360e036c..386ea0178 100644 --- a/translations/de-DE/ModulesMboErrors.de-DE.xlf +++ b/translations/de-DE/ModulesMboErrors.de-DE.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/de-DE/ModulesMboGlobal.de-DE.xlf b/translations/de-DE/ModulesMboGlobal.de-DE.xlf index 49f04bd7b..d08a3b1b8 100644 --- a/translations/de-DE/ModulesMboGlobal.de-DE.xlf +++ b/translations/de-DE/ModulesMboGlobal.de-DE.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office PrestaShop-Marktplatz in Ihrem Back Office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Durchsuchen Sie den PrestaShop-Marktplatz direkt von Ihrem Back-Office aus, um Ihren Bedürfnissen gerecht zu werden. - Line: 117 + Line: 120 + + + + + + + + + Line: 124 + + + PrestaShop Addons Marketplace + PrestaShop Addons Marktplatz + Line: 140 + + + Discover more modules to improve your shop on + Entdecken Sie weitere Module zur Verbesserung Ihres Shops auf + Line: 138 + + + + + + + Oh no.. something went wrong + Oh nein... etwas ist schief gelaufen + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Es gab ein Problem auf unserer Seite. Aktualisieren Sie Ihre Seite und wenn das Problem weiterhin besteht, versuchen Sie es später erneut. + Line: 8 + + + Refresh page + Seite aktualisieren + Line: 13 diff --git a/translations/de-DE/ModulesMboLinks.de-DE.xlf b/translations/de-DE/ModulesMboLinks.de-DE.xlf index 1ed82163c..3e4cfb990 100644 --- a/translations/de-DE/ModulesMboLinks.de-DE.xlf +++ b/translations/de-DE/ModulesMboLinks.de-DE.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/de-DE/ModulesMboModulescatalog.de-DE.xlf b/translations/de-DE/ModulesMboModulescatalog.de-DE.xlf index 224ce31f6..17a2d5391 100644 --- a/translations/de-DE/ModulesMboModulescatalog.de-DE.xlf +++ b/translations/de-DE/ModulesMboModulescatalog.de-DE.xlf @@ -2,11 +2,6 @@ - - Upload a module - Modul hochladen - Line: 96 - Synchronized with Addons marketplace! Mit dem Addons Marktplatz verbunden! @@ -51,8 +46,27 @@ - + + + + Discover + Entdecken + Line: 31 + + + Toggle Dropdown + Dropdown ein-/ausklappen + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Verbinden Sie ihren Shop mit ihrem Addons-Account, um automatische Updates ihrer gekauften Module zu ermöglichen. Sie haben noch keinen Account? + Line: 42 + Sign up now Jetzt registrieren @@ -65,4 +79,71 @@ + + + + Upload a module + Modul hochladen + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Ziehen Sie ihr Modularchiv hier hin oder [1]wählen Sie eine Datei[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Vous pouvez charger un fichier à la fois, au format .zip ou tarball (.tar, .tar.gz or .tgz). + Line: 48 + + + Your module will be installed right after that. + Ihr Modul wird gleich danach installiert. + Line: 49 + + + Installing module... + Installiere Modul... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Es schließt sich in Kürze automatisch, sobald das Modul installiert ist. + Line: 57 + + + Module installed! + Modul installiert! + Line: 62 + + + Oops... Upload failed. + Uups... Hochladen fehlgeschlagen. + Line: 68 + + + What happened? + Was ist passiert? + Line: 69 + + + + + + + Read More + Mehr ... + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Die meistverkauften Module dieser Kategorie finden Sie hier: %link%. + Line: 19 + + + diff --git a/translations/de-DE/ModulesMboPsmbo.de-DE.xlf b/translations/de-DE/ModulesMboPsmbo.de-DE.xlf deleted file mode 100644 index 6cd3de61f..000000000 --- a/translations/de-DE/ModulesMboPsmbo.de-DE.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - Weitere Module zur Datensicherheit finden Sie bei PrestaShop Addons im Bereich "Sicherheit und Berechtigungen": - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - PrestaShop Addons Marktplatz - Line: 140 - - - Discover more modules to improve your shop on - Entdecken Sie weitere Module zur Verbesserung Ihres Shops auf - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/de-DE/ModulesMboSearch.de-DE.xlf b/translations/de-DE/ModulesMboSearch.de-DE.xlf index f12ad2084..0d9d95680 100644 --- a/translations/de-DE/ModulesMboSearch.de-DE.xlf +++ b/translations/de-DE/ModulesMboSearch.de-DE.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Durchsuche addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Zu Addons wechseln - Line: 52 + Line: 59 diff --git a/translations/en-US/ModulesMboAddons.en-US.xlf b/translations/en-US/ModulesMboAddons.en-US.xlf index 7ce2593ef..5b41d81f2 100644 --- a/translations/en-US/ModulesMboAddons.en-US.xlf +++ b/translations/en-US/ModulesMboAddons.en-US.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Connect to Addons marketplace - Line: 127 + Line: 24 - - - - Confirm logout Confirm logout diff --git a/translations/en-US/ModulesMboErrors.en-US.xlf b/translations/en-US/ModulesMboErrors.en-US.xlf index 1da6733a9..3d9b1af8c 100644 --- a/translations/en-US/ModulesMboErrors.en-US.xlf +++ b/translations/en-US/ModulesMboErrors.en-US.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/en-US/ModulesMboGlobal.en-US.xlf b/translations/en-US/ModulesMboGlobal.en-US.xlf index ca7bc3707..f58db1da1 100644 --- a/translations/en-US/ModulesMboGlobal.en-US.xlf +++ b/translations/en-US/ModulesMboGlobal.en-US.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office PrestaShop Marketplace in your Back Office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Browse the Addons marketplace directly from your back office to better meet your needs. - Line: 117 + Line: 120 + + + + + + + + + Line: 124 + + + PrestaShop Addons Marketplace + PrestaShop Addons Marketplace + Line: 140 + + + Discover more modules to improve your shop on + Discover more modules to improve your shop on + Line: 138 + + + + + + + Oh no.. something went wrong + Oh no.. something went wrong + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Line: 8 + + + Refresh page + Refresh page + Line: 13 diff --git a/translations/en-US/ModulesMboLinks.en-US.xlf b/translations/en-US/ModulesMboLinks.en-US.xlf index 5e0e0e176..2ac9f91a0 100644 --- a/translations/en-US/ModulesMboLinks.en-US.xlf +++ b/translations/en-US/ModulesMboLinks.en-US.xlf @@ -5,12 +5,31 @@ https://accounts.distribution.prestashop.net/en/sign-up https://accounts.distribution.prestashop.net/en/sign-up - Line: 139 + Line: 123 https://auth.prestashop.com/en/password/request https://auth.prestashop.com/en/password/request - Line: 146 + Line: 130 + + + + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 diff --git a/translations/en-US/ModulesMboModulescatalog.en-US.xlf b/translations/en-US/ModulesMboModulescatalog.en-US.xlf index 82ea7cde0..993217084 100644 --- a/translations/en-US/ModulesMboModulescatalog.en-US.xlf +++ b/translations/en-US/ModulesMboModulescatalog.en-US.xlf @@ -2,11 +2,6 @@ - - Upload a module - Upload a module - Line: 96 - Synchronized with Addons marketplace! Synchronized with Addons marketplace! @@ -51,8 +46,27 @@ - + + + + Discover + Discover + Line: 31 + + + Toggle Dropdown + Toggle Dropdown + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Line: 42 + Sign up now Sign up now @@ -65,4 +79,71 @@ + + + + Upload a module + Upload a module + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Drop your module archive here or [1]select file[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Line: 48 + + + Your module will be installed right after that. + Your module will be installed right after that. + Line: 49 + + + Installing module... + Installing module... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + It will close as soon as the module is installed. It won't be long! + Line: 57 + + + Module installed! + Module installed! + Line: 62 + + + Oops... Upload failed. + Oops... Upload failed. + Line: 68 + + + What happened? + What happened? + Line: 69 + + + + + + + Read More + Read More + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Discover the best-selling modules of this category in the %link% page. + Line: 19 + + + diff --git a/translations/en-US/ModulesMboPsmbo.en-US.xlf b/translations/en-US/ModulesMboPsmbo.en-US.xlf deleted file mode 100644 index 5db9c2d35..000000000 --- a/translations/en-US/ModulesMboPsmbo.en-US.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - PrestaShop Addons Marketplace - Line: 140 - - - Discover more modules to improve your shop on - Discover more modules to improve your shop on - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/en-US/ModulesMboSearch.en-US.xlf b/translations/en-US/ModulesMboSearch.en-US.xlf index 5251ea79d..ecb022f49 100644 --- a/translations/en-US/ModulesMboSearch.en-US.xlf +++ b/translations/en-US/ModulesMboSearch.en-US.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Search addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Go to Addons - Line: 52 + Line: 59 diff --git a/translations/es-ES/ModulesMboAddons.es-ES.xlf b/translations/es-ES/ModulesMboAddons.es-ES.xlf index 9a3469af3..81602d4aa 100644 --- a/translations/es-ES/ModulesMboAddons.es-ES.xlf +++ b/translations/es-ES/ModulesMboAddons.es-ES.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Conectarse a Addons Marketplace - Line: 127 + Line: 24 - - - - Confirm logout Confirmar el cierre de sesión diff --git a/translations/es-ES/ModulesMboErrors.es-ES.xlf b/translations/es-ES/ModulesMboErrors.es-ES.xlf index 7d04ea094..41bb52139 100644 --- a/translations/es-ES/ModulesMboErrors.es-ES.xlf +++ b/translations/es-ES/ModulesMboErrors.es-ES.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/es-ES/ModulesMboGlobal.es-ES.xlf b/translations/es-ES/ModulesMboGlobal.es-ES.xlf index c037b9cd0..fd66b3f67 100644 --- a/translations/es-ES/ModulesMboGlobal.es-ES.xlf +++ b/translations/es-ES/ModulesMboGlobal.es-ES.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office PrestaShop Marketplace en tu Back Office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Consulta el mercado de PrestaShop directamente desde tu back-office para que se adapte mejor a tus necesidades. - Line: 117 + Line: 120 + + + + + + + + Para obtener mayor seguridad en los formularios de tu sitio web, consulta nuestra categoría de módulos de Seguridad y Acceso en + Line: 124 + + + PrestaShop Addons Marketplace + Marketplace PrestaShop Addons + Line: 140 + + + Discover more modules to improve your shop on + Descubra más módulos para mejorar su tienda en + Line: 138 + + + + + + + Oh no.. something went wrong + Oh no... algo salió mal + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Ha habido un problema por nuestro lado. Actualice su página y si el problema persiste, inténtelo de nuevo más tarde. + Line: 8 + + + Refresh page + Actualizar la página + Line: 13 diff --git a/translations/es-ES/ModulesMboLinks.es-ES.xlf b/translations/es-ES/ModulesMboLinks.es-ES.xlf index 932b76e9d..dfe8f36d9 100644 --- a/translations/es-ES/ModulesMboLinks.es-ES.xlf +++ b/translations/es-ES/ModulesMboLinks.es-ES.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/es-ES/ModulesMboModulescatalog.es-ES.xlf b/translations/es-ES/ModulesMboModulescatalog.es-ES.xlf index 3101122a4..143f0cef3 100644 --- a/translations/es-ES/ModulesMboModulescatalog.es-ES.xlf +++ b/translations/es-ES/ModulesMboModulescatalog.es-ES.xlf @@ -2,11 +2,6 @@ - - Upload a module - Subir un módulo - Line: 96 - Synchronized with Addons marketplace! ¡Sincronizado con Addons marketplace! @@ -51,8 +46,27 @@ - + + + + Discover + Descubrir + Line: 31 + + + Toggle Dropdown + Interruptor desplegable + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Vincular tu tienda a su tuenta Addons para recibir automáticamente actualizaciones importantes de los módulos que compraste. ¿Aún no tienes una cuenta? + Line: 42 + Sign up now Registrarse ahora @@ -65,4 +79,71 @@ + + + + Upload a module + Subir un módulo + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Arrastra el archivo del módulo aquí o [1]selecciona el archivo[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Por favor, sube solamente un archivo al mismo tiempo, en formato .zip o tarball (.tar, .tar.gz or .tgz). + Line: 48 + + + Your module will be installed right after that. + El módulo será instalado a continuación. + Line: 49 + + + Installing module... + Instalando módulo... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Se cerrará en cuanto se instale el módulo. ¡No falta mucho! + Line: 57 + + + Module installed! + ¡Módulo instalado! + Line: 62 + + + Oops... Upload failed. + Uy... La subida ha fallado. + Line: 68 + + + What happened? + ¿Que ocurrió? + Line: 69 + + + + + + + Read More + Leer más + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Descubre los módulos más vendidos de esta categoría en la página %link%. + Line: 19 + + + diff --git a/translations/es-ES/ModulesMboPsmbo.es-ES.xlf b/translations/es-ES/ModulesMboPsmbo.es-ES.xlf deleted file mode 100644 index 4091e07c3..000000000 --- a/translations/es-ES/ModulesMboPsmbo.es-ES.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - Para obtener mayor seguridad en los formularios de tu sitio web, consulta nuestra categoría de módulos de Seguridad y Acceso en - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - Marketplace PrestaShop Addons - Line: 140 - - - Discover more modules to improve your shop on - Descubra más módulos para mejorar su tienda en - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/es-ES/ModulesMboSearch.es-ES.xlf b/translations/es-ES/ModulesMboSearch.es-ES.xlf index 6aed52e8d..37745bea6 100644 --- a/translations/es-ES/ModulesMboSearch.es-ES.xlf +++ b/translations/es-ES/ModulesMboSearch.es-ES.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Buscar addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Ir a Addons - Line: 52 + Line: 59 diff --git a/translations/fr-FR/ModulesMboAddons.fr-FR.xlf b/translations/fr-FR/ModulesMboAddons.fr-FR.xlf index 9f369e2c3..731170483 100644 --- a/translations/fr-FR/ModulesMboAddons.fr-FR.xlf +++ b/translations/fr-FR/ModulesMboAddons.fr-FR.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Se connecter à la marketplace Addons - Line: 127 + Line: 24 - - - - Confirm logout Confirmer la déconnexion diff --git a/translations/fr-FR/ModulesMboErrors.fr-FR.xlf b/translations/fr-FR/ModulesMboErrors.fr-FR.xlf index 88c5f0711..0a595a1bb 100644 --- a/translations/fr-FR/ModulesMboErrors.fr-FR.xlf +++ b/translations/fr-FR/ModulesMboErrors.fr-FR.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/fr-FR/ModulesMboGlobal.fr-FR.xlf b/translations/fr-FR/ModulesMboGlobal.fr-FR.xlf index 47fcd486d..910d0a5d7 100644 --- a/translations/fr-FR/ModulesMboGlobal.fr-FR.xlf +++ b/translations/fr-FR/ModulesMboGlobal.fr-FR.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office La place de marché PrestaShop dans votre back-office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Consultez la place de marché PrestaShop directement depuis votre back-office pour mieux répondre à vos besoins. - Line: 117 + Line: 120 + + + + + + + + + Line: 124 + + + PrestaShop Addons Marketplace + La place de marché PrestaShop + Line: 140 + + + Discover more modules to improve your shop on + Découvrez d'autres modules pour améliorer votre boutique sur + Line: 138 + + + + + + + Oh no.. something went wrong + Oh non... Quelque chose s'est mal passé + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Il y a eu un problème de notre côté. Actualisez votre page et si le problème persiste, réessayez plus tard. + Line: 8 + + + Refresh page + Rafraîchir la page + Line: 13 diff --git a/translations/fr-FR/ModulesMboLinks.fr-FR.xlf b/translations/fr-FR/ModulesMboLinks.fr-FR.xlf index 9ffb98bed..c62e790f3 100644 --- a/translations/fr-FR/ModulesMboLinks.fr-FR.xlf +++ b/translations/fr-FR/ModulesMboLinks.fr-FR.xlf @@ -5,12 +5,31 @@ https://accounts.distribution.prestashop.net/en/sign-up https://accounts.distribution.prestashop.net/fr/sign-up - Line: 139 + Line: 123 https://auth.prestashop.com/en/password/request https://auth.prestashop.com/fr/mot-de-passe/demande-de-reinitialisation - Line: 146 + Line: 130 + + + + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 diff --git a/translations/fr-FR/ModulesMboModulescatalog.fr-FR.xlf b/translations/fr-FR/ModulesMboModulescatalog.fr-FR.xlf index dd27115e0..d67800309 100644 --- a/translations/fr-FR/ModulesMboModulescatalog.fr-FR.xlf +++ b/translations/fr-FR/ModulesMboModulescatalog.fr-FR.xlf @@ -2,11 +2,6 @@ - - Upload a module - Installer un module - Line: 96 - Synchronized with Addons marketplace! Synchronisé avec PrestaShop Addons ! @@ -51,8 +46,27 @@ - + + + + Discover + Découvrir + Line: 31 + + + Toggle Dropdown + Ouvrir/fermer la liste déroulante + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Liez votre boutique à votre compte Addons : vos modules achetés seront automatiquement importés. Vous n'avez pas encore de compte ? + Line: 42 + Sign up now Inscrivez-vous @@ -65,4 +79,71 @@ + + + + Upload a module + Installer un module + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Glissez l'archive de votre module ici ou [1]sélectionnez un fichier[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Vous pouvez charger un fichier à la fois, au format .zip ou tarball (.tar, .tar.gz or .tgz). + Line: 48 + + + Your module will be installed right after that. + Votre module sera installé juste après. + Line: 49 + + + Installing module... + Installation du module... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + La fenêtre disparaitra dès que le module sera installé, dans un instant ! + Line: 57 + + + Module installed! + Module installé ! + Line: 62 + + + Oops... Upload failed. + Aïe... le chargement a échoué. + Line: 68 + + + What happened? + Que s'est-il passé ? + Line: 69 + + + + + + + Read More + En savoir plus + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Découvrir les meilleurs ventes de modules de cette catégorie sur la page %link%. + Line: 19 + + + diff --git a/translations/fr-FR/ModulesMboPsmbo.fr-FR.xlf b/translations/fr-FR/ModulesMboPsmbo.fr-FR.xlf deleted file mode 100644 index c164bd0da..000000000 --- a/translations/fr-FR/ModulesMboPsmbo.fr-FR.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - PrestaShop Addons Marketplace - Line: 140 - - - Discover more modules to improve your shop on - Découvrez d'autres modules pour améliorer votre boutique sur - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/fr-FR/ModulesMboSearch.fr-FR.xlf b/translations/fr-FR/ModulesMboSearch.fr-FR.xlf index a4f973c63..689e685d6 100644 --- a/translations/fr-FR/ModulesMboSearch.fr-FR.xlf +++ b/translations/fr-FR/ModulesMboSearch.fr-FR.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Rechercher sur addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Rendez-vous sur Addons - Line: 52 + Line: 59 diff --git a/translations/it-IT/ModulesMboAddons.it-IT.xlf b/translations/it-IT/ModulesMboAddons.it-IT.xlf index dc17ded3e..76c64b0ba 100644 --- a/translations/it-IT/ModulesMboAddons.it-IT.xlf +++ b/translations/it-IT/ModulesMboAddons.it-IT.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Collegati al Marketplace degli Addon - Line: 127 + Line: 24 - - - - Confirm logout Conferma Logout diff --git a/translations/it-IT/ModulesMboErrors.it-IT.xlf b/translations/it-IT/ModulesMboErrors.it-IT.xlf index ac25604fa..70d2a85ee 100644 --- a/translations/it-IT/ModulesMboErrors.it-IT.xlf +++ b/translations/it-IT/ModulesMboErrors.it-IT.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/it-IT/ModulesMboGlobal.it-IT.xlf b/translations/it-IT/ModulesMboGlobal.it-IT.xlf index 0c89dd07f..fe3266860 100644 --- a/translations/it-IT/ModulesMboGlobal.it-IT.xlf +++ b/translations/it-IT/ModulesMboGlobal.it-IT.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office Il mercato PrestaShop nel tuo back office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Consulta il marketplace PrestaShop direttamente dal tuo back-office per soddisfare al meglio le tue esigenze. - Line: 117 + Line: 120 + + + + + + + + Per una sicurezza ancora maggiore sui moduli del tuo sito Web, consulta la nostra categoria Sicurezza e Accesso ai moduli su + Line: 124 + + + PrestaShop Addons Marketplace + Marketplace di PrestaShop Addons + Line: 140 + + + Discover more modules to improve your shop on + Scopri altri moduli per migliorare il tuo negozio su + Line: 138 + + + + + + + Oh no.. something went wrong + Oh no... qualcosa è andato storto + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + C'è stato un problema da parte nostra. Aggiorna la tua pagina e se il problema persiste, riprova più tardi. + Line: 8 + + + Refresh page + Aggiorna la pagina + Line: 13 diff --git a/translations/it-IT/ModulesMboLinks.it-IT.xlf b/translations/it-IT/ModulesMboLinks.it-IT.xlf index 520c993d8..d8e9cacad 100644 --- a/translations/it-IT/ModulesMboLinks.it-IT.xlf +++ b/translations/it-IT/ModulesMboLinks.it-IT.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/it-IT/ModulesMboModulescatalog.it-IT.xlf b/translations/it-IT/ModulesMboModulescatalog.it-IT.xlf index c7791ddd5..59bb7ed5e 100644 --- a/translations/it-IT/ModulesMboModulescatalog.it-IT.xlf +++ b/translations/it-IT/ModulesMboModulescatalog.it-IT.xlf @@ -2,11 +2,6 @@ - - Upload a module - Carica il modulo - Line: 96 - Synchronized with Addons marketplace! Sincronizzato con il marketplace degli addons! @@ -51,8 +46,27 @@ - + + + + Discover + Scopri + Line: 31 + + + Toggle Dropdown + Menù a discesa + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Collega il tuo negozio al tuo account Addons per ricevere automaticamente importanti aggiornamenti per i moduli da te acquistati. Non hai ancora un account? + Line: 42 + Sign up now Registrati ora @@ -65,4 +79,71 @@ + + + + Upload a module + Carica il modulo + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Trascina qui il tuo archivio del modulo o [1]seleziona un file[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Si prega di caricare un file alla volta, .zip o in formato tarball (.tar, .tar.gz o .tgz). + Line: 48 + + + Your module will be installed right after that. + Il tuo modulo verrà installato proprio dopo di questo. + Line: 49 + + + Installing module... + Installazione modulo... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Si chiuderà appena il modulo sarà installato. Tra non molto! + Line: 57 + + + Module installed! + Modulo installato! + Line: 62 + + + Oops... Upload failed. + Ooops... Caricamento fallito. + Line: 68 + + + What happened? + Cos'è accaduto? + Line: 69 + + + + + + + Read More + Per saperne di più + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Scopri i moduli più venduti per questa categoria nella pagina %link%. + Line: 19 + + + diff --git a/translations/it-IT/ModulesMboPsmbo.it-IT.xlf b/translations/it-IT/ModulesMboPsmbo.it-IT.xlf deleted file mode 100644 index 189001626..000000000 --- a/translations/it-IT/ModulesMboPsmbo.it-IT.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - Per una sicurezza ancora maggiore sui moduli del tuo sito Web, consulta la nostra categoria Sicurezza e Accesso ai moduli su - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - Marketplace di PrestaShop Addons - Line: 140 - - - Discover more modules to improve your shop on - Scopri altri moduli per migliorare il tuo negozio su - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/it-IT/ModulesMboSearch.it-IT.xlf b/translations/it-IT/ModulesMboSearch.it-IT.xlf index 22e807fe1..ae224a0b6 100644 --- a/translations/it-IT/ModulesMboSearch.it-IT.xlf +++ b/translations/it-IT/ModulesMboSearch.it-IT.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Cerca addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Vai agli Addon - Line: 52 + Line: 59 From e8a2608e895c6ab82999a100cf4c6f3baf4f99fe Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Fri, 18 Nov 2022 08:45:48 +0000 Subject: [PATCH 41/48] Modify Addons cookies to have httpOnly=false --- src/Controller/Admin/AddonsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Controller/Admin/AddonsController.php b/src/Controller/Admin/AddonsController.php index 5c961d3a3..24d3c2460 100644 --- a/src/Controller/Admin/AddonsController.php +++ b/src/Controller/Admin/AddonsController.php @@ -246,13 +246,13 @@ private function createCookieUser(Response $response, \stdClass $json, array $pa $phpEncryption = new PhpEncryption(_NEW_COOKIE_KEY_); $response->headers->setCookie( - new Cookie('username_addons', $phpEncryption->encrypt($params['username']), $expiresAt) + new Cookie('username_addons', $phpEncryption->encrypt($params['username']), $expiresAt, null, null, null, false) ); $response->headers->setCookie( - new Cookie('password_addons', $phpEncryption->encrypt($params['password']), $expiresAt) + new Cookie('password_addons', $phpEncryption->encrypt($params['password']), $expiresAt, null, null, null, false) ); $response->headers->setCookie( - new Cookie('is_contributor', (string) $json->is_contributor, $expiresAt) + new Cookie('is_contributor', (string) $json->is_contributor, $expiresAt, null, null, null, false) ); return $response; From dfd91cc8c93d8bd1f8a2e225e1e21e50bddc5373 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Fri, 18 Nov 2022 10:57:49 +0000 Subject: [PATCH 42/48] Update translations for NL - PL- PT - RU --- translations/nl-NL/ModulesMboAddons.nl-NL.xlf | 8 +- translations/nl-NL/ModulesMboErrors.nl-NL.xlf | 2 +- translations/nl-NL/ModulesMboGlobal.nl-NL.xlf | 42 ++++++++- translations/nl-NL/ModulesMboLinks.nl-NL.xlf | 19 ++++ .../nl-NL/ModulesMboModulescatalog.nl-NL.xlf | 93 +++++++++++++++++-- translations/nl-NL/ModulesMboPsmbo.nl-NL.xlf | 37 -------- translations/nl-NL/ModulesMboSearch.nl-NL.xlf | 4 +- translations/pl-PL/ModulesMboAddons.pl-PL.xlf | 8 +- translations/pl-PL/ModulesMboErrors.pl-PL.xlf | 2 +- translations/pl-PL/ModulesMboGlobal.pl-PL.xlf | 42 ++++++++- translations/pl-PL/ModulesMboLinks.pl-PL.xlf | 19 ++++ .../pl-PL/ModulesMboModulescatalog.pl-PL.xlf | 93 +++++++++++++++++-- translations/pl-PL/ModulesMboPsmbo.pl-PL.xlf | 37 -------- translations/pl-PL/ModulesMboSearch.pl-PL.xlf | 4 +- translations/pt-PT/ModulesMboAddons.pt-PT.xlf | 8 +- translations/pt-PT/ModulesMboErrors.pt-PT.xlf | 2 +- translations/pt-PT/ModulesMboGlobal.pt-PT.xlf | 42 ++++++++- translations/pt-PT/ModulesMboLinks.pt-PT.xlf | 19 ++++ .../pt-PT/ModulesMboModulescatalog.pt-PT.xlf | 93 +++++++++++++++++-- translations/pt-PT/ModulesMboPsmbo.pt-PT.xlf | 37 -------- translations/pt-PT/ModulesMboSearch.pt-PT.xlf | 4 +- translations/ru-RU/ModulesMboAddons.ru-RU.xlf | 8 +- translations/ru-RU/ModulesMboErrors.ru-RU.xlf | 2 +- translations/ru-RU/ModulesMboGlobal.ru-RU.xlf | 42 ++++++++- translations/ru-RU/ModulesMboLinks.ru-RU.xlf | 19 ++++ .../ru-RU/ModulesMboModulescatalog.ru-RU.xlf | 93 +++++++++++++++++-- translations/ru-RU/ModulesMboPsmbo.ru-RU.xlf | 37 -------- translations/ru-RU/ModulesMboSearch.ru-RU.xlf | 4 +- 28 files changed, 604 insertions(+), 216 deletions(-) delete mode 100644 translations/nl-NL/ModulesMboPsmbo.nl-NL.xlf delete mode 100644 translations/pl-PL/ModulesMboPsmbo.pl-PL.xlf delete mode 100644 translations/pt-PT/ModulesMboPsmbo.pt-PT.xlf delete mode 100644 translations/ru-RU/ModulesMboPsmbo.ru-RU.xlf diff --git a/translations/nl-NL/ModulesMboAddons.nl-NL.xlf b/translations/nl-NL/ModulesMboAddons.nl-NL.xlf index 690232a63..c73bc7c53 100644 --- a/translations/nl-NL/ModulesMboAddons.nl-NL.xlf +++ b/translations/nl-NL/ModulesMboAddons.nl-NL.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Maak verbinding met Addons - Line: 127 + Line: 24 - - - - Confirm logout Bevestig uitloggen diff --git a/translations/nl-NL/ModulesMboErrors.nl-NL.xlf b/translations/nl-NL/ModulesMboErrors.nl-NL.xlf index 0c01e5c05..274f89899 100644 --- a/translations/nl-NL/ModulesMboErrors.nl-NL.xlf +++ b/translations/nl-NL/ModulesMboErrors.nl-NL.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/nl-NL/ModulesMboGlobal.nl-NL.xlf b/translations/nl-NL/ModulesMboGlobal.nl-NL.xlf index 63718bd0d..30faeb0c9 100644 --- a/translations/nl-NL/ModulesMboGlobal.nl-NL.xlf +++ b/translations/nl-NL/ModulesMboGlobal.nl-NL.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office PrestaShop Marktplaats in uw Back Office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Raadpleeg de PrestaShop-marktplaats rechtstreeks vanuit uw back-office om zo goed mogelijk aan uw behoeften te voldoen. - Line: 117 + Line: 120 + + + + + + + + Voor een nog betere beveiliging op uw contact formulieren, bekijken onze beveiliging en toegangs modules categorie via de + Line: 124 + + + PrestaShop Addons Marketplace + PrestaShop Addons Marketplace + Line: 140 + + + Discover more modules to improve your shop on + Ontdek meer modules om uw winkel te verbeteren op + Line: 138 + + + + + + + Oh no.. something went wrong + Oh nee... er is iets misgegaan + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Er was een probleem aan onze kant. Vernieuw uw pagina en als het probleem zich blijft voordoen, probeer het later opnieuw. + Line: 8 + + + Refresh page + Vernieuw pagina + Line: 13 diff --git a/translations/nl-NL/ModulesMboLinks.nl-NL.xlf b/translations/nl-NL/ModulesMboLinks.nl-NL.xlf index e51830299..028577ed9 100644 --- a/translations/nl-NL/ModulesMboLinks.nl-NL.xlf +++ b/translations/nl-NL/ModulesMboLinks.nl-NL.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/nl-NL/ModulesMboModulescatalog.nl-NL.xlf b/translations/nl-NL/ModulesMboModulescatalog.nl-NL.xlf index a15f9a6c2..fc88447eb 100644 --- a/translations/nl-NL/ModulesMboModulescatalog.nl-NL.xlf +++ b/translations/nl-NL/ModulesMboModulescatalog.nl-NL.xlf @@ -2,11 +2,6 @@ - - Upload a module - Upload een module - Line: 96 - Synchronized with Addons marketplace! Gesynchroniseerd met Addons! @@ -51,8 +46,27 @@ - + + + + Discover + Ontdek + Line: 31 + + + Toggle Dropdown + Menu in-/uitklappen + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Koppel uw winkel aan uw Addons-account om automatisch belangrijke updates te ontvangen voor de modules die u hebt gekocht. Hebt u nog geen account? + Line: 42 + Sign up now Nu aanmelden @@ -65,4 +79,71 @@ + + + + Upload a module + Upload een module + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Sleep uw modulebestand hier naartoe of [1]selecteer bestand[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Upload slechts 1 bestand per keer, .zip- of tarball-formaat (.tar, .tar.gz of .tgz). + Line: 48 + + + Your module will be installed right after that. + Uw module wordt daarna gelijk geïnstalleerd. + Line: 49 + + + Installing module... + Module installeren... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Het wordt gesloten zodra de module is geïnstalleerd. Het zal niet lang duren! + Line: 57 + + + Module installed! + Module geïnstalleerd! + Line: 62 + + + Oops... Upload failed. + Oeps... uploaden niet gelukt. + Line: 68 + + + What happened? + Wat is er gebeurd? + Line: 69 + + + + + + + Read More + Lees meer + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Ontdek de bestverkopende modules van deze categorie op de %link% pagina. + Line: 19 + + + diff --git a/translations/nl-NL/ModulesMboPsmbo.nl-NL.xlf b/translations/nl-NL/ModulesMboPsmbo.nl-NL.xlf deleted file mode 100644 index ffbfb65c1..000000000 --- a/translations/nl-NL/ModulesMboPsmbo.nl-NL.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - Voor een nog betere beveiliging op uw contact formulieren, bekijken onze beveiliging en toegangs modules categorie via de - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - PrestaShop Addons Marketplace - Line: 140 - - - Discover more modules to improve your shop on - Ontdek meer modules om uw winkel te verbeteren op - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/nl-NL/ModulesMboSearch.nl-NL.xlf b/translations/nl-NL/ModulesMboSearch.nl-NL.xlf index 3db04f41e..96b6a1141 100644 --- a/translations/nl-NL/ModulesMboSearch.nl-NL.xlf +++ b/translations/nl-NL/ModulesMboSearch.nl-NL.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Doorzoek addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Ga naar Addons - Line: 52 + Line: 59 diff --git a/translations/pl-PL/ModulesMboAddons.pl-PL.xlf b/translations/pl-PL/ModulesMboAddons.pl-PL.xlf index 6d5354da4..6c80185e3 100644 --- a/translations/pl-PL/ModulesMboAddons.pl-PL.xlf +++ b/translations/pl-PL/ModulesMboAddons.pl-PL.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Połącz z Addons marketplace - Line: 127 + Line: 24 - - - - Confirm logout Potwierdź wylogowanie diff --git a/translations/pl-PL/ModulesMboErrors.pl-PL.xlf b/translations/pl-PL/ModulesMboErrors.pl-PL.xlf index fefd53672..47812ca9b 100644 --- a/translations/pl-PL/ModulesMboErrors.pl-PL.xlf +++ b/translations/pl-PL/ModulesMboErrors.pl-PL.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/pl-PL/ModulesMboGlobal.pl-PL.xlf b/translations/pl-PL/ModulesMboGlobal.pl-PL.xlf index 3b76cc78e..9a0d151bb 100644 --- a/translations/pl-PL/ModulesMboGlobal.pl-PL.xlf +++ b/translations/pl-PL/ModulesMboGlobal.pl-PL.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office PrestaShop Marketplace w Twoim Back Office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Skonsultuj się z rynkiem PrestaShop bezpośrednio ze swojego back-office, aby jak najlepiej dostosować się do Twoich potrzeb. - Line: 117 + Line: 120 + + + + + + + + + Line: 124 + + + PrestaShop Addons Marketplace + PrestaShop Addons Marketplace + Line: 140 + + + Discover more modules to improve your shop on + Odkryj więcej modułów usprawniających Twój sklep na + Line: 138 + + + + + + + Oh no.. something went wrong + O nie... coś poszło nie tak + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Po naszej stronie wystąpił problem. Odśwież stronę, a jeśli problem będzie się powtarzał, spróbuj ponownie później. + Line: 8 + + + Refresh page + Odśwież stronę + Line: 13 diff --git a/translations/pl-PL/ModulesMboLinks.pl-PL.xlf b/translations/pl-PL/ModulesMboLinks.pl-PL.xlf index 2afe8a9c1..c00ef4982 100644 --- a/translations/pl-PL/ModulesMboLinks.pl-PL.xlf +++ b/translations/pl-PL/ModulesMboLinks.pl-PL.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/pl-PL/ModulesMboModulescatalog.pl-PL.xlf b/translations/pl-PL/ModulesMboModulescatalog.pl-PL.xlf index c5584e4b4..05314002f 100644 --- a/translations/pl-PL/ModulesMboModulescatalog.pl-PL.xlf +++ b/translations/pl-PL/ModulesMboModulescatalog.pl-PL.xlf @@ -2,11 +2,6 @@ - - Upload a module - Załaduj moduł - Line: 96 - Synchronized with Addons marketplace! Zsynchronizowane z Addons marketplace! @@ -51,8 +46,27 @@ - + + + + Discover + Odkryj + Line: 31 + + + Toggle Dropdown + Rozwiń menu + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Połącz swój sklep z kontem Addons, aby automatycznie otrzymywać ważne aktualizacje do zakupionych modułów. Nie masz jeszcze konta? + Line: 42 + Sign up now Zarejestruj się teraz @@ -65,4 +79,71 @@ + + + + Upload a module + Załaduj moduł + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Upuść archiwum modułu tutaj lub [1]wybierz plik[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Proszę przesłać jeden plik na raz, .zip lub archiwum w formacie (.tar, .tar.gz lub .tgz). + Line: 48 + + + Your module will be installed right after that. + Twój moduł zostanie zainstalowany tuż po tym. + Line: 49 + + + Installing module... + Instalowanie modułu... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Zostanie zamknięty natychmiast po zainstalowaniu modułu. To nie potrwa długo! + Line: 57 + + + Module installed! + Moduł zainstalowany! + Line: 62 + + + Oops... Upload failed. + Ups... Przesyłanie nie powiodło się. + Line: 68 + + + What happened? + Co się stało? + Line: 69 + + + + + + + Read More + Czytaj więcej + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Zobacz najlepiej sprzedające się moduły tej kategorii na stronie %link%. + Line: 19 + + + diff --git a/translations/pl-PL/ModulesMboPsmbo.pl-PL.xlf b/translations/pl-PL/ModulesMboPsmbo.pl-PL.xlf deleted file mode 100644 index 4d56321d5..000000000 --- a/translations/pl-PL/ModulesMboPsmbo.pl-PL.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - PrestaShop Addons Marketplace - Line: 140 - - - Discover more modules to improve your shop on - Odkryj więcej modułów usprawniających Twój sklep na - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/pl-PL/ModulesMboSearch.pl-PL.xlf b/translations/pl-PL/ModulesMboSearch.pl-PL.xlf index fb5e410db..ccc336433 100644 --- a/translations/pl-PL/ModulesMboSearch.pl-PL.xlf +++ b/translations/pl-PL/ModulesMboSearch.pl-PL.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Szukaj addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Idź do Addons - Line: 52 + Line: 59 diff --git a/translations/pt-PT/ModulesMboAddons.pt-PT.xlf b/translations/pt-PT/ModulesMboAddons.pt-PT.xlf index 5402edc41..75e7aa06f 100644 --- a/translations/pt-PT/ModulesMboAddons.pt-PT.xlf +++ b/translations/pt-PT/ModulesMboAddons.pt-PT.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Ligar com o Addons Marketplace - Line: 127 + Line: 24 - - - - Confirm logout Confirmar encerramento de sessão diff --git a/translations/pt-PT/ModulesMboErrors.pt-PT.xlf b/translations/pt-PT/ModulesMboErrors.pt-PT.xlf index 6129e7b2a..1b28f0c87 100644 --- a/translations/pt-PT/ModulesMboErrors.pt-PT.xlf +++ b/translations/pt-PT/ModulesMboErrors.pt-PT.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/pt-PT/ModulesMboGlobal.pt-PT.xlf b/translations/pt-PT/ModulesMboGlobal.pt-PT.xlf index 59ae5316e..909661a73 100644 --- a/translations/pt-PT/ModulesMboGlobal.pt-PT.xlf +++ b/translations/pt-PT/ModulesMboGlobal.pt-PT.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office PrestaShop Marketplace no seu Back Office - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Consulta o mercado PrestaShop directamente do seu back-office para melhor se adequar às suas necessidades. - Line: 117 + Line: 120 + + + + + + + + + Line: 124 + + + PrestaShop Addons Marketplace + Mercado de extensões do Prestashop + Line: 140 + + + Discover more modules to improve your shop on + Descubra mais módulos para melhorar a sua loja em + Line: 138 + + + + + + + Oh no.. something went wrong + Oh não... algo correu mal + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Houve um problema em nosso lado. Atualize sua página e, se o problema persistir, tente novamente mais tarde. + Line: 8 + + + Refresh page + Atualizar página + Line: 13 diff --git a/translations/pt-PT/ModulesMboLinks.pt-PT.xlf b/translations/pt-PT/ModulesMboLinks.pt-PT.xlf index 7e8c5b6ac..fcf48ecd5 100644 --- a/translations/pt-PT/ModulesMboLinks.pt-PT.xlf +++ b/translations/pt-PT/ModulesMboLinks.pt-PT.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/pt-PT/ModulesMboModulescatalog.pt-PT.xlf b/translations/pt-PT/ModulesMboModulescatalog.pt-PT.xlf index 1a61c5816..d3b2feae6 100644 --- a/translations/pt-PT/ModulesMboModulescatalog.pt-PT.xlf +++ b/translations/pt-PT/ModulesMboModulescatalog.pt-PT.xlf @@ -2,11 +2,6 @@ - - Upload a module - Enviar um módulo - Line: 96 - Synchronized with Addons marketplace! Sincronizado com o Addons Marketplace! @@ -51,8 +46,27 @@ - + + + + Discover + Descobrir + Line: 31 + + + Toggle Dropdown + Alternar o menu pendente + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Ligue a sua loja à sua conta Addons para receber automaticamente atualizações importantes para os módulos que adquiriu. Ainda não tem uma conta? + Line: 42 + Sign up now Registar-se agora @@ -65,4 +79,71 @@ + + + + Upload a module + Enviar um módulo + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Arraste o arquivo do seu módulo para aqui ou [1]selecione um ficheiro[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Carregue um ficheiro de cada vez, formato .zip ou tarball (.tar, .tar.gz ou .tgz). + Line: 48 + + + Your module will be installed right after that. + O seu módulo será instalado logo depois. + Line: 49 + + + Installing module... + A instalar módulo... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Fechar-se-á assim que o módulo seja instalado. Falta pouco! + Line: 57 + + + Module installed! + Módulo instalado! + Line: 62 + + + Oops... Upload failed. + Oops... a atualização falhou. + Line: 68 + + + What happened? + O que aconteceu? + Line: 69 + + + + + + + Read More + Obter mais informações + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Descubra os módulos mais vendidos desta categoria na página %link%. + Line: 19 + + + diff --git a/translations/pt-PT/ModulesMboPsmbo.pt-PT.xlf b/translations/pt-PT/ModulesMboPsmbo.pt-PT.xlf deleted file mode 100644 index 1024a0e15..000000000 --- a/translations/pt-PT/ModulesMboPsmbo.pt-PT.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - Mercado de extensões do Prestashop - Line: 140 - - - Discover more modules to improve your shop on - Descubra mais módulos para melhorar a sua loja em - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/pt-PT/ModulesMboSearch.pt-PT.xlf b/translations/pt-PT/ModulesMboSearch.pt-PT.xlf index 7cbff4e27..ace59d8b2 100644 --- a/translations/pt-PT/ModulesMboSearch.pt-PT.xlf +++ b/translations/pt-PT/ModulesMboSearch.pt-PT.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Pesquisar em addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Ver os «Addons» - Line: 52 + Line: 59 diff --git a/translations/ru-RU/ModulesMboAddons.ru-RU.xlf b/translations/ru-RU/ModulesMboAddons.ru-RU.xlf index e9babb5db..2c88df8a8 100644 --- a/translations/ru-RU/ModulesMboAddons.ru-RU.xlf +++ b/translations/ru-RU/ModulesMboAddons.ru-RU.xlf @@ -1,16 +1,12 @@ - + Connect to Addons marketplace Подключиться к магазину расширений - Line: 127 + Line: 24 - - - - Confirm logout Подтвердить выход diff --git a/translations/ru-RU/ModulesMboErrors.ru-RU.xlf b/translations/ru-RU/ModulesMboErrors.ru-RU.xlf index 61feca730..80bb986d4 100644 --- a/translations/ru-RU/ModulesMboErrors.ru-RU.xlf +++ b/translations/ru-RU/ModulesMboErrors.ru-RU.xlf @@ -9,7 +9,7 @@ - + It looks like we have trouble connecting to Addons. Please refresh the page or check your firewall configuration. diff --git a/translations/ru-RU/ModulesMboGlobal.ru-RU.xlf b/translations/ru-RU/ModulesMboGlobal.ru-RU.xlf index 7150d3a88..ee4c11d3c 100644 --- a/translations/ru-RU/ModulesMboGlobal.ru-RU.xlf +++ b/translations/ru-RU/ModulesMboGlobal.ru-RU.xlf @@ -5,12 +5,50 @@ PrestaShop Marketplace in your Back Office Торговая площадка PrestaShop в вашем бэк-офисе - Line: 116 + Line: 119 Browse the Addons marketplace directly from your back office to better meet your needs. Просматривайте торговую площадку PrestaShop прямо из своего бэк-офиса, чтобы наилучшим образом удовлетворить свои потребности. - Line: 117 + Line: 120 + + + + + + + + + Line: 124 + + + PrestaShop Addons Marketplace + Магазин расширений PrestaShop Addons + Line: 140 + + + Discover more modules to improve your shop on + Узнайте больше модулей для улучшения работы вашего магазина на + Line: 138 + + + + + + + Oh no.. something went wrong + О нет! Что-то пошло не так + Line: 5 + + + There has been a problem on our side. Refresh your page and if the problem persists, try again later. + Возникла проблема с нашей стороной. Обновите страницу, и если проблема не устранена, попробуйте позже. + Line: 8 + + + Refresh page + Обновить страницу + Line: 13 diff --git a/translations/ru-RU/ModulesMboLinks.ru-RU.xlf b/translations/ru-RU/ModulesMboLinks.ru-RU.xlf index 65ef87a46..a84a1971d 100644 --- a/translations/ru-RU/ModulesMboLinks.ru-RU.xlf +++ b/translations/ru-RU/ModulesMboLinks.ru-RU.xlf @@ -14,4 +14,23 @@ + + + + + + Line: 125 + + + + + Line: 132 + + + + + Line: 139 + + + diff --git a/translations/ru-RU/ModulesMboModulescatalog.ru-RU.xlf b/translations/ru-RU/ModulesMboModulescatalog.ru-RU.xlf index 7cdb93bd0..ca014c6c5 100644 --- a/translations/ru-RU/ModulesMboModulescatalog.ru-RU.xlf +++ b/translations/ru-RU/ModulesMboModulescatalog.ru-RU.xlf @@ -2,11 +2,6 @@ - - Upload a module - Загрузить модуль - Line: 96 - Synchronized with Addons marketplace! Синхронизировано с магазином Расширений! @@ -51,8 +46,27 @@ - + + + + Discover + Обзор + Line: 31 + + + Toggle Dropdown + Вкл/Выкл выпадающий список + Line: 47 + + + + + + Link your shop to your Addons account to automatically receive important updates for the modules you purchased. Don't have an account yet? + Свяжите ваш магазин с вашей учётной записью магазина расширений, чтобы автоматически получать важные обновления для приобретенных вами модулей. У вас ещё нет учетной записи? + Line: 42 + Sign up now Зарегистрироваться @@ -65,4 +79,71 @@ + + + + Upload a module + Загрузить модуль + Line: 24 + + + Drop your module archive here or [1]select file[/1] + Бросьте архив с модулем здесь или [1]выберите файл[/1] + Line: 45 + + + Please upload one file at a time, .zip or tarball format (.tar, .tar.gz or .tgz). + Пожалуйста, загружайте один файл за раз, в формате .zip или .tar, .tar.gz, .tgz + Line: 48 + + + Your module will be installed right after that. + Сразу после этого ваш модуль будет установлен. + Line: 49 + + + Installing module... + Установка модуля... + Line: 55 + + + It will close as soon as the module is installed. It won't be long! + Будет закрыто как только модуль установится. Это не потребует много времени! + Line: 57 + + + Module installed! + Модуль установлен! + Line: 62 + + + Oops... Upload failed. + Ой... Загрузка прервалась. + Line: 68 + + + What happened? + Что случилось? + Line: 69 + + + + + + + Read More + Подробнее + Line: 24 + + + + + + + Discover the best-selling modules of this category in the %link% page. + Откройте самые продаваемые модули этой категории на странице %link%. + Line: 19 + + + diff --git a/translations/ru-RU/ModulesMboPsmbo.ru-RU.xlf b/translations/ru-RU/ModulesMboPsmbo.ru-RU.xlf deleted file mode 100644 index 83ae75fbb..000000000 --- a/translations/ru-RU/ModulesMboPsmbo.ru-RU.xlf +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - Line: 124 - - - - - Line: 125 - - - PrestaShop Addons Marketplace - Магазин расширений PrestaShop Addons - Line: 140 - - - Discover more modules to improve your shop on - Узнайте больше модулей для улучшения работы вашего магазина на - Line: 138 - - - - - Line: 132 - - - - - Line: 139 - - - - diff --git a/translations/ru-RU/ModulesMboSearch.ru-RU.xlf b/translations/ru-RU/ModulesMboSearch.ru-RU.xlf index 51cecc740..f9dacc6bd 100644 --- a/translations/ru-RU/ModulesMboSearch.ru-RU.xlf +++ b/translations/ru-RU/ModulesMboSearch.ru-RU.xlf @@ -5,12 +5,12 @@ Search addons.prestashop.com Поиск на addons.prestashop.com - Line: 51 + Line: 58 Go to Addons Перейти к дополнениям - Line: 52 + Line: 59 From 750bb94e49329e7c903cc9e70e82a1855dba2604 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Fri, 18 Nov 2022 15:40:54 +0000 Subject: [PATCH 43/48] Remove logger from AuthorizationChecker --- config/services/security.yml | 1 - src/Api/Security/AuthorizationChecker.php | 8 -------- 2 files changed, 9 deletions(-) diff --git a/config/services/security.yml b/config/services/security.yml index 704b6cbfc..96f886412 100644 --- a/config/services/security.yml +++ b/config/services/security.yml @@ -17,7 +17,6 @@ services: - '@doctrine.cache.provider' - '@mbo.cdc.client.distribution_api' - '@mbo.security.admin_authentication.provider' - - '@logger' mbo.security.permission_checker: class: PrestaShop\Module\Mbo\Security\PermissionChecker diff --git a/src/Api/Security/AuthorizationChecker.php b/src/Api/Security/AuthorizationChecker.php index 96cb77ca4..d693218af 100644 --- a/src/Api/Security/AuthorizationChecker.php +++ b/src/Api/Security/AuthorizationChecker.php @@ -27,7 +27,6 @@ use PrestaShop\Module\Mbo\Api\Exception\UnauthorizedException; use PrestaShop\Module\Mbo\Distribution\Client; use PrestaShop\Module\Mbo\Helpers\Config; -use Psr\Log\LoggerInterface; class AuthorizationChecker { @@ -56,21 +55,14 @@ class AuthorizationChecker */ private $keyCacheIndex; - /** - * @var LoggerInterface - */ - private $logger; - public function __construct( CacheProvider $cacheProvider, Client $distributionClient, AdminAuthenticationProvider $adminAuthenticationProvider, - LoggerInterface $logger ) { $this->cacheProvider = $cacheProvider; $this->distributionClient = $distributionClient; $this->adminAuthenticationProvider = $adminAuthenticationProvider; - $this->logger = $logger; $shopUuid = Config::getShopMboUuid(); $this->keyVersionCacheIndex = 'api_key_version_' . $shopUuid; From b21403104c170b3e5fe72d0670f856acb65fd05a Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Fri, 18 Nov 2022 15:50:45 +0000 Subject: [PATCH 44/48] fix --- src/Api/Security/AuthorizationChecker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Security/AuthorizationChecker.php b/src/Api/Security/AuthorizationChecker.php index d693218af..ebce46b39 100644 --- a/src/Api/Security/AuthorizationChecker.php +++ b/src/Api/Security/AuthorizationChecker.php @@ -58,7 +58,7 @@ class AuthorizationChecker public function __construct( CacheProvider $cacheProvider, Client $distributionClient, - AdminAuthenticationProvider $adminAuthenticationProvider, + AdminAuthenticationProvider $adminAuthenticationProvider ) { $this->cacheProvider = $cacheProvider; $this->distributionClient = $distributionClient; From fad7d8ff7236bcb26f41d546394e838432b05daa Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Mon, 21 Nov 2022 09:17:15 +0000 Subject: [PATCH 45/48] Ignore apply config when table is missing --- src/Distribution/Config/Factory.php | 32 +++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Distribution/Config/Factory.php b/src/Distribution/Config/Factory.php index 681845d51..04d4a1483 100644 --- a/src/Distribution/Config/Factory.php +++ b/src/Distribution/Config/Factory.php @@ -121,19 +121,25 @@ private function buildConfigCollection(array $config): array */ public function getCollectionFromDB(): array { - $query = 'SELECT - `id_mbo_api_config`, - `config_key`, - `config_value`, - `ps_version`, - `mbo_version`, - `applied` - FROM ' . _DB_PREFIX_ . 'mbo_api_config'; - - /** @var array $results */ - $results = $this->db->executeS($query); - - return $this->buildConfigCollection($results); + $collection = []; + + if (count(Db::getInstance()->executeS('SHOW TABLES LIKE \'' . _DB_PREFIX_ . 'mbo_api_config\' '))) { //check if table exist + $query = 'SELECT + `id_mbo_api_config`, + `config_key`, + `config_value`, + `ps_version`, + `mbo_version`, + `applied` + FROM ' . _DB_PREFIX_ . 'mbo_api_config'; + + /** @var array $results */ + $results = $this->db->executeS($query); + + $collection = $this->buildConfigCollection($results); + } + + return $collection; } private function cleanConfig(): void From 973a91698541203a46ffc485d9f60cabf9b87f17 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Mon, 21 Nov 2022 09:33:55 +0000 Subject: [PATCH 46/48] Debug --- src/Distribution/Config/Factory.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Distribution/Config/Factory.php b/src/Distribution/Config/Factory.php index 04d4a1483..60e915abe 100644 --- a/src/Distribution/Config/Factory.php +++ b/src/Distribution/Config/Factory.php @@ -136,6 +136,10 @@ public function getCollectionFromDB(): array /** @var array $results */ $results = $this->db->executeS($query); + if (!is_array($results)) { + throw new PrestaShopDatabaseException(sprintf('Retrieving config from DB returns a non array : %s. Query was : %s', gettype($results), $query)); + } + $collection = $this->buildConfigCollection($results); } From 7d81ba238aa3c3fac21e2f44f0a894c95a07a1da Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 22 Nov 2022 09:02:40 +0000 Subject: [PATCH 47/48] CDC error management : Reload page --- .../admin/controllers/module_catalog/cdc-error.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/templates/admin/controllers/module_catalog/cdc-error.html.twig b/views/templates/admin/controllers/module_catalog/cdc-error.html.twig index 7fb01f7fd..da6cbdc42 100644 --- a/views/templates/admin/controllers/module_catalog/cdc-error.html.twig +++ b/views/templates/admin/controllers/module_catalog/cdc-error.html.twig @@ -9,7 +9,7 @@

-
From c0c62c6456fac66fb1a09e5e6ed10cda325abad2 Mon Sep 17 00:00:00 2001 From: Ibrahima SOW Date: Tue, 22 Nov 2022 09:53:54 +0000 Subject: [PATCH 48/48] Clear the cache after download to force reload module services --- src/Api/Service/ModuleTransitionExecutor.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Api/Service/ModuleTransitionExecutor.php b/src/Api/Service/ModuleTransitionExecutor.php index 2cb69e8ac..a3759c8bb 100644 --- a/src/Api/Service/ModuleTransitionExecutor.php +++ b/src/Api/Service/ModuleTransitionExecutor.php @@ -2,9 +2,11 @@ namespace PrestaShop\Module\Mbo\Api\Service; +use http\Exception\InvalidArgumentException; use PrestaShop\Module\Mbo\Api\Exception\QueryParamsException; use PrestaShop\Module\Mbo\Module\Command\ModuleStatusTransitionCommand; use PrestaShop\Module\Mbo\Module\CommandHandler\ModuleStatusTransitionCommandHandler; +use PrestaShop\Module\Mbo\Module\ValueObject\ModuleTransitionCommand; use Tools; class ModuleTransitionExecutor implements ServiceExecutorInterface @@ -34,6 +36,12 @@ public function canExecute(string $service): bool */ public function execute(...$parameters): array { + if (!$parameters[0] instanceof \Module) { + throw new InvalidArgumentException(); + } + + $psMbo = $parameters[0]; + $transition = Tools::getValue('action'); $moduleName = Tools::getValue('module'); $source = Tools::getValue('source', null); @@ -49,6 +57,11 @@ public function execute(...$parameters): array $moduleUrls = $module->get('urls'); $configUrl = (bool) $module->get('is_configurable') && isset($moduleUrls['configure']) ? $this->generateTokenizedModuleActionUrl($moduleUrls['configure']) : null; + if (ModuleTransitionCommand::MODULE_COMMAND_DOWNLOAD === $transition) { + // Clear the cache after download to force reload module services + $psMbo->get('prestashop.adapter.cache.clearer.symfony_cache_clearer')->clear(); + } + return [ 'message' => 'Transition successfully executed', 'module_status' => $module->getStatus(),