From 6892c55151aabb2615f353060119d4fe84c5775f Mon Sep 17 00:00:00 2001 From: Bushra Asif Date: Wed, 1 Oct 2025 10:26:02 +0500 Subject: [PATCH 1/6] Add support for Checkout Design v2. --- CHANGELOG.md | 4 + altapay.php | 12 +- composer.lock | 520 ++++++++++++------ config.xml | 2 +- controllers/front/callbackform.php | 2 + helpers.php | 24 +- views/css/payment.css | 356 ++++++++---- views/templates/front/cart_info17.tpl | 4 +- views/templates/front/payment_form.tpl | 4 +- views/templates/front/payment_form17.tpl | 4 +- views/templates/front/paymentform_atmovic.tpl | 4 +- 11 files changed, 643 insertions(+), 293 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 663a8a84..76bb97f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ PrestaShop 1.6.x, 1.7.x and 8.x # Changelog +## [4.0.2] +### Added +- Add support for Checkout Design v2. + ## [4.0.1] ### Fixed - Triggered order update when saving missing transaction data. diff --git a/altapay.php b/altapay.php index 1ce095bc..89bf0107 100644 --- a/altapay.php +++ b/altapay.php @@ -32,7 +32,7 @@ public function __construct() { $this->name = 'altapay'; $this->tab = 'payments_gateways'; - $this->version = '4.0.1'; + $this->version = '4.0.2'; $this->author = 'AltaPay A/S'; $this->is_eu_compatible = 1; $this->ps_versions_compliancy = ['min' => '1.6.0.1', 'max' => '8.2.3']; @@ -1747,6 +1747,10 @@ public function renderForm() 'id_option' => 'checkout-cc', 'name' => 'Checkout', ], + [ + 'id_option' => 'checkout-v2', + 'name' => 'Checkout v2', + ], [ 'id_option' => 'custom-cc', 'name' => 'Custom', @@ -3202,6 +3206,12 @@ public function createTransaction($savecard, if (!$isReservation) { $request->setConfig($config)->setLanguage($cgConf['language']); + if (!$terminal->applepay) { + $formTemplate = getFormTemplate(); + if (!empty($formTemplate)) { + $request->setFormTemplate($formTemplate); + } + } } try { $response = $request->call(); diff --git a/composer.lock b/composer.lock index ed38ba98..6c46642b 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "altapay/api-php", - "version": "3.4.1", + "version": "3.5.4", "source": { "type": "git", "url": "https://github.com/AltaPay/api-php.git", - "reference": "19dc981a5ff66644217d2d6967aeb71c1dbf20bf" + "reference": "6fd4457ebb66a83c0995ad86764db40207ad5f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AltaPay/api-php/zipball/19dc981a5ff66644217d2d6967aeb71c1dbf20bf", - "reference": "19dc981a5ff66644217d2d6967aeb71c1dbf20bf", + "url": "https://api.github.com/repos/AltaPay/api-php/zipball/6fd4457ebb66a83c0995ad86764db40207ad5f53", + "reference": "6fd4457ebb66a83c0995ad86764db40207ad5f53", "shasum": "" }, "require": { @@ -29,14 +29,14 @@ "ext-simplexml": "*", "ext-spl": "*", "guzzlehttp/guzzle": "^6.0 || ^7.0", - "php": "^5.6 || ^7.0 || ^8.0", - "symfony/event-dispatcher": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "php": "^7.0 || ^8.0", + "symfony/event-dispatcher": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.0", "fzaninotto/faker": "^1.6", - "phpstan/phpstan": "^1.8", + "phpstan/phpstan": "^2.1", "phpstan/phpstan-phpunit": "*", "phpstan/phpstan-strict-rules": "*", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" @@ -56,7 +56,11 @@ "altapay", "payment" ], - "time": "2024-07-09T09:31:13+00:00" + "support": { + "issues": "https://github.com/AltaPay/api-php/issues", + "source": "https://github.com/AltaPay/api-php/tree/3.5.4" + }, + "time": "2025-09-15T05:02:36+00:00" }, { "name": "composer/package-versions-deprecated", @@ -111,6 +115,10 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, "funding": [ { "url": "https://packagist.com", @@ -129,22 +137,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.1", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "a629e5b69db96eb4939c1b34114130077dd4c6fc" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a629e5b69db96eb4939c1b34114130077dd4c6fc", - "reference": "a629e5b69db96eb4939c1b34114130077dd4c6fc", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -233,6 +241,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -247,20 +259,20 @@ "type": "tidelift" } ], - "time": "2024-07-19T16:19:57+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.3", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -268,7 +280,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -312,6 +324,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -326,20 +342,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T10:29:17+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -355,7 +371,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -424,6 +440,10 @@ "uri", "url" ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.8.0" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -438,7 +458,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2025-08-23T21:21:41+00:00" }, { "name": "humbug/php-scoper", @@ -463,9 +483,6 @@ "symfony/filesystem": "^3.2 || ^4.0", "symfony/finder": "^3.2 || ^4.0" }, - "replace": { - "humbug/php-scoper": "self.version" - }, "require-dev": { "bamarni/composer-bin-plugin": "^1.1", "humbug/box": "^3.8", @@ -511,6 +528,10 @@ } ], "description": "Prefixes all PHP namespaces in a file or directory.", + "support": { + "issues": "https://github.com/humbug/php-scoper/issues", + "source": "https://github.com/humbug/php-scoper/tree/0.13.9" + }, "funding": [ { "url": "https://github.com/theofidry", @@ -525,20 +546,21 @@ "source": { "type": "git", "url": "https://github.com/JetBrains/phpstorm-stubs.git", - "reference": "b164b0230c777c0c0673696f2a9a9d7ac0f4a946" + "reference": "d1ee5e570343bd4276a3d5959e6e1c2530b006d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/b164b0230c777c0c0673696f2a9a9d7ac0f4a946", - "reference": "b164b0230c777c0c0673696f2a9a9d7ac0f4a946", + "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/d1ee5e570343bd4276a3d5959e6e1c2530b006d0", + "reference": "d1ee5e570343bd4276a3d5959e6e1c2530b006d0", "shasum": "" }, "require-dev": { - "friendsofphp/php-cs-fixer": "v3.46.0", - "nikic/php-parser": "v5.0.0", - "phpdocumentor/reflection-docblock": "5.3.0", - "phpunit/phpunit": "10.5.5" + "friendsofphp/php-cs-fixer": "^v3.86", + "nikic/php-parser": "^v5.6", + "phpdocumentor/reflection-docblock": "^5.6", + "phpunit/phpunit": "^12.3" }, + "default-branch": true, "type": "library", "autoload": { "files": [ @@ -561,7 +583,10 @@ "stubs", "type" ], - "time": "2024-07-09T19:51:36+00:00" + "support": { + "source": "https://github.com/JetBrains/phpstorm-stubs/tree/master" + }, + "time": "2025-09-20T07:44:45+00:00" }, { "name": "nikic/php-parser", @@ -569,12 +594,12 @@ "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4d36e9c16f4820c2ed9360bc818982f3c02a08f5" + "reference": "c95b500f87e5fa2e598228e958667136125e0f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4d36e9c16f4820c2ed9360bc818982f3c02a08f5", - "reference": "4d36e9c16f4820c2ed9360bc818982f3c02a08f5", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c95b500f87e5fa2e598228e958667136125e0f5f", + "reference": "c95b500f87e5fa2e598228e958667136125e0f5f", "shasum": "" }, "require": { @@ -583,17 +608,12 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -613,7 +633,11 @@ "parser", "php" ], - "time": "2024-03-17T09:03:35+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/4.x" + }, + "time": "2025-08-13T12:16:18+00:00" }, { "name": "psr/container", @@ -657,6 +681,10 @@ "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" }, { @@ -706,6 +734,9 @@ "psr", "psr-18" ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, "time": "2023-09-23T14:17:50+00:00" }, { @@ -758,6 +789,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, "time": "2024-04-15T12:06:14+00:00" }, { @@ -808,6 +842,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, "time": "2023-04-04T09:54:51+00:00" }, { @@ -848,6 +885,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { @@ -921,6 +962,9 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v4.4.49" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -939,16 +983,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "80d075412b557d41002320b96a096ca65aa2c98d" + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d", - "reference": "80d075412b557d41002320b96a096ca65aa2c98d", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", "shasum": "" }, "require": { @@ -956,12 +1000,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -985,6 +1029,9 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -999,7 +1046,7 @@ "type": "tidelift" } ], - "time": "2023-01-24T14:02:46+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher", @@ -1065,6 +1112,9 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.18" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1104,12 +1154,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1141,6 +1191,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.10.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1201,6 +1254,9 @@ ], "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v4.4.42" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1260,6 +1316,9 @@ ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.44" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1323,6 +1382,9 @@ "configuration", "options" ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1341,20 +1403,20 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.30.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1365,8 +1427,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1399,6 +1461,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1408,29 +1473,34 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1441,8 +1511,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1476,6 +1546,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1485,35 +1558,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.30.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1549,6 +1626,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1558,35 +1638,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.30.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1626,6 +1710,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1635,25 +1722,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3" + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3", - "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { @@ -1669,12 +1760,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1706,6 +1797,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1720,7 +1814,7 @@ "type": "tidelift" } ], - "time": "2023-04-21T15:04:16+00:00" + "time": "2024-09-25T14:11:13+00:00" } ], "packages-dev": [ @@ -1775,6 +1869,10 @@ "regex", "regular expression" ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/1.0.1" + }, "funding": [ { "url": "https://packagist.com", @@ -1793,24 +1891,24 @@ }, { "name": "composer/semver", - "version": "3.4.2", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -1851,6 +1949,11 @@ "validation", "versioning" ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, "funding": [ { "url": "https://packagist.com", @@ -1859,13 +1962,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -1912,6 +2011,11 @@ "Xdebug", "performance" ], + "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.5" + }, "funding": [ { "url": "https://packagist.com", @@ -1930,16 +2034,16 @@ }, { "name": "doctrine/annotations", - "version": "1.14.3", + "version": "1.14.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "shasum": "" }, "require": { @@ -1950,11 +2054,11 @@ }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "~1.4.10 || ^1.10.28", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" }, "suggest": { "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" @@ -1998,33 +2102,38 @@ "docblock", "parser" ], - "time": "2023-02-01T09:20:38+00:00" + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.4" + }, + "time": "2024-09-05T10:15:52+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -2032,7 +2141,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2041,7 +2150,11 @@ ], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", - "time": "2024-01-30T19:34:25+00:00" + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/lexer", @@ -2101,6 +2214,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.1" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -2214,6 +2331,10 @@ } ], "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" + }, "funding": [ { "url": "https://github.com/keradus", @@ -2271,6 +2392,10 @@ "keywords": [ "diff" ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" + }, "abandoned": true, "time": "2020-10-14T08:39:05+00:00" }, @@ -2314,6 +2439,10 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/0.12.100" + }, "funding": [ { "url": "https://github.com/ondrejmirtes", @@ -2375,20 +2504,23 @@ ], "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": "prestashop/header-stamp", - "version": "v2.3", + "version": "v2.6", "source": { "type": "git", "url": "https://github.com/PrestaShopCorp/header-stamp.git", - "reference": "3104b69ad73b6039c7082dbba4af9dbeb0b936b3" + "reference": "7f09cd041bbf1fa56bd71ae91bab3919da88b6ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/3104b69ad73b6039c7082dbba4af9dbeb0b936b3", - "reference": "3104b69ad73b6039c7082dbba4af9dbeb0b936b3", + "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/7f09cd041bbf1fa56bd71ae91bab3919da88b6ac", + "reference": "7f09cd041bbf1fa56bd71ae91bab3919da88b6ac", "shasum": "" }, "require": { @@ -2398,7 +2530,7 @@ "symfony/finder": "^3.4 || ~4.0 || ~5.0 || ~6.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.83", + "phpstan/phpstan": "^1.12", "prestashop/php-dev-tools": "1.*" }, "bin": [ @@ -2422,7 +2554,11 @@ ], "description": "Rewrite your file headers to add the license or to make them up-to-date", "homepage": "https://github.com/PrestaShopCorp/header-stamp", - "time": "2023-03-23T14:44:10+00:00" + "support": { + "issues": "https://github.com/PrestaShopCorp/header-stamp/issues", + "source": "https://github.com/PrestaShopCorp/header-stamp/tree/v2.6" + }, + "time": "2025-02-05T08:44:26+00:00" }, { "name": "prestashop/php-dev-tools", @@ -2464,6 +2600,10 @@ "MIT" ], "description": "PrestaShop coding standards", + "support": { + "issues": "https://github.com/PrestaShop/php-dev-tools/issues", + "source": "https://github.com/PrestaShop/php-dev-tools/tree/v4.1.0" + }, "time": "2021-06-17T14:24:59+00:00" }, { @@ -2510,6 +2650,9 @@ "psr", "psr-6" ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, "time": "2016-08-06T20:24:11+00:00" }, { @@ -2557,20 +2700,23 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, "time": "2021-05-03T11:20:27+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.2", + "version": "3.13.4", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" + "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ad545ea9c1b7d270ce0fc9cbfb884161cd706119", + "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119", "shasum": "" }, "require": { @@ -2617,6 +2763,12 @@ "standards", "static analysis" ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, "funding": [ { "url": "https://github.com/PHPCSStandards", @@ -2629,9 +2781,13 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2024-07-21T23:26:44+00:00" + "time": "2025-09-05T05:47:09+00:00" }, { "name": "symfony/polyfill-php70", @@ -2652,12 +2808,12 @@ }, "type": "metapackage", "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + }, "branch-alias": { "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" } }, "notification-url": "https://packagist.org/downloads/", @@ -2682,6 +2838,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2700,34 +2859,26 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "10112722600777e02d2745716b70c5db4ca70442" + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", - "reference": "10112722600777e02d2745716b70c5db4ca70442", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "type": "library", + "type": "metapackage", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "notification-url": "https://packagist.org/downloads/", @@ -2752,6 +2903,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2766,20 +2920,20 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v5.4.40", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046" + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/deedcb3bb4669cae2148bc920eafd2b16dc7c046", - "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", "shasum": "" }, "require": { @@ -2811,6 +2965,9 @@ ], "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2825,20 +2982,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-11-06T11:36:42+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625" + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e9daf3b7c805c747638b2cc48f1649e594f9625", - "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", "shasum": "" }, "require": { @@ -2870,6 +3027,9 @@ ], "description": "Provides a way to profile code", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2884,7 +3044,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" } ], "aliases": [], @@ -2897,6 +3057,6 @@ "platform": { "php": "^7.0" }, - "platform-dev": [], - "plugin-api-version": "1.1.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } diff --git a/config.xml b/config.xml index 485bd50a..95a41bec 100644 --- a/config.xml +++ b/config.xml @@ -10,7 +10,7 @@ altapay - + diff --git a/controllers/front/callbackform.php b/controllers/front/callbackform.php index 1274ae7a..1145f8e0 100644 --- a/controllers/front/callbackform.php +++ b/controllers/front/callbackform.php @@ -48,6 +48,8 @@ public function postProcess() $payment_style = Configuration::get('enable_cc_style'); if (empty($payment_style)) { $payment_style = 'legacy-cc'; + } else if ($payment_style == 'checkout-v2') { + $payment_style .= ' checkout-cc'; } $this->context->smarty->assign('stylingclass', $payment_style); $this->context->smarty->assign('summarydetails', $cart->getSummaryDetails()); diff --git a/helpers.php b/helpers.php index ca0559ee..813407f1 100644 --- a/helpers.php +++ b/helpers.php @@ -24,7 +24,7 @@ function transactionInfo($transactionInfo = []) { $pluginName = 'altapay'; - $pluginVersion = '4.0.1'; + $pluginVersion = '4.0.2'; // Transaction info $transactionInfo['ecomPlatform'] = 'PrestaShop'; @@ -1628,3 +1628,25 @@ function getTerminal($terminal_id = false, $currency = false) return $terminal; } + +/** + * Return matching form template value + * + * @return string|null + */ +function getFormTemplate() +{ + $form_templates = array( + 'legacy-cc' => 'form_dynamic_div', + 'checkout-cc' => 'form_checkout_div', + 'checkout-v2' => 'form_checkout', + ); + + $style = Configuration::get('enable_cc_style'); + + if (empty($style)) { + return null; + } + + return $form_templates[$style] ?? null; +} \ No newline at end of file diff --git a/views/css/payment.css b/views/css/payment.css index e5fe753b..4032544e 100644 --- a/views/css/payment.css +++ b/views/css/payment.css @@ -83,28 +83,28 @@ div#payment_error { /** Legacy **/ -#legacy-cc .pensio_payment_form_outer { +.legacy-cc .pensio_payment_form_outer { width: 50%; } -#legacy-cc .pensio_payment_form_outer input[type='text'], -#legacy-cc .pensio_payment_form_outer input[type='tel'] { +.legacy-cc .pensio_payment_form_outer input[type='text'], +.legacy-cc .pensio_payment_form_outer input[type='tel'] { width: 70%; padding: 11px; border: 1px solid #ddd; margin: 0px 0px; } -#legacy-cc label#selectCardLabel { +.legacy-cc label#selectCardLabel { display: none; } -#legacy-cc label.pensio_payment_form_label_cell { +.legacy-cc label.pensio_payment_form_label_cell { margin-top: 16px; } -#legacy-cc .pensio_payment_form_outer select#emonth, -#legacy-cc .pensio_payment_form_outer select#eyear { +.legacy-cc .pensio_payment_form_outer select#emonth, +.legacy-cc .pensio_payment_form_outer select#eyear { width: 5rem; height: 2.5rem; padding: 0.175rem 0.5rem; @@ -113,7 +113,7 @@ div#payment_error { border: 1px solid rgba(0, 0, 0, 0.25); } -#legacy-cc input#pensioCreditCardPaymentSubmitButton { +.legacy-cc input#pensioCreditCardPaymentSubmitButton { color: #fff; background-color: #24b9d7; border-color: rgba(0, 0, 0, 0); @@ -123,7 +123,7 @@ div#payment_error { margin-top: 10px; } -#legacy-cc .pensio_payment_form_submit_cell { +.legacy-cc .pensio_payment_form_submit_cell { display: flex; justify-content: space-between; align-items: center; @@ -131,42 +131,47 @@ div#payment_error { /** Checkout Styling **/ -#checkout-cc .pensio_payment_form_outer { +.checkout-cc .pensio_payment_form_outer { width: 100%; } -#checkout-cc p.payment-headline { +.checkout-cc p.payment-headline { margin-bottom: 25px; } -#checkout-cc #card_info { +.checkout-v2.checkout-cc { + display: flex; +} + +.checkout-cc #card_info { max-width: 500px; text-align: left; margin-left: auto; margin-right: auto; background-color: white; border: 1px solid rgba(0, 0, 0, 0.16); - padding: 20px 25px 25px 25px; + padding: 30px 25px 25px 25px; box-sizing: border-box; border-radius: 10px; position: relative; box-shadow: rgba(50, 50, 93, 0.25) 0 2px 5px -1px; + flex: 1; } -#checkout-cc .pensio_payment_form_card-number { +.checkout-cc .pensio_payment_form_card-number { position: relative; } -#checkout-cc .pensio_payment_form_card-number, -#checkout-cc .pensio_payment_form_cardholder, -#checkout-cc .pensio_payment_form-cvc-input { +.checkout-cc .pensio_payment_form_card-number, +.checkout-cc .pensio_payment_form_cardholder, +.checkout-cc .pensio_payment_form-cvc-input { margin-top: 4px; } -#checkout-cc .pensio_payment_form_card-number input, -#checkout-cc .pensio_payment_form_cardholder input, -#checkout-cc input#organisationNumber, -#checkout-cc .pensio_payment_form_input_cell input { +.checkout-cc .pensio_payment_form_card-number input, +.checkout-cc .pensio_payment_form_cardholder input, +.checkout-cc input#organisationNumber, +.checkout-cc .pensio_payment_form_input_cell input { padding: 12px 14px; width: 100%; border-radius: 3px; @@ -177,16 +182,16 @@ div#payment_error { color: #666; } -#checkout-cc .pensioCreditCardInput { +.checkout-cc .pensioCreditCardInput { color: #666; } -#checkout-cc .pensio_payment_form_month select, -#checkout-cc .pensio_payment_form_year select, -#checkout-cc #idealIssuer, -#checkout-cc select#birthdateDay, -#checkout-cc select#birthdateMonth, -#checkout-cc select#birthdateYear { +.checkout-cc .pensio_payment_form_month select, +.checkout-cc .pensio_payment_form_year select, +.checkout-cc #idealIssuer, +.checkout-cc select#birthdateDay, +.checkout-cc select#birthdateMonth, +.checkout-cc select#birthdateYear { -webkit-appearance: none; -moz-appearance: none; background-image: linear-gradient(45deg, transparent 50%, black 50%), @@ -198,13 +203,13 @@ div#payment_error { cursor: pointer; } -#checkout-cc .pensio_payment_form_month select, -#checkout-cc .pensio_payment_form_year select, -#checkout-cc #idealIssuer, -#checkout-cc select#birthdateDay, -#checkout-cc select#birthdateMonth, -#checkout-cc input#phoneNumber, -#checkout-cc select#birthdateYear { +.checkout-cc .pensio_payment_form_month select, +.checkout-cc .pensio_payment_form_year select, +.checkout-cc #idealIssuer, +.checkout-cc select#birthdateDay, +.checkout-cc select#birthdateMonth, +.checkout-cc input#phoneNumber, +.checkout-cc select#birthdateYear { margin-top: 4px; padding: 12px 14px; width: 100%; @@ -214,7 +219,7 @@ div#payment_error { font-size: 16px; } -#checkout-cc .pensio_payment_form-cvc-input input { +.checkout-cc .pensio_payment_form-cvc-input input { padding: 12px 14px; width: 100%; border-radius: 3px; @@ -223,32 +228,32 @@ div#payment_error { font-size: 16px; } -#checkout-cc .pensio_payment_form_expiration { +.checkout-cc .pensio_payment_form_expiration { display: flex; width: 100%; gap: 0 10px; } -#checkout-cc .pensio_payment_form_month { +.checkout-cc .pensio_payment_form_month { width: 30%; } -#checkout-cc .pensio_payment_form_year { +.checkout-cc .pensio_payment_form_year { width: 30%; } -#checkout-cc .pensio_payment_form_cvc { +.checkout-cc .pensio_payment_form_cvc { width: 40%; } -#checkout-cc .pensio_payment_form-cvc-input { +.checkout-cc .pensio_payment_form-cvc-input { display: flex; position: relative; } -#checkout-cc .cvc-icon { +.checkout-cc .cvc-icon { width: 35px; position: absolute; top: 0; @@ -258,7 +263,7 @@ div#payment_error { align-items: center; } -#checkout-cc .credit-card-visa-icon { +.checkout-cc .credit-card-visa-icon { position: absolute; top: 0; right: 0; @@ -268,7 +273,7 @@ div#payment_error { align-items: center; } -#checkout-cc .credit-card-mastercard-icon { +.checkout-cc .credit-card-mastercard-icon { position: absolute; top: 0; right: 0; @@ -278,7 +283,7 @@ div#payment_error { align-items: center; } -#checkout-cc .credit-card-maestro-icon { +.checkout-cc .credit-card-maestro-icon { position: absolute; top: 0; right: 0; @@ -288,7 +293,7 @@ div#payment_error { align-items: center; } -#checkout-cc #creditCardTypeIcon { +.checkout-cc #creditCardTypeIcon { height: 40%; width: auto; position: absolute; @@ -299,7 +304,7 @@ div#payment_error { margin: auto 1rem auto auto; } -#checkout-cc #creditCardTypeSecondIcon { +.checkout-cc #creditCardTypeSecondIcon { height: 40%; width: auto; position: absolute; @@ -310,7 +315,7 @@ div#payment_error { margin: auto 4rem auto auto; } -#checkout-cc #selectCardLabel { +.checkout-cc #selectCardLabel { position: absolute; right: 0; bottom: 0; @@ -319,34 +324,34 @@ div#payment_error { opacity: 0.7; } -#checkout-cc .pensio_payment_form_cvc-info-text { +.checkout-cc .pensio_payment_form_cvc-info-text { font-size: 10px; line-height: normal; } -#checkout-cc .pensio_payment_form_label_cell { +.checkout-cc .pensio_payment_form_label_cell { font-size: 16px; margin-bottom: 0; } -#checkout-cc .cardnumber_row { +.checkout-cc .cardnumber_row { margin-bottom: 20px; } -#checkout-cc .expiry_row { +.checkout-cc .expiry_row { display: flex; width: 100%; gap: 0 10px; } -#checkout-cc .submit_row { +.checkout-cc .submit_row { margin-top: 20px; } -#checkout-cc .AltaPaySubmitButton, -#checkout-cc #submitbutton, -#checkout-cc #cancelPayment, -#checkout-cc #EPayment button[type="submit"] { +.checkout-cc .AltaPaySubmitButton, +.checkout-cc #submitbutton, +.checkout-cc #cancelPayment, +.checkout-cc #EPayment button[type="submit"] { outline: none; padding: 15px 16px; color: white; @@ -359,22 +364,22 @@ div#payment_error { font-size: 17px; } -#checkout-cc .AltaPaySubmitButton, -#checkout-cc #EPayment button[type="submit"] { +.checkout-cc .AltaPaySubmitButton, +.checkout-cc #EPayment button[type="submit"] { background: #31C37E; } -#checkout-cc .AltaPaySubmitButton:hover, -#checkout-cc #EPayment button[type="submit"]:hover { +.checkout-cc .AltaPaySubmitButton:hover, +.checkout-cc #EPayment button[type="submit"]:hover { background: #16b36e; } -#checkout-cc .AltaPaySubmitButton:disabled, -#checkout-cc #submitbutton, -#checkout-cc #cancelPayment, -#checkout-cc #submitbutton:disabled, -#checkout-cc #EPayment button[type="submit"]:disabled { +.checkout-cc .AltaPaySubmitButton:disabled, +.checkout-cc #submitbutton, +.checkout-cc #cancelPayment, +.checkout-cc #submitbutton:disabled, +.checkout-cc #EPayment button[type="submit"]:disabled { background: black; outline: none; padding: 15px 16px; @@ -389,18 +394,21 @@ div#payment_error { } -#checkout-cc .pensio_required_field_indicator, -#checkout-cc #invalid_amex_cvc, -#checkout-cc #invalid_cvc, -#checkout-cc #invalid_cardholdername { +.checkout-cc .pensio_required_field_indicator, +.checkout-cc #invalid_amex_cvc, +.checkout-cc #invalid_cvc, +.checkout-cc #invalid_cardholdername, +#invalid_cardholdername, +#invalid_expire_month, +#invalid_expire_year { color: red; font-size: 12px; line-height: normal; margin-top: 4px; } -#checkout-cc .PensioCloseButton, -#checkout-cc .CustomAltaPayCloseButton { +.checkout-cc .PensioCloseButton, +.checkout-cc .CustomAltaPayCloseButton { width: 40px; height: 20px; font-size: 18px; @@ -413,48 +421,48 @@ div#payment_error { top: 0; } -#checkout-cc .PensioRadioButton { +.checkout-cc .PensioRadioButton { border: none; background-color: transparent; cursor: pointer; } -#checkout-cc div.PensioMultiformContainer form { +.checkout-cc div.PensioMultiformContainer form { display: none; } -#checkout-cc #PensioJavascriptDisabledSurchargeNotice { +.checkout-cc #PensioJavascriptDisabledSurchargeNotice { color: red; background-color: white; } -#checkout-cc #iDealPayment table { +.checkout-cc #iDealPayment table { width: 100%; } -#checkout-cc #iDealPayment #pensioPaymentIdealSubmitButton { +.checkout-cc #iDealPayment #pensioPaymentIdealSubmitButton { margin-top: 20px; } -#checkout-cc #idealIssuer select { +.checkout-cc #idealIssuer select { color: #666; } -#checkout-cc .pensio_payment_form_cvc-info-text { +.checkout-cc .pensio_payment_form_cvc-info-text { margin-top: 2px; } -#checkout-cc select#birthdateDay, -#checkout-cc select#birthdateMonth, -#checkout-cc input#cancelPayment, -#checkout-cc input#enableAccount, -#checkout-cc input#acceptTerms, -#checkout-cc input#phoneNumber, -#checkout-cc input#organisationNumber { +.checkout-cc select#birthdateDay, +.checkout-cc select#birthdateMonth, +.checkout-cc input#cancelPayment, +.checkout-cc input#enableAccount, +.checkout-cc input#acceptTerms, +.checkout-cc input#phoneNumber, +.checkout-cc input#organisationNumber { margin-bottom: 10px; } -#checkout-cc div.PensioMultiformContainer form { +.checkout-cc div.PensioMultiformContainer form { position: relative; border: none; background-color: white; @@ -465,15 +473,15 @@ div#payment_error { width: 100%; } -#checkout-cc input#CreditCardButton { +.checkout-cc input#CreditCardButton { left: 0px; } -#checkout-cc input#GiftCardButton { +.checkout-cc input#GiftCardButton { left: 100px; } -#checkout-cc div.PensioMultiformContainer .FormTypeButton { +.checkout-cc div.PensioMultiformContainer .FormTypeButton { position: absolute; top: -32px; height: 32px; @@ -481,18 +489,18 @@ div#payment_error { border: 1px solid rgba(0, 0, 0, 0.16); } -#checkout-cc div.PensioMultiformContainer { +.checkout-cc div.PensioMultiformContainer { position: initial; } -#checkout-cc #Mobile .pensio_payment_form_label_cell { +.checkout-cc #Mobile .pensio_payment_form_label_cell { font-size: 16px; margin-bottom: 0; vertical-align: top; padding-top: 15px; } -#checkout-cc input#giftcard_account_identifier { +.checkout-cc input#giftcard_account_identifier { background-color: white; padding: 12px 14px; border-radius: 3px; @@ -501,8 +509,8 @@ div#payment_error { border: 1px solid rgba(0, 0, 0, 0.16); } -#checkout-cc .PensioMultiformContainer input#giftcard_account_identifier, -#checkout-cc table.pensio_payment_form_table { +.checkout-cc .PensioMultiformContainer input#giftcard_account_identifier, +.checkout-cc table.pensio_payment_form_table { width: 100%; } @@ -552,28 +560,170 @@ div#payment_error { padding-left: 84px; } -#checkout-cc #EPayment .pensio_payment_form_label_cell, -#checkout-cc #iDealPayment .pensio_payment_form_label_cell, -#checkout-cc #Mobile .pensio_payment_form_label_cell{ +.checkout-cc #EPayment .pensio_payment_form_label_cell, +.checkout-cc #iDealPayment .pensio_payment_form_label_cell, +.checkout-cc #Mobile .pensio_payment_form_label_cell{ display: block; padding: 0.25em 0; } -#checkout-cc #EPayment .pensio_payment_form_input_cell, -#checkout-cc #iDealPayment .pensio_payment_form_input_cell, -#checkout-cc #Mobile .pensio_payment_form_input_cell { +.checkout-cc #EPayment .pensio_payment_form_input_cell, +.checkout-cc #iDealPayment .pensio_payment_form_input_cell, +.checkout-cc #Mobile .pensio_payment_form_input_cell { padding: 0; display: block; } -#checkout-cc #Mobile .pensio_payment_form_input_cell input[type="text"] { +.checkout-cc #Mobile .pensio_payment_form_input_cell input[type="text"] { margin-bottom: 1.25em; } -#checkout-cc #Mobile div#paymentFormWaiting { +.checkout-cc #Mobile div#paymentFormWaiting { text-align: center; } + +.checkout-v2 .pensio_payment_form_row { + margin-bottom: 0; +} + +.checkout-v2 .pensio_payment_form-date { + cursor: pointer; + display: flex; + align-items: center; + font-family: monospace !important; + border: 1px solid rgba(0, 0, 0, 0.16); + border-top: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 0px; +} + +.checkout-v2 .separator { + color: #a9a9ac; +} + +.checkout-v2 .pensio_payment_form_year { + width: 25%; +} + +.checkout-v2 .pensio_payment_form_card-number input { + padding: 16px 14px; + width: 100%; + cursor: pointer; + font-size: 16px; + box-sizing: border-box; + color: #666; + border-radius: 4px; + border: 1px solid rgba(0, 0, 0, 0.16); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + outline: none; + height: 51px; + box-shadow: none; +} + +.checkout-v2 .pensio_payment_form_card-number, +.checkout-v2 .pensio_payment_form_cardholder, +.checkout-v2 .pensio_payment_form-cvc-input { + margin-top: 0 !important; +} + +.checkout-v2 .pensio_payment_form_cardholder input { + color: #666; + outline: none; + height: 51px; + box-shadow: none; +} + +.checkout-v2 .pensio_payment_form-cvc-input input { + padding: 16px 14px; + height: 52px; + box-sizing: border-box; + width: 100%; + border-bottom: 1px solid rgba(0, 0, 0, 0.16) !important; + border-right: 1px solid rgba(0, 0, 0, 0.16) !important; + border-radius: 4px; + border-top: 0; + cursor: pointer; + font-size: 16px; + border-left: none; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + outline: none; + color: #666; + box-shadow: none; +} + +.checkout-v2 .expire-month, .checkout-v2 #emonth { + height: 51px; + padding-top: 16px; + padding-bottom: 16px; + padding-left: 2px !important; + margin: auto 4px auto 14px; + font-family: monospace !important; + width: 100%; + border: none; + outline: none; + cursor: pointer; + font-size: 16px; + box-shadow: none !important; + box-sizing: border-box; + color: #666; +} + +.checkout-v2 .expiry-year { + padding: 16px 4px; + height: 51px; + width: 100%; + border: none; + outline: none; + font-family: monospace !important; + cursor: pointer; + font-size: 16px; + box-sizing: border-box; + color: #666; +} + +.checkout-v2 .pensio_payment_form_month { + width: 20%; + max-width: 40px; +} + +.checkout-v2 .pensio_payment_form_cvc { + width: 50%; +} +.checkout-v2 .pensio_payment_form_row.expiry_row { + float: none; + margin-top: 0; + gap: 0; + justify-content: space-between; + margin-bottom: 15px; +} +.checkout-v2 .secure-payments-text { + width: 100%; + position: relative; + float: left; + text-align: right; + font-size: 10px; + padding-top: 5px; +} +.checkout-v2 div.payment-form-wrapper { + padding: 25px 25px 25px 25px !important; + display: inline-block; + width: 100%; +} + +.altapay-payment-form-cnt.altapay_content.checkout-v2 { + padding: 30px 25px 25px 25px; + width: 100%; + display: inline-block; +} + +.checkout-v2 .pensio_payment_form_cvc, +.checkout-v2 .pensio_payment_form_date-container{ + width: 50%; +} + @media only screen and (max-width: 768px) { .pensio_payment_form_outer { width: 100%; diff --git a/views/templates/front/cart_info17.tpl b/views/templates/front/cart_info17.tpl index 670a9552..db3cd9ad 100644 --- a/views/templates/front/cart_info17.tpl +++ b/views/templates/front/cart_info17.tpl @@ -51,6 +51,7 @@ {/if} + {$product.price} @@ -102,6 +103,7 @@ {if !empty($product.gift)} {l s='Gift!' mod='altapay'} {else} + {$currency_sign} {if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)} {if !isset($priceDisplay)}{$product.total_customization_wt}{else}{$product.total_customization}{/if} {else} @@ -288,7 +290,7 @@ {l s='Total' mod='altapay'} - {$currency_sign}{$total_price_without_tax} + {$currency_sign} {$cart_summary.total_price} {/if} diff --git a/views/templates/front/payment_form.tpl b/views/templates/front/payment_form.tpl index b33c6319..216c27db 100644 --- a/views/templates/front/payment_form.tpl +++ b/views/templates/front/payment_form.tpl @@ -11,9 +11,9 @@ {assign currency_code Currency::getDefaultCurrency()->sign} -
+
- {if ($stylingclass) != "checkout-cc"} + {if strpos($stylingclass, "checkout-cc") === false}

{l s="Please enter your details below" mod="altapay"}

{/if}
diff --git a/views/templates/front/payment_form17.tpl b/views/templates/front/payment_form17.tpl index f59a80ab..d239eb78 100644 --- a/views/templates/front/payment_form17.tpl +++ b/views/templates/front/payment_form17.tpl @@ -22,9 +22,9 @@
{block name='checkout_process'} -
+
- {if ($stylingclass) != "checkout-cc"} + {if strpos($stylingclass, "checkout-cc") === false}

{l s="Please enter your details below" mod="altapay"}

{/if}
diff --git a/views/templates/front/paymentform_atmovic.tpl b/views/templates/front/paymentform_atmovic.tpl index e9615a57..c0946196 100644 --- a/views/templates/front/paymentform_atmovic.tpl +++ b/views/templates/front/paymentform_atmovic.tpl @@ -67,9 +67,9 @@
{block name='checkout_process'} -
+
- {if ($stylingclass) != "checkout-cc"} + {if strpos($stylingclass, "checkout-cc") === false}

{l s='Du er ved at betale' mod='altapay'} {$cart_summary.total_price} {$currency_code}

{/if}
From a673ecd6309dd1328b69aa155d095d2bf89fca5f Mon Sep 17 00:00:00 2001 From: Bushra Asif Date: Wed, 1 Oct 2025 05:49:14 +0000 Subject: [PATCH 2/6] Update wiki and fix csfixer issues --- Docs/Configuration/checkout_styling_form_v2.png | Bin 0 -> 84115 bytes controllers/front/callbackform.php | 2 +- helpers.php | 6 +++--- wiki.md | 8 ++++++-- 4 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 Docs/Configuration/checkout_styling_form_v2.png diff --git a/Docs/Configuration/checkout_styling_form_v2.png b/Docs/Configuration/checkout_styling_form_v2.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cf44658fa9155a89affd27e923cb4e76ffa12d GIT binary patch literal 84115 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 BY#IOn literal 0 HcmV?d00001 diff --git a/controllers/front/callbackform.php b/controllers/front/callbackform.php index 1145f8e0..2f2087cc 100644 --- a/controllers/front/callbackform.php +++ b/controllers/front/callbackform.php @@ -48,7 +48,7 @@ public function postProcess() $payment_style = Configuration::get('enable_cc_style'); if (empty($payment_style)) { $payment_style = 'legacy-cc'; - } else if ($payment_style == 'checkout-v2') { + } elseif ($payment_style == 'checkout-v2') { $payment_style .= ' checkout-cc'; } $this->context->smarty->assign('stylingclass', $payment_style); diff --git a/helpers.php b/helpers.php index 813407f1..fb61eb59 100644 --- a/helpers.php +++ b/helpers.php @@ -1636,11 +1636,11 @@ function getTerminal($terminal_id = false, $currency = false) */ function getFormTemplate() { - $form_templates = array( + $form_templates = [ 'legacy-cc' => 'form_dynamic_div', 'checkout-cc' => 'form_checkout_div', 'checkout-v2' => 'form_checkout', - ); + ]; $style = Configuration::get('enable_cc_style'); @@ -1649,4 +1649,4 @@ function getFormTemplate() } return $form_templates[$style] ?? null; -} \ No newline at end of file +} diff --git a/wiki.md b/wiki.md index 6739e01e..ce3dce7c 100644 --- a/wiki.md +++ b/wiki.md @@ -161,14 +161,18 @@ In order to reconcile payments please follow the steps below: ![prestashop_configure_styling](Docs/Configuration/prestashop_configure_styling.png) - - `Legacy` Choose this option if legacy form is enabled from the gateway side. + - `Legacy` Legacy design with basic form styling. ![altapay_cc_legacy_form.png](Docs/Configuration/prestashop_legacy_styling_form.png) - - `Checkout` Select the option to show the Credit Card form in a modern look. Make sure the checkout form is enabled from the gateway side. + - `Checkout` Select the option to show the Credit Card form in a modern look. ![altapay_cc_checkout_form.png](Docs/Configuration/prestashop_checkout_styling_form.png) + - `Checkout v2` Select this option to display the credit card form with a sleek design, showing the expiry date in two-digit month and year format, and the payment amount on the pay button. + + ![checkout_styling_form_v2.png](Docs/Configuration/checkout_styling_form_v2.png) + - `Custom` This option can be selected to implement custom styling on the payment page. Selecting this option will remove all the styling from the payment page. ### Customize Payment Form Page: From 98ed01453fe5a5c899ff5cf909bfab2f7cc3f651 Mon Sep 17 00:00:00 2001 From: Bushra Asif Date: Wed, 1 Oct 2025 06:44:07 +0000 Subject: [PATCH 3/6] Update altapay/api-php version --- composer.lock | 494 +++++++++++++++++--------------------------------- 1 file changed, 169 insertions(+), 325 deletions(-) diff --git a/composer.lock b/composer.lock index 6c46642b..464f7326 100644 --- a/composer.lock +++ b/composer.lock @@ -115,10 +115,6 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "support": { - "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" - }, "funding": [ { "url": "https://packagist.com", @@ -137,22 +133,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.10.0", + "version": "7.9.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + "reference": "a629e5b69db96eb4939c1b34114130077dd4c6fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a629e5b69db96eb4939c1b34114130077dd4c6fc", + "reference": "a629e5b69db96eb4939c1b34114130077dd4c6fc", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.3", - "guzzlehttp/psr7": "^2.8", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -241,10 +237,6 @@ "rest", "web service" ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.10.0" - }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -259,20 +251,20 @@ "type": "tidelift" } ], - "time": "2025-08-23T22:36:01+00:00" + "time": "2024-07-19T16:19:57+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.3.0", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "481557b130ef3790cf82b713667b43030dc9c957" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", - "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { @@ -280,7 +272,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -324,10 +316,6 @@ "keywords": [ "promise" ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.3.0" - }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -342,20 +330,20 @@ "type": "tidelift" } ], - "time": "2025-08-22T14:34:08+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -371,7 +359,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -440,10 +428,6 @@ "uri", "url" ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" - }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -458,7 +442,7 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "humbug/php-scoper", @@ -483,6 +467,9 @@ "symfony/filesystem": "^3.2 || ^4.0", "symfony/finder": "^3.2 || ^4.0" }, + "replace": { + "humbug/php-scoper": "self.version" + }, "require-dev": { "bamarni/composer-bin-plugin": "^1.1", "humbug/box": "^3.8", @@ -528,10 +515,6 @@ } ], "description": "Prefixes all PHP namespaces in a file or directory.", - "support": { - "issues": "https://github.com/humbug/php-scoper/issues", - "source": "https://github.com/humbug/php-scoper/tree/0.13.9" - }, "funding": [ { "url": "https://github.com/theofidry", @@ -546,21 +529,20 @@ "source": { "type": "git", "url": "https://github.com/JetBrains/phpstorm-stubs.git", - "reference": "d1ee5e570343bd4276a3d5959e6e1c2530b006d0" + "reference": "b164b0230c777c0c0673696f2a9a9d7ac0f4a946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/d1ee5e570343bd4276a3d5959e6e1c2530b006d0", - "reference": "d1ee5e570343bd4276a3d5959e6e1c2530b006d0", + "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/b164b0230c777c0c0673696f2a9a9d7ac0f4a946", + "reference": "b164b0230c777c0c0673696f2a9a9d7ac0f4a946", "shasum": "" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^v3.86", - "nikic/php-parser": "^v5.6", - "phpdocumentor/reflection-docblock": "^5.6", - "phpunit/phpunit": "^12.3" + "friendsofphp/php-cs-fixer": "v3.46.0", + "nikic/php-parser": "v5.0.0", + "phpdocumentor/reflection-docblock": "5.3.0", + "phpunit/phpunit": "10.5.5" }, - "default-branch": true, "type": "library", "autoload": { "files": [ @@ -583,10 +565,7 @@ "stubs", "type" ], - "support": { - "source": "https://github.com/JetBrains/phpstorm-stubs/tree/master" - }, - "time": "2025-09-20T07:44:45+00:00" + "time": "2024-07-09T19:51:36+00:00" }, { "name": "nikic/php-parser", @@ -594,12 +573,12 @@ "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c95b500f87e5fa2e598228e958667136125e0f5f" + "reference": "4d36e9c16f4820c2ed9360bc818982f3c02a08f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c95b500f87e5fa2e598228e958667136125e0f5f", - "reference": "c95b500f87e5fa2e598228e958667136125e0f5f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4d36e9c16f4820c2ed9360bc818982f3c02a08f5", + "reference": "4d36e9c16f4820c2ed9360bc818982f3c02a08f5", "shasum": "" }, "require": { @@ -608,12 +587,17 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -633,11 +617,7 @@ "parser", "php" ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/4.x" - }, - "time": "2025-08-13T12:16:18+00:00" + "time": "2024-03-17T09:03:35+00:00" }, { "name": "psr/container", @@ -681,10 +661,6 @@ "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" }, { @@ -734,9 +710,6 @@ "psr", "psr-18" ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, "time": "2023-09-23T14:17:50+00:00" }, { @@ -789,9 +762,6 @@ "request", "response" ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, "time": "2024-04-15T12:06:14+00:00" }, { @@ -842,9 +812,6 @@ "request", "response" ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, "time": "2023-04-04T09:54:51+00:00" }, { @@ -885,10 +852,6 @@ } ], "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" }, { @@ -962,9 +925,6 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/console/tree/v4.4.49" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -983,16 +943,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.4", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" + "reference": "80d075412b557d41002320b96a096ca65aa2c98d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", - "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d", + "reference": "80d075412b557d41002320b96a096ca65aa2c98d", "shasum": "" }, "require": { @@ -1000,12 +960,12 @@ }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1029,9 +989,6 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1046,7 +1003,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:11:13+00:00" + "time": "2023-01-24T14:02:46+00:00" }, { "name": "symfony/event-dispatcher", @@ -1112,9 +1069,6 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.18" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1154,12 +1108,12 @@ }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1191,9 +1145,6 @@ "interoperability", "standards" ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.10.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1254,9 +1205,6 @@ ], "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v4.4.42" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1316,9 +1264,6 @@ ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.44" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1382,9 +1327,6 @@ "configuration", "options" ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1403,20 +1345,20 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1" }, "provide": { "ext-ctype": "*" @@ -1427,8 +1369,8 @@ "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1461,9 +1403,6 @@ "polyfill", "portable" ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1473,34 +1412,29 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { - "ext-iconv": "*", - "php": ">=7.2" + "php": ">=7.1" }, "provide": { "ext-mbstring": "*" @@ -1511,8 +1445,8 @@ "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1546,9 +1480,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1558,39 +1489,35 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.33.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1626,9 +1553,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1638,39 +1562,35 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1710,9 +1630,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1722,29 +1639,25 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.4", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" + "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", - "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3", "shasum": "" }, "require": { @@ -1760,12 +1673,12 @@ }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1797,9 +1710,6 @@ "interoperability", "standards" ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1814,7 +1724,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:11:13+00:00" + "time": "2023-04-21T15:04:16+00:00" } ], "packages-dev": [ @@ -1869,10 +1779,6 @@ "regex", "regular expression" ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" - }, "funding": [ { "url": "https://packagist.com", @@ -1891,24 +1797,24 @@ }, { "name": "composer/semver", - "version": "3.4.4", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { @@ -1949,11 +1855,6 @@ "validation", "versioning" ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.4" - }, "funding": [ { "url": "https://packagist.com", @@ -1962,9 +1863,13 @@ { "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2025-08-20T19:15:30+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "composer/xdebug-handler", @@ -2011,11 +1916,6 @@ "Xdebug", "performance" ], - "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.5" - }, "funding": [ { "url": "https://packagist.com", @@ -2034,16 +1934,16 @@ }, { "name": "doctrine/annotations", - "version": "1.14.4", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { @@ -2054,11 +1954,11 @@ }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "~1.4.10 || ^1.10.28", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", - "vimeo/psalm": "^4.30 || ^5.14" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" }, "suggest": { "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" @@ -2102,38 +2002,33 @@ "docblock", "parser" ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.4" - }, - "time": "2024-09-05T10:15:52+00:00" + "time": "2023-02-01T09:20:38+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" - }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", - "psr/log": "^1 || ^2 || ^3" + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -2141,7 +2036,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "src" + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "notification-url": "https://packagist.org/downloads/", @@ -2150,11 +2045,7 @@ ], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" - }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/lexer", @@ -2214,10 +2105,6 @@ "parser", "php" ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.1" - }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -2331,10 +2218,6 @@ } ], "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" - }, "funding": [ { "url": "https://github.com/keradus", @@ -2392,10 +2275,6 @@ "keywords": [ "diff" ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" - }, "abandoned": true, "time": "2020-10-14T08:39:05+00:00" }, @@ -2439,10 +2318,6 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.100" - }, "funding": [ { "url": "https://github.com/ondrejmirtes", @@ -2504,23 +2379,20 @@ ], "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": "prestashop/header-stamp", - "version": "v2.6", + "version": "v2.3", "source": { "type": "git", "url": "https://github.com/PrestaShopCorp/header-stamp.git", - "reference": "7f09cd041bbf1fa56bd71ae91bab3919da88b6ac" + "reference": "3104b69ad73b6039c7082dbba4af9dbeb0b936b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/7f09cd041bbf1fa56bd71ae91bab3919da88b6ac", - "reference": "7f09cd041bbf1fa56bd71ae91bab3919da88b6ac", + "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/3104b69ad73b6039c7082dbba4af9dbeb0b936b3", + "reference": "3104b69ad73b6039c7082dbba4af9dbeb0b936b3", "shasum": "" }, "require": { @@ -2530,7 +2402,7 @@ "symfony/finder": "^3.4 || ~4.0 || ~5.0 || ~6.0" }, "require-dev": { - "phpstan/phpstan": "^1.12", + "phpstan/phpstan": "^0.12.83", "prestashop/php-dev-tools": "1.*" }, "bin": [ @@ -2554,11 +2426,7 @@ ], "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.6" - }, - "time": "2025-02-05T08:44:26+00:00" + "time": "2023-03-23T14:44:10+00:00" }, { "name": "prestashop/php-dev-tools", @@ -2600,10 +2468,6 @@ "MIT" ], "description": "PrestaShop coding standards", - "support": { - "issues": "https://github.com/PrestaShop/php-dev-tools/issues", - "source": "https://github.com/PrestaShop/php-dev-tools/tree/v4.1.0" - }, "time": "2021-06-17T14:24:59+00:00" }, { @@ -2650,9 +2514,6 @@ "psr", "psr-6" ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, "time": "2016-08-06T20:24:11+00:00" }, { @@ -2700,23 +2561,20 @@ "psr", "psr-3" ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, "time": "2021-05-03T11:20:27+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.13.4", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119" + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ad545ea9c1b7d270ce0fc9cbfb884161cd706119", - "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", "shasum": "" }, "require": { @@ -2763,12 +2621,6 @@ "standards", "static analysis" ], - "support": { - "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", - "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", - "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" - }, "funding": [ { "url": "https://github.com/PHPCSStandards", @@ -2781,13 +2633,9 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" - }, - { - "url": "https://thanks.dev/u/gh/phpcsstandards", - "type": "thanks_dev" } ], - "time": "2025-09-05T05:47:09+00:00" + "time": "2024-07-21T23:26:44+00:00" }, { "name": "symfony/polyfill-php70", @@ -2808,12 +2656,12 @@ }, "type": "metapackage", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - }, "branch-alias": { "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "notification-url": "https://packagist.org/downloads/", @@ -2838,9 +2686,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2859,26 +2704,34 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.31.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + "reference": "10112722600777e02d2745716b70c5db4ca70442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", + "reference": "10112722600777e02d2745716b70c5db4ca70442", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1" }, - "type": "metapackage", + "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2903,9 +2756,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2920,20 +2770,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/process", - "version": "v5.4.47", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", - "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", + "url": "https://api.github.com/repos/symfony/process/zipball/deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046", "shasum": "" }, "require": { @@ -2965,9 +2815,6 @@ ], "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2982,20 +2829,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T11:36:42+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.45", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", - "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e9daf3b7c805c747638b2cc48f1649e594f9625", + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625", "shasum": "" }, "require": { @@ -3027,9 +2874,6 @@ ], "description": "Provides a way to profile code", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3044,7 +2888,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:11:13+00:00" + "time": "2024-05-31T14:33:22+00:00" } ], "aliases": [], From 8988af68a745b387630e752703b58a5f6ccb377c Mon Sep 17 00:00:00 2001 From: Bushra Asif Date: Wed, 1 Oct 2025 07:50:54 +0000 Subject: [PATCH 4/6] Fix styling issue --- controllers/front/callbackform.php | 3 +++ views/templates/front/payment_form.tpl | 2 +- views/templates/front/payment_form17.tpl | 2 +- views/templates/front/paymentform_atmovic.tpl | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/controllers/front/callbackform.php b/controllers/front/callbackform.php index 2f2087cc..da6b500a 100644 --- a/controllers/front/callbackform.php +++ b/controllers/front/callbackform.php @@ -46,12 +46,15 @@ public function postProcess() $this->context->smarty->assign('theme_name', $themeName); $this->context->smarty->assign('cssClass', $terminalRemoteName); $payment_style = Configuration::get('enable_cc_style'); + $payment_style_id = $payment_style; if (empty($payment_style)) { $payment_style = 'legacy-cc'; + $payment_style_id = 'legacy-cc'; } elseif ($payment_style == 'checkout-v2') { $payment_style .= ' checkout-cc'; } $this->context->smarty->assign('stylingclass', $payment_style); + $this->context->smarty->assign('stylingid', $payment_style_id); $this->context->smarty->assign('summarydetails', $cart->getSummaryDetails()); if (strpos($postData['shop_orderid'], '_') !== false) { $this->context->smarty->assign('amount', $postData['amount']); diff --git a/views/templates/front/payment_form.tpl b/views/templates/front/payment_form.tpl index 216c27db..217c05a9 100644 --- a/views/templates/front/payment_form.tpl +++ b/views/templates/front/payment_form.tpl @@ -11,7 +11,7 @@ {assign currency_code Currency::getDefaultCurrency()->sign} -
+
{if strpos($stylingclass, "checkout-cc") === false}

{l s="Please enter your details below" mod="altapay"}

diff --git a/views/templates/front/payment_form17.tpl b/views/templates/front/payment_form17.tpl index d239eb78..993d2950 100644 --- a/views/templates/front/payment_form17.tpl +++ b/views/templates/front/payment_form17.tpl @@ -22,7 +22,7 @@
{block name='checkout_process'} -
+
{if strpos($stylingclass, "checkout-cc") === false}

{l s="Please enter your details below" mod="altapay"}

diff --git a/views/templates/front/paymentform_atmovic.tpl b/views/templates/front/paymentform_atmovic.tpl index c0946196..d0d1d2fd 100644 --- a/views/templates/front/paymentform_atmovic.tpl +++ b/views/templates/front/paymentform_atmovic.tpl @@ -67,7 +67,7 @@
{block name='checkout_process'} -
+
{if strpos($stylingclass, "checkout-cc") === false}

{l s='Du er ved at betale' mod='altapay'} {$cart_summary.total_price} {$currency_code}

From e4fcc11aaff2795f9e5660c3e9ba7f51ed6f7461 Mon Sep 17 00:00:00 2001 From: Bushra Asif Date: Wed, 1 Oct 2025 07:51:56 +0000 Subject: [PATCH 5/6] Update styling --- views/css/payment.css | 206 +++++++++++++++++++++--------------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/views/css/payment.css b/views/css/payment.css index 4032544e..f31855f5 100644 --- a/views/css/payment.css +++ b/views/css/payment.css @@ -83,28 +83,28 @@ div#payment_error { /** Legacy **/ -.legacy-cc .pensio_payment_form_outer { +#legacy-cc .pensio_payment_form_outer { width: 50%; } -.legacy-cc .pensio_payment_form_outer input[type='text'], -.legacy-cc .pensio_payment_form_outer input[type='tel'] { +#legacy-cc .pensio_payment_form_outer input[type='text'], +#legacy-cc .pensio_payment_form_outer input[type='tel'] { width: 70%; padding: 11px; border: 1px solid #ddd; margin: 0px 0px; } -.legacy-cc label#selectCardLabel { +#legacy-cc label#selectCardLabel { display: none; } -.legacy-cc label.pensio_payment_form_label_cell { +#legacy-cc label.pensio_payment_form_label_cell { margin-top: 16px; } -.legacy-cc .pensio_payment_form_outer select#emonth, -.legacy-cc .pensio_payment_form_outer select#eyear { +#legacy-cc .pensio_payment_form_outer select#emonth, +#legacy-cc .pensio_payment_form_outer select#eyear { width: 5rem; height: 2.5rem; padding: 0.175rem 0.5rem; @@ -113,7 +113,7 @@ div#payment_error { border: 1px solid rgba(0, 0, 0, 0.25); } -.legacy-cc input#pensioCreditCardPaymentSubmitButton { +#legacy-cc input#pensioCreditCardPaymentSubmitButton { color: #fff; background-color: #24b9d7; border-color: rgba(0, 0, 0, 0); @@ -123,7 +123,7 @@ div#payment_error { margin-top: 10px; } -.legacy-cc .pensio_payment_form_submit_cell { +#legacy-cc .pensio_payment_form_submit_cell { display: flex; justify-content: space-between; align-items: center; @@ -131,19 +131,19 @@ div#payment_error { /** Checkout Styling **/ -.checkout-cc .pensio_payment_form_outer { +#checkout-cc .pensio_payment_form_outer { width: 100%; } -.checkout-cc p.payment-headline { +#checkout-cc p.payment-headline { margin-bottom: 25px; } -.checkout-v2.checkout-cc { +.checkout-v2#checkout-cc { display: flex; } -.checkout-cc #card_info { +#checkout-cc #card_info { max-width: 500px; text-align: left; margin-left: auto; @@ -158,20 +158,20 @@ div#payment_error { flex: 1; } -.checkout-cc .pensio_payment_form_card-number { +#checkout-cc .pensio_payment_form_card-number { position: relative; } -.checkout-cc .pensio_payment_form_card-number, -.checkout-cc .pensio_payment_form_cardholder, -.checkout-cc .pensio_payment_form-cvc-input { +#checkout-cc .pensio_payment_form_card-number, +#checkout-cc .pensio_payment_form_cardholder, +#checkout-cc .pensio_payment_form-cvc-input { margin-top: 4px; } -.checkout-cc .pensio_payment_form_card-number input, -.checkout-cc .pensio_payment_form_cardholder input, -.checkout-cc input#organisationNumber, -.checkout-cc .pensio_payment_form_input_cell input { +#checkout-cc .pensio_payment_form_card-number input, +#checkout-cc .pensio_payment_form_cardholder input, +#checkout-cc input#organisationNumber, +#checkout-cc .pensio_payment_form_input_cell input { padding: 12px 14px; width: 100%; border-radius: 3px; @@ -182,16 +182,16 @@ div#payment_error { color: #666; } -.checkout-cc .pensioCreditCardInput { +#checkout-cc .pensioCreditCardInput { color: #666; } -.checkout-cc .pensio_payment_form_month select, -.checkout-cc .pensio_payment_form_year select, -.checkout-cc #idealIssuer, -.checkout-cc select#birthdateDay, -.checkout-cc select#birthdateMonth, -.checkout-cc select#birthdateYear { +#checkout-cc .pensio_payment_form_month select, +#checkout-cc .pensio_payment_form_year select, +#checkout-cc #idealIssuer, +#checkout-cc select#birthdateDay, +#checkout-cc select#birthdateMonth, +#checkout-cc select#birthdateYear { -webkit-appearance: none; -moz-appearance: none; background-image: linear-gradient(45deg, transparent 50%, black 50%), @@ -203,13 +203,13 @@ div#payment_error { cursor: pointer; } -.checkout-cc .pensio_payment_form_month select, -.checkout-cc .pensio_payment_form_year select, -.checkout-cc #idealIssuer, -.checkout-cc select#birthdateDay, -.checkout-cc select#birthdateMonth, -.checkout-cc input#phoneNumber, -.checkout-cc select#birthdateYear { +#checkout-cc .pensio_payment_form_month select, +#checkout-cc .pensio_payment_form_year select, +#checkout-cc #idealIssuer, +#checkout-cc select#birthdateDay, +#checkout-cc select#birthdateMonth, +#checkout-cc input#phoneNumber, +#checkout-cc select#birthdateYear { margin-top: 4px; padding: 12px 14px; width: 100%; @@ -219,7 +219,7 @@ div#payment_error { font-size: 16px; } -.checkout-cc .pensio_payment_form-cvc-input input { +#checkout-cc .pensio_payment_form-cvc-input input { padding: 12px 14px; width: 100%; border-radius: 3px; @@ -228,32 +228,32 @@ div#payment_error { font-size: 16px; } -.checkout-cc .pensio_payment_form_expiration { +#checkout-cc .pensio_payment_form_expiration { display: flex; width: 100%; gap: 0 10px; } -.checkout-cc .pensio_payment_form_month { +#checkout-cc .pensio_payment_form_month { width: 30%; } -.checkout-cc .pensio_payment_form_year { +#checkout-cc .pensio_payment_form_year { width: 30%; } -.checkout-cc .pensio_payment_form_cvc { +#checkout-cc .pensio_payment_form_cvc { width: 40%; } -.checkout-cc .pensio_payment_form-cvc-input { +#checkout-cc .pensio_payment_form-cvc-input { display: flex; position: relative; } -.checkout-cc .cvc-icon { +#checkout-cc .cvc-icon { width: 35px; position: absolute; top: 0; @@ -263,7 +263,7 @@ div#payment_error { align-items: center; } -.checkout-cc .credit-card-visa-icon { +#checkout-cc .credit-card-visa-icon { position: absolute; top: 0; right: 0; @@ -273,7 +273,7 @@ div#payment_error { align-items: center; } -.checkout-cc .credit-card-mastercard-icon { +#checkout-cc .credit-card-mastercard-icon { position: absolute; top: 0; right: 0; @@ -283,7 +283,7 @@ div#payment_error { align-items: center; } -.checkout-cc .credit-card-maestro-icon { +#checkout-cc .credit-card-maestro-icon { position: absolute; top: 0; right: 0; @@ -293,7 +293,7 @@ div#payment_error { align-items: center; } -.checkout-cc #creditCardTypeIcon { +#checkout-cc #creditCardTypeIcon { height: 40%; width: auto; position: absolute; @@ -304,7 +304,7 @@ div#payment_error { margin: auto 1rem auto auto; } -.checkout-cc #creditCardTypeSecondIcon { +#checkout-cc #creditCardTypeSecondIcon { height: 40%; width: auto; position: absolute; @@ -315,7 +315,7 @@ div#payment_error { margin: auto 4rem auto auto; } -.checkout-cc #selectCardLabel { +#checkout-cc #selectCardLabel { position: absolute; right: 0; bottom: 0; @@ -324,34 +324,34 @@ div#payment_error { opacity: 0.7; } -.checkout-cc .pensio_payment_form_cvc-info-text { +#checkout-cc .pensio_payment_form_cvc-info-text { font-size: 10px; line-height: normal; } -.checkout-cc .pensio_payment_form_label_cell { +#checkout-cc .pensio_payment_form_label_cell { font-size: 16px; margin-bottom: 0; } -.checkout-cc .cardnumber_row { +#checkout-cc .cardnumber_row { margin-bottom: 20px; } -.checkout-cc .expiry_row { +#checkout-cc .expiry_row { display: flex; width: 100%; gap: 0 10px; } -.checkout-cc .submit_row { +#checkout-cc .submit_row { margin-top: 20px; } -.checkout-cc .AltaPaySubmitButton, -.checkout-cc #submitbutton, -.checkout-cc #cancelPayment, -.checkout-cc #EPayment button[type="submit"] { +#checkout-cc .AltaPaySubmitButton, +#checkout-cc #submitbutton, +#checkout-cc #cancelPayment, +#checkout-cc #EPayment button[type="submit"] { outline: none; padding: 15px 16px; color: white; @@ -364,22 +364,22 @@ div#payment_error { font-size: 17px; } -.checkout-cc .AltaPaySubmitButton, -.checkout-cc #EPayment button[type="submit"] { +#checkout-cc .AltaPaySubmitButton, +#checkout-cc #EPayment button[type="submit"] { background: #31C37E; } -.checkout-cc .AltaPaySubmitButton:hover, -.checkout-cc #EPayment button[type="submit"]:hover { +#checkout-cc .AltaPaySubmitButton:hover, +#checkout-cc #EPayment button[type="submit"]:hover { background: #16b36e; } -.checkout-cc .AltaPaySubmitButton:disabled, -.checkout-cc #submitbutton, -.checkout-cc #cancelPayment, -.checkout-cc #submitbutton:disabled, -.checkout-cc #EPayment button[type="submit"]:disabled { +#checkout-cc .AltaPaySubmitButton:disabled, +#checkout-cc #submitbutton, +#checkout-cc #cancelPayment, +#checkout-cc #submitbutton:disabled, +#checkout-cc #EPayment button[type="submit"]:disabled { background: black; outline: none; padding: 15px 16px; @@ -394,10 +394,10 @@ div#payment_error { } -.checkout-cc .pensio_required_field_indicator, -.checkout-cc #invalid_amex_cvc, -.checkout-cc #invalid_cvc, -.checkout-cc #invalid_cardholdername, +#checkout-cc .pensio_required_field_indicator, +#checkout-cc #invalid_amex_cvc, +#checkout-cc #invalid_cvc, +#checkout-cc #invalid_cardholdername, #invalid_cardholdername, #invalid_expire_month, #invalid_expire_year { @@ -407,8 +407,8 @@ div#payment_error { margin-top: 4px; } -.checkout-cc .PensioCloseButton, -.checkout-cc .CustomAltaPayCloseButton { +#checkout-cc .PensioCloseButton, +#checkout-cc .CustomAltaPayCloseButton { width: 40px; height: 20px; font-size: 18px; @@ -421,48 +421,48 @@ div#payment_error { top: 0; } -.checkout-cc .PensioRadioButton { +#checkout-cc .PensioRadioButton { border: none; background-color: transparent; cursor: pointer; } -.checkout-cc div.PensioMultiformContainer form { +#checkout-cc div.PensioMultiformContainer form { display: none; } -.checkout-cc #PensioJavascriptDisabledSurchargeNotice { +#checkout-cc #PensioJavascriptDisabledSurchargeNotice { color: red; background-color: white; } -.checkout-cc #iDealPayment table { +#checkout-cc #iDealPayment table { width: 100%; } -.checkout-cc #iDealPayment #pensioPaymentIdealSubmitButton { +#checkout-cc #iDealPayment #pensioPaymentIdealSubmitButton { margin-top: 20px; } -.checkout-cc #idealIssuer select { +#checkout-cc #idealIssuer select { color: #666; } -.checkout-cc .pensio_payment_form_cvc-info-text { +#checkout-cc .pensio_payment_form_cvc-info-text { margin-top: 2px; } -.checkout-cc select#birthdateDay, -.checkout-cc select#birthdateMonth, -.checkout-cc input#cancelPayment, -.checkout-cc input#enableAccount, -.checkout-cc input#acceptTerms, -.checkout-cc input#phoneNumber, -.checkout-cc input#organisationNumber { +#checkout-cc select#birthdateDay, +#checkout-cc select#birthdateMonth, +#checkout-cc input#cancelPayment, +#checkout-cc input#enableAccount, +#checkout-cc input#acceptTerms, +#checkout-cc input#phoneNumber, +#checkout-cc input#organisationNumber { margin-bottom: 10px; } -.checkout-cc div.PensioMultiformContainer form { +#checkout-cc div.PensioMultiformContainer form { position: relative; border: none; background-color: white; @@ -473,15 +473,15 @@ div#payment_error { width: 100%; } -.checkout-cc input#CreditCardButton { +#checkout-cc input#CreditCardButton { left: 0px; } -.checkout-cc input#GiftCardButton { +#checkout-cc input#GiftCardButton { left: 100px; } -.checkout-cc div.PensioMultiformContainer .FormTypeButton { +#checkout-cc div.PensioMultiformContainer .FormTypeButton { position: absolute; top: -32px; height: 32px; @@ -489,18 +489,18 @@ div#payment_error { border: 1px solid rgba(0, 0, 0, 0.16); } -.checkout-cc div.PensioMultiformContainer { +#checkout-cc div.PensioMultiformContainer { position: initial; } -.checkout-cc #Mobile .pensio_payment_form_label_cell { +#checkout-cc #Mobile .pensio_payment_form_label_cell { font-size: 16px; margin-bottom: 0; vertical-align: top; padding-top: 15px; } -.checkout-cc input#giftcard_account_identifier { +#checkout-cc input#giftcard_account_identifier { background-color: white; padding: 12px 14px; border-radius: 3px; @@ -509,8 +509,8 @@ div#payment_error { border: 1px solid rgba(0, 0, 0, 0.16); } -.checkout-cc .PensioMultiformContainer input#giftcard_account_identifier, -.checkout-cc table.pensio_payment_form_table { +#checkout-cc .PensioMultiformContainer input#giftcard_account_identifier, +#checkout-cc table.pensio_payment_form_table { width: 100%; } @@ -560,25 +560,25 @@ div#payment_error { padding-left: 84px; } -.checkout-cc #EPayment .pensio_payment_form_label_cell, -.checkout-cc #iDealPayment .pensio_payment_form_label_cell, -.checkout-cc #Mobile .pensio_payment_form_label_cell{ +#checkout-cc #EPayment .pensio_payment_form_label_cell, +#checkout-cc #iDealPayment .pensio_payment_form_label_cell, +#checkout-cc #Mobile .pensio_payment_form_label_cell{ display: block; padding: 0.25em 0; } -.checkout-cc #EPayment .pensio_payment_form_input_cell, -.checkout-cc #iDealPayment .pensio_payment_form_input_cell, -.checkout-cc #Mobile .pensio_payment_form_input_cell { +#checkout-cc #EPayment .pensio_payment_form_input_cell, +#checkout-cc #iDealPayment .pensio_payment_form_input_cell, +#checkout-cc #Mobile .pensio_payment_form_input_cell { padding: 0; display: block; } -.checkout-cc #Mobile .pensio_payment_form_input_cell input[type="text"] { +#checkout-cc #Mobile .pensio_payment_form_input_cell input[type="text"] { margin-bottom: 1.25em; } -.checkout-cc #Mobile div#paymentFormWaiting { +#checkout-cc #Mobile div#paymentFormWaiting { text-align: center; } From 4f9e77cc965c6bf62229a763891082a49aea4f28 Mon Sep 17 00:00:00 2001 From: Bushra Asif Date: Wed, 1 Oct 2025 19:46:24 +0000 Subject: [PATCH 6/6] Fix unit price and styling --- controllers/front/callbackform.php | 1 + views/css/payment.css | 43 +++++++++++++-------------- views/templates/front/cart_info17.tpl | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/controllers/front/callbackform.php b/controllers/front/callbackform.php index da6b500a..58964ee6 100644 --- a/controllers/front/callbackform.php +++ b/controllers/front/callbackform.php @@ -52,6 +52,7 @@ public function postProcess() $payment_style_id = 'legacy-cc'; } elseif ($payment_style == 'checkout-v2') { $payment_style .= ' checkout-cc'; + $payment_style_id = 'checkout-cc'; } $this->context->smarty->assign('stylingclass', $payment_style); $this->context->smarty->assign('stylingid', $payment_style_id); diff --git a/views/css/payment.css b/views/css/payment.css index f31855f5..5ecebfe6 100644 --- a/views/css/payment.css +++ b/views/css/payment.css @@ -139,7 +139,7 @@ div#payment_error { margin-bottom: 25px; } -.checkout-v2#checkout-cc { +.checkout-v2 { display: flex; } @@ -582,12 +582,11 @@ div#payment_error { text-align: center; } - -.checkout-v2 .pensio_payment_form_row { +.checkout-v2#checkout-cc .pensio_payment_form_row { margin-bottom: 0; } -.checkout-v2 .pensio_payment_form-date { +.checkout-v2#checkout-cc .pensio_payment_form-date { cursor: pointer; display: flex; align-items: center; @@ -598,15 +597,15 @@ div#payment_error { border-bottom-right-radius: 0px; } -.checkout-v2 .separator { +.checkout-v2#checkout-cc .separator { color: #a9a9ac; } -.checkout-v2 .pensio_payment_form_year { +.checkout-v2#checkout-cc .pensio_payment_form_year { width: 25%; } -.checkout-v2 .pensio_payment_form_card-number input { +.checkout-v2#checkout-cc .pensio_payment_form_card-number input { padding: 16px 14px; width: 100%; cursor: pointer; @@ -622,20 +621,20 @@ div#payment_error { box-shadow: none; } -.checkout-v2 .pensio_payment_form_card-number, -.checkout-v2 .pensio_payment_form_cardholder, -.checkout-v2 .pensio_payment_form-cvc-input { +.checkout-v2#checkout-cc .pensio_payment_form_card-number, +.checkout-v2#checkout-cc .pensio_payment_form_cardholder, +.checkout-v2#checkout-cc .pensio_payment_form-cvc-input { margin-top: 0 !important; } -.checkout-v2 .pensio_payment_form_cardholder input { +.checkout-v2#checkout-cc .pensio_payment_form_cardholder input { color: #666; outline: none; height: 51px; box-shadow: none; } -.checkout-v2 .pensio_payment_form-cvc-input input { +.checkout-v2#checkout-cc .pensio_payment_form-cvc-input input { padding: 16px 14px; height: 52px; box-sizing: border-box; @@ -654,7 +653,7 @@ div#payment_error { box-shadow: none; } -.checkout-v2 .expire-month, .checkout-v2 #emonth { +.checkout-v2#checkout-cc .expire-month, .checkout-v2#checkout-cc #emonth { height: 51px; padding-top: 16px; padding-bottom: 16px; @@ -671,7 +670,7 @@ div#payment_error { color: #666; } -.checkout-v2 .expiry-year { +.checkout-v2#checkout-cc .expiry-year { padding: 16px 4px; height: 51px; width: 100%; @@ -684,22 +683,22 @@ div#payment_error { color: #666; } -.checkout-v2 .pensio_payment_form_month { +.checkout-v2#checkout-cc .pensio_payment_form_month { width: 20%; max-width: 40px; } -.checkout-v2 .pensio_payment_form_cvc { +.checkout-v2#checkout-cc .pensio_payment_form_cvc { width: 50%; } -.checkout-v2 .pensio_payment_form_row.expiry_row { +.checkout-v2#checkout-cc .pensio_payment_form_row.expiry_row { float: none; margin-top: 0; gap: 0; justify-content: space-between; margin-bottom: 15px; } -.checkout-v2 .secure-payments-text { +.checkout-v2#checkout-cc .secure-payments-text { width: 100%; position: relative; float: left; @@ -707,20 +706,20 @@ div#payment_error { font-size: 10px; padding-top: 5px; } -.checkout-v2 div.payment-form-wrapper { +.checkout-v2#checkout-cc div.payment-form-wrapper { padding: 25px 25px 25px 25px !important; display: inline-block; width: 100%; } -.altapay-payment-form-cnt.altapay_content.checkout-v2 { +.altapay-payment-form-cnt.altapay_content.checkout-v2#checkout-cc { padding: 30px 25px 25px 25px; width: 100%; display: inline-block; } -.checkout-v2 .pensio_payment_form_cvc, -.checkout-v2 .pensio_payment_form_date-container{ +.checkout-v2#checkout-cc .pensio_payment_form_cvc, +.checkout-v2#checkout-cc .pensio_payment_form_date-container{ width: 50%; } diff --git a/views/templates/front/cart_info17.tpl b/views/templates/front/cart_info17.tpl index db3cd9ad..77a80cd5 100644 --- a/views/templates/front/cart_info17.tpl +++ b/views/templates/front/cart_info17.tpl @@ -51,7 +51,7 @@ {/if} - {$product.price} + {$currency_sign} {$product.price_wt|round:2}