From 7e1d0e3f2b8cc768e222f60943662b4de664356d Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:14:42 +0000 Subject: [PATCH 01/32] chore(deps): update github actions --- .github/workflows/aqua.yml | 2 +- .github/workflows/backport-pull-request.yml | 2 +- .github/workflows/ci.yaml | 2 +- .github/workflows/e2e-test-post-results.yml | 2 +- .github/workflows/e2e-test.yaml | 4 ++-- .github/workflows/hotfix-pull-request.yml | 2 +- .github/workflows/pr-labeler.yml | 2 +- .github/workflows/release-publish.yml | 2 +- .github/workflows/release-pull-request.yml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/aqua.yml b/.github/workflows/aqua.yml index 633e7bc41..c02326ffa 100644 --- a/.github/workflows/aqua.yml +++ b/.github/workflows/aqua.yml @@ -8,7 +8,7 @@ on: jobs: aqua: name: Aqua scanner - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/.github/workflows/backport-pull-request.yml b/.github/workflows/backport-pull-request.yml index c79d97415..da7391057 100644 --- a/.github/workflows/backport-pull-request.yml +++ b/.github/workflows/backport-pull-request.yml @@ -13,7 +13,7 @@ jobs: create-backport-pull-request: if: ${{ (github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release')) }} - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4c9c31314..c107191da 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,7 +14,7 @@ jobs: lint-and-test: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/e2e-test-post-results.yml b/.github/workflows/e2e-test-post-results.yml index 33a8702e6..57c7a9a94 100644 --- a/.github/workflows/e2e-test-post-results.yml +++ b/.github/workflows/e2e-test-post-results.yml @@ -23,7 +23,7 @@ on: jobs: e2e-post-results: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 6b2ad2220..86ff66e05 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -8,7 +8,7 @@ on: jobs: launch: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 if: github.event.pull_request.draft == false && !contains(github.event.pull_request.labels.*.name, 'hotfix') strategy: @@ -53,7 +53,7 @@ jobs: repositories: integration-infrastructure - name: Trigger E2E tests in the integration-infrastructure repository - uses: codex-/return-dispatch@v1 + uses: codex-/return-dispatch@v2 id: e2e-tests-workflow-dispatch with: token: ${{ steps.github-token-infrastructure.outputs.token }} diff --git a/.github/workflows/hotfix-pull-request.yml b/.github/workflows/hotfix-pull-request.yml index 227f2fde7..16251bbcb 100644 --- a/.github/workflows/hotfix-pull-request.yml +++ b/.github/workflows/hotfix-pull-request.yml @@ -11,7 +11,7 @@ on: jobs: create-hotfix-pull-request: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 62015b278..d3f2d9ee8 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -9,7 +9,7 @@ jobs: contents: read pull-requests: write - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: TimonVS/pr-labeler-action@v5 env: diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml index a0c5c9f14..7007c8a27 100644 --- a/.github/workflows/release-publish.yml +++ b/.github/workflows/release-publish.yml @@ -11,7 +11,7 @@ jobs: release: if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'release') - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: diff --git a/.github/workflows/release-pull-request.yml b/.github/workflows/release-pull-request.yml index 7b77d76dc..e5cc23232 100644 --- a/.github/workflows/release-pull-request.yml +++ b/.github/workflows/release-pull-request.yml @@ -6,7 +6,7 @@ on: jobs: create-release-pull-request: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: From 581c43c82ded315a1524cec19a6e8efe0b488b3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Zuffinetti?= Date: Tue, 8 Oct 2024 14:22:15 +0200 Subject: [PATCH 02/32] Try setuping python first --- .github/workflows/ci.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index c107191da..53b8cbaf7 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -25,6 +25,11 @@ jobs: version: 3.x repo-token: ${{ github.token }} + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 From 090c43401af25ccafa2f403b7ad0588cbee0556b Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Tue, 8 Oct 2024 19:09:18 +0200 Subject: [PATCH 03/32] feat: add inpage setting for selector payment buttons --- .../hook/FrontHeaderHookController.php | 12 +++++ .../hook/GetContentHookController.php | 4 ++ alma/lib/Forms/InpageAdminFormBuilder.php | 24 +++++++++ alma/lib/Helpers/SettingsHelper.php | 14 +++++ alma/upgrade/upgrade-4.5.0.php | 54 +++++++++++++++++++ alma/views/js/alma-inpage.js | 11 ++-- .../templates/front/payment_form_inpage.tpl | 1 + 7 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 alma/upgrade/upgrade-4.5.0.php diff --git a/alma/controllers/hook/FrontHeaderHookController.php b/alma/controllers/hook/FrontHeaderHookController.php index 13cbed51d..91d7e4727 100644 --- a/alma/controllers/hook/FrontHeaderHookController.php +++ b/alma/controllers/hook/FrontHeaderHookController.php @@ -478,8 +478,20 @@ private function assetsInPage() $this->controller->unregisterJavascript(ConstantsHelper::WIDGETS_JS_ID); } } + + $content .= $this->almaInPageHeader(); } return $content; } + + /** + * @return string + */ + protected function almaInPageHeader() + { + $settings = json_encode($this->settingsHelper->getInPageSettings()); + + return "
"; + } } diff --git a/alma/controllers/hook/GetContentHookController.php b/alma/controllers/hook/GetContentHookController.php index 2b4bcc58b..099a943ec 100644 --- a/alma/controllers/hook/GetContentHookController.php +++ b/alma/controllers/hook/GetContentHookController.php @@ -133,6 +133,8 @@ final class GetContentHookController extends AdminHookController 'action' => 'cast_bool', 'suffix' => '_ON', ], + InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR => 'none', + InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR => 'none', 'ALMA_ACTIVATE_LOGGING' => [ 'action' => 'cast_bool', 'suffix' => '_ON', @@ -709,6 +711,8 @@ protected function getFieldsValueForForm() PaymentButtonAdminFormBuilder::ALMA_PNX_AIR_BUTTON_DESC ), InpageAdminFormBuilder::ALMA_ACTIVATE_INPAGE . '_ON' => $this->settingsHelper->isInPageEnabled(), + InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR => $this->settingsHelper->getKey(InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PAYMENT_BUTTON_SELECTOR), + InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR => $this->settingsHelper->getKey(InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PLACE_ORDER_BUTTON_SELECTOR), 'ALMA_SHOW_DISABLED_BUTTON' => SettingsHelper::showDisabledButton(), 'ALMA_SHOW_ELIGIBILITY_MESSAGE_ON' => SettingsHelper::showEligibilityMessage(), 'ALMA_CART_WDGT_NOT_ELGBL_ON' => SettingsHelper::showCartWidgetIfNotEligible(), diff --git a/alma/lib/Forms/InpageAdminFormBuilder.php b/alma/lib/Forms/InpageAdminFormBuilder.php index bd22fcaa4..cbdedfddf 100644 --- a/alma/lib/Forms/InpageAdminFormBuilder.php +++ b/alma/lib/Forms/InpageAdminFormBuilder.php @@ -34,6 +34,10 @@ class InpageAdminFormBuilder extends AbstractAlmaAdminFormBuilder { const ALMA_ACTIVATE_INPAGE = 'ALMA_ACTIVATE_INPAGE'; + const ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR = 'ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR'; + const ALMA_INPAGE_DEFAULT_VALUE_PAYMENT_BUTTON_SELECTOR = '[data-module-name=alma]'; + const ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR = 'ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR'; + const ALMA_INPAGE_DEFAULT_VALUE_PLACE_ORDER_BUTTON_SELECTOR = '#payment-confirmation button'; /** * @return array @@ -47,6 +51,26 @@ protected function configForm() $this->module->l('Activate in-page checkout for Pay Now, P2X, P3X and P4X', 'InpageAdminFormBuilder'), $this->module->l('The checkout in-page in your own website', 'InpageAdminFormBuilder') ), + $this->inputTextForm( + self::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, + $this->module->l('Input payment button Alma selector', 'InpageAdminFormBuilder'), + sprintf( + $this->module->l('%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the payment button Alma', 'InpageAdminFormBuilder'), + '', + '' + ), + $this->module->l('E.g. #id, .class, ...', 'InpageAdminFormBuilder') + ), + $this->inputTextForm( + self::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, + $this->module->l('Place order button selector', 'InpageAdminFormBuilder'), + sprintf( + $this->module->l('%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the place order button', 'InpageAdminFormBuilder'), + '', + '' + ), + $this->module->l('E.g. #id, .class, ...', 'InpageAdminFormBuilder') + ), ]; } diff --git a/alma/lib/Helpers/SettingsHelper.php b/alma/lib/Helpers/SettingsHelper.php index 2110dde7b..762b13e63 100644 --- a/alma/lib/Helpers/SettingsHelper.php +++ b/alma/lib/Helpers/SettingsHelper.php @@ -193,6 +193,8 @@ public static function deleteAllValues() PaymentButtonAdminFormBuilder::ALMA_PNX_AIR_BUTTON_DESC, ExcludedCategoryAdminFormBuilder::ALMA_NOT_ELIGIBLE_CATEGORIES, InpageAdminFormBuilder::ALMA_ACTIVATE_INPAGE, + InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, + InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, 'ALMA_STATE_REFUND', 'ALMA_STATE_REFUND_ENABLED', 'ALMA_STATE_TRIGGER', @@ -496,6 +498,18 @@ public function isInPageEnabled() return (bool) (int) $this->getKey(InpageAdminFormBuilder::ALMA_ACTIVATE_INPAGE, false); } + /** + * @return array + */ + public function getInPageSettings() + { + return [ + 'enabled' => $this->isInPageEnabled(), + 'paymentButtonSelector' => $this->getKey(InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PAYMENT_BUTTON_SELECTOR), + 'placeOrderButtonSelector' => $this->getKey(InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PLACE_ORDER_BUTTON_SELECTOR), + ]; + } + /** * Return activated plans. * diff --git a/alma/upgrade/upgrade-4.5.0.php b/alma/upgrade/upgrade-4.5.0.php new file mode 100644 index 000000000..3d09f038c --- /dev/null +++ b/alma/upgrade/upgrade-4.5.0.php @@ -0,0 +1,54 @@ + + * @copyright 2018-2024 Alma SAS + * @license https://opensource.org/licenses/MIT The MIT License + */ + +use Alma\PrestaShop\Builders\Helpers\SettingsHelperBuilder; +use Alma\PrestaShop\Forms\InpageAdminFormBuilder; +use Alma\PrestaShop\Helpers\ConstantsHelper; + +if (!defined('_PS_VERSION_')) { + exit; +} + +function upgrade_module_4_5_0($module) +{ + $settingsHelperBuilder = new SettingsHelperBuilder(); + $settingsHelper = $settingsHelperBuilder->getInstance(); + + // Add default selector for In-Page + $settingsHelper->updateKey( + InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, + InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PAYMENT_BUTTON_SELECTOR + ); + $settingsHelper->updateKey( + InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, + InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PLACE_ORDER_BUTTON_SELECTOR + ); + + if (version_compare(_PS_VERSION_, ConstantsHelper::PRESTASHOP_VERSION_1_7_0_2, '>')) { + Tools::clearAllCache(); + Tools::clearXMLCache(); + } + + return true; +} diff --git a/alma/views/js/alma-inpage.js b/alma/views/js/alma-inpage.js index 4b3949a84..fdae1fd34 100644 --- a/alma/views/js/alma-inpage.js +++ b/alma/views/js/alma-inpage.js @@ -20,9 +20,12 @@ * @copyright 2018-2024 Alma SAS * @license https://opensource.org/licenses/MIT The MIT License */ - +if (!document.getElementById('alma-inpage-global')) { + throw new Error('[Alma] In Page Settings is missing.'); +} let inPage = undefined; let paymentButtonEvents = []; +const inPageSettings = JSON.parse(document.querySelector('#alma-inpage-global').dataset.settings); window.addEventListener("load", function() { onloadAlma(); @@ -50,7 +53,7 @@ function onloadAlma() { if (inPage !== undefined) { inPage.unmount(); } - if (this.dataset.moduleName === 'alma') { + if ($(input).is(inPageSettings.paymentButtonSelector)) { let formInpage = blockForm.querySelector('.alma-inpage'); if (this.checked && formInpage) { let installment = formInpage.dataset.installment; @@ -138,7 +141,7 @@ function createAlmaIframe(form, showPayButton = false, url = '') { } function mapPaymentButtonToAlmaPaymentCreation(url, inPage, input) { - let paymentButton = document.querySelector('#payment-confirmation button'); + let paymentButton = document.querySelector(inPageSettings.placeOrderButtonSelector); const eventAlma = async function (e) { e.preventDefault(); @@ -190,7 +193,7 @@ async function createPayment(url, inPage, input = null) { function removeAlmaEventsFromPaymentButton() { let event = paymentButtonEvents.shift(); while (event) { - document.querySelector('#payment-confirmation button').removeEventListener('click', event); + document.querySelector(inPageSettings.placeOrderButtonSelector).removeEventListener('click', event); event = paymentButtonEvents.shift(); } } diff --git a/alma/views/templates/front/payment_form_inpage.tpl b/alma/views/templates/front/payment_form_inpage.tpl index e51b0df42..551a7ac07 100644 --- a/alma/views/templates/front/payment_form_inpage.tpl +++ b/alma/views/templates/front/payment_form_inpage.tpl @@ -32,3 +32,4 @@ data-locale="{$locale|escape:'htmlall':'UTF-8'}">
+ From 3b2f5644add301413550e6b703cce806d1ca191a Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Wed, 9 Oct 2024 10:55:43 +0200 Subject: [PATCH 04/32] feat: add unit test --- alma/tests/Unit/Helper/SettingsHelperTest.php | 78 ++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/alma/tests/Unit/Helper/SettingsHelperTest.php b/alma/tests/Unit/Helper/SettingsHelperTest.php index d2a0eded1..1b2506d75 100644 --- a/alma/tests/Unit/Helper/SettingsHelperTest.php +++ b/alma/tests/Unit/Helper/SettingsHelperTest.php @@ -26,6 +26,7 @@ use Alma\API\Entities\FeePlan; use Alma\PrestaShop\Builders\Helpers\SettingsHelperBuilder; +use Alma\PrestaShop\Forms\InpageAdminFormBuilder; use Alma\PrestaShop\Helpers\ConfigurationHelper; use Alma\PrestaShop\Helpers\SettingsHelper; use Alma\PrestaShop\Helpers\ShopHelper; @@ -37,11 +38,32 @@ class SettingsHelperTest extends TestCase * @var SettingsHelper */ protected $settingsHelper; + /** + * @var ShopHelper + */ + protected $shopHelper; + /** + * @var ConfigurationHelper + */ + protected $configurationHelper; + /** + * @var (SettingsHelper&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit_Framework_MockObject_MockObject + */ + protected $settingsHelperMock; public function setUp() { - $settingsHelperBuilder = new SettingsHelperBuilder(); - $this->settingsHelper = $settingsHelperBuilder->getInstance(); + $this->shopHelper = $this->createMock(ShopHelper::class); + $this->configurationHelper = $this->createMock(ConfigurationHelper::class); + $this->settingsHelper = new SettingsHelper( + $this->shopHelper, + $this->configurationHelper + ); + + $this->settingsHelperMock = $this->getMockBuilder(SettingsHelper::class) + ->setConstructorArgs([$this->shopHelper, $this->configurationHelper]) + ->setMethods(['isInPageEnabled', 'getKey']) + ->getMock(); } /** @@ -417,7 +439,57 @@ public function testGetExcludedCategories() $this->assertEquals([], $result); } - public function testGetDataFromKey() + /** + * @dataProvider inPageSettingsDataProvider + * + * @return void + */ + public function testGetInPageSettingsDefaultValues($isInPageEnabled, $paymentButtonSelector, $placeOrderButtonSelector) + { + $this->settingsHelperMock->expects($this->once()) + ->method('isInPageEnabled') + ->willReturn($isInPageEnabled); + $this->settingsHelperMock->expects($this->exactly(2)) + ->method('getKey') + ->withConsecutive( + [InpageAdminFormBuilder::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PAYMENT_BUTTON_SELECTOR], + [InpageAdminFormBuilder::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PLACE_ORDER_BUTTON_SELECTOR] + ) + ->willReturnOnConsecutiveCalls( + $paymentButtonSelector, + $placeOrderButtonSelector + ); + + $expected = [ + 'enabled' => $isInPageEnabled, + 'paymentButtonSelector' => $paymentButtonSelector, + 'placeOrderButtonSelector' => $placeOrderButtonSelector, + ]; + + $this->assertEquals($expected, $this->settingsHelperMock->getInPageSettings()); + } + + /** + * @return array[] + */ + public function inPageSettingsDataProvider() { + return [ + 'Default values' => [ + 'enabled' => false, + 'paymentButtonSelector' => InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PAYMENT_BUTTON_SELECTOR, + 'placeOrderButtonSelector' => InpageAdminFormBuilder::ALMA_INPAGE_DEFAULT_VALUE_PLACE_ORDER_BUTTON_SELECTOR, + ], + 'in-page disable and selector custom' => [ + 'enabled' => false, + 'paymentButtonSelector' => 'payment button selector custom', + 'placeOrderButtonSelector' => 'place order selector custom', + ], + 'in-page enable and selector custom' => [ + 'enabled' => true, + 'paymentButtonSelector' => 'payment button selector custom', + 'placeOrderButtonSelector' => 'place order selector custom', + ], + ]; } } From 085bc334684d0ac6010d97ce666ee0cd0407c675 Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Wed, 9 Oct 2024 10:58:06 +0200 Subject: [PATCH 05/32] feat: review Sonar --- alma/upgrade/upgrade-4.5.0.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alma/upgrade/upgrade-4.5.0.php b/alma/upgrade/upgrade-4.5.0.php index 3d09f038c..319a66e74 100644 --- a/alma/upgrade/upgrade-4.5.0.php +++ b/alma/upgrade/upgrade-4.5.0.php @@ -30,7 +30,7 @@ exit; } -function upgrade_module_4_5_0($module) +function upgrade_module_4_5_0() { $settingsHelperBuilder = new SettingsHelperBuilder(); $settingsHelper = $settingsHelperBuilder->getInstance(); From cd15399a0d2b2521f6f636fdfae7e085e9d53dad Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:15:12 +0000 Subject: [PATCH 06/32] chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v5 --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ad09459f1..9c798c3fe 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,7 +8,7 @@ repos: name: Check commit message format stages: [commit-msg] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: check-added-large-files args: ["--maxkb=1024"] From c24175f452b01e19d620a6ca9e339a5f8b16a08e Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Mon, 14 Oct 2024 14:57:12 +0200 Subject: [PATCH 07/32] feat: review [FRA] --- alma/views/js/alma-inpage.js | 11 +-- .../hook/_partials/displayPayment_pnx.tpl | 94 ------------------- 2 files changed, 5 insertions(+), 100 deletions(-) delete mode 100644 alma/views/templates/hook/_partials/displayPayment_pnx.tpl diff --git a/alma/views/js/alma-inpage.js b/alma/views/js/alma-inpage.js index fdae1fd34..29046e83e 100644 --- a/alma/views/js/alma-inpage.js +++ b/alma/views/js/alma-inpage.js @@ -20,14 +20,15 @@ * @copyright 2018-2024 Alma SAS * @license https://opensource.org/licenses/MIT The MIT License */ -if (!document.getElementById('alma-inpage-global')) { - throw new Error('[Alma] In Page Settings is missing.'); -} let inPage = undefined; let paymentButtonEvents = []; -const inPageSettings = JSON.parse(document.querySelector('#alma-inpage-global').dataset.settings); +let inPageSettings = {}; window.addEventListener("load", function() { + if (!document.getElementById('alma-inpage-global')) { + throw new Error('[Alma] In Page Settings is missing.'); + } + inPageSettings = JSON.parse(document.querySelector('#alma-inpage-global').dataset.settings); onloadAlma(); window.__alma_refreshInpage = onloadAlma; }); @@ -105,7 +106,6 @@ function createAlmaIframe(form, showPayButton = false, url = '') { let locale = form.dataset.locale; let selectorIframeInPage = form.querySelector('.alma-inpage-iframe'); - if (showPayButton) { inPage = Alma.InPage.initialize( { @@ -172,7 +172,6 @@ async function createPayment(url, inPage, input = null) { inPage.unmount(); } removeAlmaEventsFromPaymentButton(); - onloadAlma(); } } ); diff --git a/alma/views/templates/hook/_partials/displayPayment_pnx.tpl b/alma/views/templates/hook/_partials/displayPayment_pnx.tpl deleted file mode 100644 index cf92acc74..000000000 --- a/alma/views/templates/hook/_partials/displayPayment_pnx.tpl +++ /dev/null @@ -1,94 +0,0 @@ -{* - * 2018-2024 Alma SAS - * - * THE MIT LICENSE - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated - * documentation files (the "Software"), to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and - * to permit persons to whom the Software is furnished to do so, subject to the following conditions: - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * @author Alma SAS - * @copyright 2018-2024 Alma SAS - * @license https://opensource.org/licenses/MIT The MIT License - *} -{if $option.disabled} - -{else} - {if $options} - - {/if} -{/if} From 43cd6edfbce1ed1c7f46d528f1ce9a73333999f5 Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Mon, 14 Oct 2024 15:05:23 +0200 Subject: [PATCH 08/32] feat: update translation --- alma/translations/en.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/alma/translations/en.php b/alma/translations/en.php index 98e702b2d..79c60b3a2 100644 --- a/alma/translations/en.php +++ b/alma/translations/en.php @@ -81,6 +81,11 @@ $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Activate in-page checkout'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Activate in-page checkout for Pay Now, P2X, P3X and P4X'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'The checkout in-page in your own website'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Input payment button Alma selector'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_fb28105057d934b2ddc35a775938069b'] = '%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the payment button Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'E.g. #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Place order button selector'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8fbbdefb0c9073d81c746e70f7168f3e'] = '%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the place order button'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'In-page checkout'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'This widget allows you to inform your customers of the availability of Alma\'s payment facilities right from the product page, which will help to increase your conversion rate. For more details on its configuration or in case of problems, please consult %1$sthis documentation%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Display widget'; @@ -148,7 +153,8 @@ $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Orders'; $_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'I hereby acknowledge my acceptance to subscribe to the insurance offered by Alma. In doing so, I confirm that I have previously reviewed the [information notice, which constitutes the general conditions], the [insurance product information document], and the [pre-contractual information and advice sheet]. I ahead to it without reservation and agree to electronically sign the various documents forming my contract, if applicable. I expressly consent to the collection and use of my personal data for the purpose of subscribing to and managing my insurance contract(s).'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'Your configuration has been saved'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Error creating configuration Alma insurance: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Error insurance product during change configuration: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Error creating configuration Alma insurance: %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Orders with insurance'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Id Order'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Reference'; @@ -319,4 +325,3 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'You can find your Live API key in %1$syour Alma dashboard%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'To use the Test mode, you need your Test API key from %1$syour sandbox dasboard%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'If you have any problems, please contact us by email at %1$ssupport@getalma.eu%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'Alma Monthly Installments are not available for this order'; From 8c156c836272814f9a7172d42525629c5e3d1c93 Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:50:03 +0200 Subject: [PATCH 09/32] chore(deps): update pre-commit repositories (#570) Co-authored-by: alma-renovate-bot[bot] <163289924+alma-renovate-bot[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9c798c3fe..9ab3239d2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/commitizen-tools/commitizen - rev: v3.29.0 + rev: v3.29.1 hooks: - id: commitizen name: Check commit message format @@ -39,7 +39,7 @@ repos: stages: [commit] - repo: https://github.com/returntocorp/semgrep - rev: v1.87.0 + rev: v1.91.0 hooks: - id: semgrep args: From 3fe44a324e31d389068282482f55c1f6028a8cd3 Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:12:49 +0000 Subject: [PATCH 10/32] chore(deps): update pre-commit hook returntocorp/semgrep to v1.92.0 --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ab3239d2..1658fc56a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,7 +39,7 @@ repos: stages: [commit] - repo: https://github.com/returntocorp/semgrep - rev: v1.91.0 + rev: v1.92.0 hooks: - id: semgrep args: From 69a01931b96af23a16a22b59e98cb0a76095b815 Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Tue, 22 Oct 2024 10:11:24 +0200 Subject: [PATCH 11/32] feat: add renovate in pre-commit check branch name --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1658fc56a..4936c40d8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -58,4 +58,4 @@ repos: hooks: - id: check-branch-name args: - - "-r^((chore|ci|dependabot|devx|docs|feature|fix|release|hotfix|hotfix-backport|infra|other|perf|refactor|security|test)\/.+|(snyk)-.+|main|develop|HEAD)$$" + - "-r^((chore|ci|dependabot|devx|renovate|docs|feature|fix|release|hotfix|hotfix-backport|infra|other|perf|refactor|security|test)\/.+|(snyk)-.+|main|develop|HEAD)$$" From cad5a95c03a46c4a361868144bb167c6b80b4b5c Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 23 Oct 2024 15:48:07 +0200 Subject: [PATCH 12/32] fix: stop polluting the global JS scope --- alma/views/js/alma-product-insurance.js | 462 ++++++++++++------------ 1 file changed, 227 insertions(+), 235 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 74082f793..7860d9083 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -20,19 +20,20 @@ * @copyright 2018-2024 Alma SAS * @license https://opensource.org/licenses/MIT The MIT License */ -if (!document.getElementById('alma-widget-insurance-product-page')) { - throw new Error('[Alma] Product details not found. You need to add the hook displayProductActions in your template product page.'); -} -const settings = getSettingsInsurance(); -let insuranceSelected = false; -let selectedAlmaInsurance = null; -let addToCartFlow = false; -let productDetails = JSON.parse(document.querySelector('.alma-widget-insurance .js-product-details').dataset.product); -let quantity = getQuantity(); -let almaEligibilityAnswer = false; - (function ($) { $(function () { + if (!document.getElementById('alma-widget-insurance-product-page')) { + throw new Error('[Alma] Product details not found. You need to add the hook displayProductActions in your template product page.'); + } + + const settings = getSettingsInsurance(); + let insuranceSelected = false; + let selectedAlmaInsurance = null; + let addToCartFlow = false; + let productDetails = JSON.parse(document.querySelector('.alma-widget-insurance .js-product-details').dataset.product); + let quantity = getQuantity(); + let almaEligibilityAnswer = false; + //Insurance $("body").on("hidden.bs.modal", "#blockcart-modal", function (e) { removeInsurance(); @@ -41,245 +42,236 @@ let almaEligibilityAnswer = false; btnLoaders('start'); onloadAddInsuranceInputOnProductAlma(); if (typeof prestashop !== 'undefined') { - prestashop.on( - 'updateProduct', - function (event) { - let addToCart = document.querySelector('.add-to-cart'); + prestashop.on('updateProduct', function (event) { + let addToCart = document.querySelector('.add-to-cart'); - if (event.event !== undefined) { - quantity = getQuantity(); + if (event.event !== undefined) { + quantity = getQuantity(); + } + if (event.eventType === 'updatedProductQuantity') { + quantity = getQuantity(); + if (event.event) { + quantity = event.event.target.value; } - if (event.eventType === 'updatedProductQuantity') { - quantity = getQuantity(); - if (event.event) { - quantity = event.event.target.value; + removeInsurance(); + } + if (event.eventType === 'updatedProductCombination') { + removeInsurance(); + } + if (typeof event.selectedAlmaInsurance !== 'undefined' && event.selectedAlmaInsurance !== null) { + insuranceSelected = true; + addInputsInsurance(event); + } + if (typeof event.selectedInsuranceData !== 'undefined' && event.selectedInsuranceData) { + removeInputInsurance(); + } + if (addToCartFlow) { + addToCart.click(); + insuranceSelected = false; + addToCartFlow = false; + } + }); + prestashop.on('updatedProduct', function (data) { + // TODO: + // - use data.product_details to load latest product details from the data-product attribute of the div + // - fallback to #product-details[data-product] if for any reason we cannot find what we need in `data` + // - have a last fallback to making our own AJAX call? + + document.querySelector('.qty [name="qty"]').value = quantity; + + productDetails = JSON.parse(document.querySelector('.alma-widget-insurance .js-product-details').dataset.product); + productDetails.quantity_wanted = parseInt(quantity); + + document.querySelector('.alma-widget-insurance .js-product-details').dataset.product = JSON.stringify(productDetails); + refreshWidget(); + addModalListenerToAddToCart(); + }); + } + + + function getQuantity() { + var quantity = 1; + if (document.querySelector('.qty [name="qty"]')) { + quantity = parseInt(document.querySelector('.qty [name="qty"]').value); + } + return quantity + } + + function getSettingsInsurance() { + if (document.querySelector('#alma-widget-insurance-product-page')) { + return JSON.parse(document.querySelector('#alma-widget-insurance-product-page').dataset.almaInsuranceSettings); + } + + return null; + } + + function btnLoaders(action) { + const addBtn = $(".add-to-cart"); + if (action === 'start') { + $('
').insertBefore($(".add-to-cart i")); + addBtn.attr("disabled", "disabled"); + } + if (action === 'stop') { + $(".spinner").remove(); + addBtn.removeAttr("disabled"); + addModalListenerToAddToCart(); + } + } + + // ** Add input insurance in form to add to cart ** + function onloadAddInsuranceInputOnProductAlma() { + let currentResolve; + + window.addEventListener('message', (e) => { + let widgetInsurance = document.getElementById('alma-widget-insurance-product-page'); + if (e.data.type === 'almaEligibilityAnswer') { + almaEligibilityAnswer = e.data.eligibilityCallResponseStatus.response.eligibleProduct; + btnLoaders('stop'); + if (almaEligibilityAnswer) { + prestashop.emit('updateProduct', { + reason: { + productUrl: window.location.href, + } + }); + } else { + widgetInsurance.style.display = 'none'; + let addToCart = document.querySelector('.add-to-cart'); + if (addToCart) { + addToCart.removeEventListener("click", insuranceListener) } - removeInsurance(); - } - if (event.eventType === 'updatedProductCombination') { - removeInsurance(); - } - if (typeof event.selectedAlmaInsurance !== 'undefined' && event.selectedAlmaInsurance !== null) { - insuranceSelected = true; - addInputsInsurance(event); - } - if (typeof event.selectedInsuranceData !== 'undefined' && event.selectedInsuranceData) { - removeInputInsurance(); - } - if (addToCartFlow) { - addToCart.click(); - insuranceSelected = false; - addToCartFlow = false; } } - ); - prestashop.on( - 'updatedProduct', - function () { - document.querySelector('.qty [name="qty"]').value = quantity; - productDetails = JSON.parse(document.querySelector('.alma-widget-insurance .js-product-details').dataset.product); - productDetails.quantity_wanted = parseInt(quantity); - document.querySelector('.alma-widget-insurance .js-product-details').dataset.product = JSON.stringify(productDetails); - refreshWidget(); - addModalListenerToAddToCart(); + if (e.data.type === 'changeWidgetHeight') { + widgetInsurance.style.height = e.data.widgetHeight + 'px'; } - ); - } - }); -})(jQuery); - -function getQuantity() { - var quantity = 1; - if (document.querySelector('.qty [name="qty"]')) { - quantity = parseInt(document.querySelector('.qty [name="qty"]').value); - } - return quantity -} - -function getSettingsInsurance() { - if (document.querySelector('#alma-widget-insurance-product-page')) { - return JSON.parse(document.querySelector('#alma-widget-insurance-product-page').dataset.almaInsuranceSettings); - } - - return null; -} - -function btnLoaders(action) { - const addBtn = $(".add-to-cart"); - if (action === 'start') { - $('
').insertBefore($(".add-to-cart i")); - addBtn.attr("disabled", "disabled"); - } - if (action === 'stop') { - $(".spinner").remove(); - addBtn.removeAttr("disabled"); - addModalListenerToAddToCart(); - } -} - -// ** Add input insurance in form to add to cart ** -function onloadAddInsuranceInputOnProductAlma() { - let currentResolve; - - window.addEventListener('message', (e) => { - let widgetInsurance = document.getElementById('alma-widget-insurance-product-page'); - if (e.data.type === 'almaEligibilityAnswer') { - almaEligibilityAnswer = e.data.eligibilityCallResponseStatus.response.eligibleProduct; - btnLoaders('stop'); - if (almaEligibilityAnswer) { - prestashop.emit('updateProduct', { - reason:{ - productUrl: window.location.href, + if (e.data.type === 'getSelectedInsuranceData') { + if (parseInt(document.querySelector('.qty [name="qty"]').value) !== quantity) { + quantity = getQuantity(); } - }); - } else { - widgetInsurance.style.display = 'none'; - let addToCart = document.querySelector('.add-to-cart'); - if (addToCart) { - addToCart.removeEventListener("click", insuranceListener) + insuranceSelected = true; + selectedAlmaInsurance = e.data.selectedInsuranceData; + prestashop.emit('updateProduct', { + reason: { + productUrl: window.location.href + }, + selectedAlmaInsurance: selectedAlmaInsurance, + selectedInsuranceData: e.data.declinedInsurance, + selectedInsuranceQuantity: e.data.selectedInsuranceQuantity + }); + } else if (currentResolve) { + currentResolve(e.data); + } + }); + } + + function refreshWidget() { + let cmsReference = createCmsReference(productDetails); + let priceAmount = productDetails.price_amount; + if (productDetails.price_amount === undefined) { + priceAmount = productDetails.price; + } + let staticPriceToCents = Math.round(priceAmount * 100); + + quantity = productDetails.quantity_wanted; + if (productDetails.quantity_wanted <= 0) { + quantity = 1; + } + + getProductDataForApiCall(cmsReference, staticPriceToCents, productDetails.name, settings.merchant_id, quantity, settings.cart_id, settings.session_id, insuranceSelected); + } + + function createCmsReference(productDetails) { + if (productDetails.id_product !== null) { + if (productDetails.id_product_attribute <= '0') { + return productDetails.id_product; } + + return productDetails.id_product + '-' + productDetails.id_product_attribute; } + + return undefined; } - if (e.data.type === 'changeWidgetHeight') { - widgetInsurance.style.height = e.data.widgetHeight + 'px'; + + function addInputsInsurance(event) { + let formAddToCart = document.getElementById('add-to-cart-or-refresh'); + let selectedInsuranceQuantity = event.selectedInsuranceQuantity; + + if (selectedInsuranceQuantity > quantity) { + selectedInsuranceQuantity = quantity + } + + handleInput('alma_id_insurance_contract', event.selectedAlmaInsurance.insuranceContractId, formAddToCart); + handleInput('alma_quantity_insurance', selectedInsuranceQuantity, formAddToCart); + } - if (e.data.type === 'getSelectedInsuranceData') { - if (parseInt(document.querySelector('.qty [name="qty"]').value) !== quantity) { - quantity = getQuantity(); + + function handleInput(inputName, value, form) { + let elementInput = document.getElementById(inputName); + if (elementInput == null) { + let input = document.createElement('input'); + input.setAttribute('value', value); + input.setAttribute('name', inputName); + input.setAttribute('class', 'alma_insurance_input'); + input.setAttribute('id', inputName); + input.setAttribute('type', 'hidden'); + + form.prepend(input); + } else { + elementInput.setAttribute('value', value); } - insuranceSelected = true; - selectedAlmaInsurance = e.data.selectedInsuranceData; - prestashop.emit('updateProduct', { - reason:{ - productUrl: window.location.href - }, - selectedAlmaInsurance: selectedAlmaInsurance, - selectedInsuranceData: e.data.declinedInsurance, - selectedInsuranceQuantity: e.data.selectedInsuranceQuantity + } + + function removeInsurance() { + resetInsurance(); + insuranceSelected = false; + removeInputInsurance(); + } + + function removeInputInsurance() { + let inputsInsurance = document.getElementById('add-to-cart-or-refresh').querySelectorAll('.alma_insurance_input'); + inputsInsurance.forEach((input) => { + input.remove(); }); - } else if (currentResolve) { - currentResolve(e.data); } - }); -} - -function refreshWidget() { - let cmsReference = createCmsReference(productDetails); - let priceAmount = productDetails.price_amount; - if (productDetails.price_amount === undefined) { - priceAmount = productDetails.price; - } - let staticPriceToCents = Math.round(priceAmount * 100); - - quantity = productDetails.quantity_wanted; - if (productDetails.quantity_wanted <= 0) { - quantity = 1; - } - - getProductDataForApiCall( - cmsReference, - staticPriceToCents, - productDetails.name, - settings.merchant_id, - quantity, - settings.cart_id, - settings.session_id, - insuranceSelected - ); -} - -function createCmsReference(productDetails) { - if (productDetails.id_product !== null) { - if (productDetails.id_product_attribute <= '0') { - return productDetails.id_product; + + function addModalListenerToAddToCart() { + if (settings.isAddToCartPopupActivated === true && almaEligibilityAnswer) { + const addToCart = getAddToCartButton(); + if (addToCart) { + // If we change the quantity the DOM is reloaded then we need to remove and add the listener again + addToCart.removeEventListener("click", insuranceListener); + addToCart.addEventListener("click", insuranceListener); + } + } } - return productDetails.id_product + '-' + productDetails.id_product_attribute; - } - - return undefined; -} - -function addInputsInsurance(event) { - let formAddToCart = document.getElementById('add-to-cart-or-refresh'); - let selectedInsuranceQuantity = event.selectedInsuranceQuantity; - - if (selectedInsuranceQuantity > quantity) { - selectedInsuranceQuantity = quantity - } - - handleInput('alma_id_insurance_contract', event.selectedAlmaInsurance.insuranceContractId, formAddToCart); - handleInput('alma_quantity_insurance', selectedInsuranceQuantity, formAddToCart); - -} - -function handleInput(inputName, value, form) { - let elementInput = document.getElementById(inputName); - if (elementInput == null) { - let input = document.createElement('input'); - input.setAttribute('value', value); - input.setAttribute('name', inputName); - input.setAttribute('class', 'alma_insurance_input'); - input.setAttribute('id', inputName); - input.setAttribute('type', 'hidden'); - - form.prepend(input); - } else { - elementInput.setAttribute('value', value); - } -} - -function removeInsurance() { - resetInsurance(); - insuranceSelected = false; - removeInputInsurance(); -} - -function removeInputInsurance() { - let inputsInsurance = document.getElementById('add-to-cart-or-refresh').querySelectorAll('.alma_insurance_input'); - inputsInsurance.forEach((input) => { - input.remove(); - }); -} - -function addModalListenerToAddToCart() { - if (settings.isAddToCartPopupActivated === true && almaEligibilityAnswer) { - const addToCart = getAddToCartButton(); - if (addToCart) { - // If we change the quantity the DOM is reloaded then we need to remove and add the listener again - addToCart.removeEventListener("click", insuranceListener); - addToCart.addEventListener("click", insuranceListener); + function getAddToCartButton() { + let addToCart = document.querySelector('button.add-to-cart'); + // TODO: Ravate specific to generalise with selector configuration + if (!addToCart) { + addToCart = document.querySelector('.add-to-cart a, .add-to-cart button').first(); + } + + return addToCart; + } + + function insuranceListener(event) { + if (!insuranceSelected) { + event.preventDefault(); + event.stopPropagation(); + openModal('popupModal', quantity); + insuranceSelected = true; + addToCartFlow = true; + } + insuranceSelected = false; } - } -} - -function getAddToCartButton() { - let addToCart = document.querySelector('button.add-to-cart'); - // TODO: Ravate specific to generalise with selector configuration - if (!addToCart) { - addToCart = document.querySelector('.add-to-cart a, .add-to-cart button').first(); - } - - return addToCart; -} - -function insuranceListener(event) { - if (!insuranceSelected) { - event.preventDefault(); - event.stopPropagation(); - openModal('popupModal', quantity); - insuranceSelected = true; - addToCartFlow = true; + + function handleInsuranceProductPage() { + if (productDetails.id === $('#alma-insurance-global').data('insurance-id')) { + //$('.product-prices').hide(); // To hide the price of the insurance product page + let tagInformationInsurance = '
' + $('#alma-insurance-global').data('message-insurance-page') + '
'; + $(tagInformationInsurance).insertAfter('.product-variants'); + } } - insuranceSelected = false; -} - -function handleInsuranceProductPage() { - if (productDetails.id === $('#alma-insurance-global').data('insurance-id')) { - //$('.product-prices').hide(); // To hide the price of the insurance product page - let tagInformationInsurance = '
' + - $('#alma-insurance-global').data('message-insurance-page') - + '
'; - $(tagInformationInsurance).insertAfter('.product-variants'); - } -} + }); +})(jQuery); \ No newline at end of file From 4e3415ddade7c45eff0a8f789ef9f9c9c1d8a987 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 23 Oct 2024 18:39:13 +0200 Subject: [PATCH 13/32] fix: use getAddToCartButton function consistently --- alma/views/js/alma-product-insurance.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 7860d9083..6ebb74c79 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -43,7 +43,7 @@ onloadAddInsuranceInputOnProductAlma(); if (typeof prestashop !== 'undefined') { prestashop.on('updateProduct', function (event) { - let addToCart = document.querySelector('.add-to-cart'); + let addToCart = getAddToCartButton(); if (event.event !== undefined) { quantity = getQuantity(); From 2ad7946cf1d44017c6a7f3aa513f503d86e68065 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 23 Oct 2024 18:40:19 +0200 Subject: [PATCH 14/32] chore: coding style --- alma/views/js/alma-product-insurance.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 6ebb74c79..d9368bb44 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -90,7 +90,7 @@ function getQuantity() { - var quantity = 1; + let quantity = 1; if (document.querySelector('.qty [name="qty"]')) { quantity = parseInt(document.querySelector('.qty [name="qty"]').value); } @@ -106,14 +106,14 @@ } function btnLoaders(action) { - const addBtn = $(".add-to-cart"); + const $addBtn = $(".add-to-cart"); if (action === 'start') { $('
').insertBefore($(".add-to-cart i")); - addBtn.attr("disabled", "disabled"); + $addBtn.attr("disabled", "disabled"); } if (action === 'stop') { $(".spinner").remove(); - addBtn.removeAttr("disabled"); + $addBtn.removeAttr("disabled"); addModalListenerToAddToCart(); } } @@ -181,15 +181,16 @@ } function createCmsReference(productDetails) { - if (productDetails.id_product !== null) { - if (productDetails.id_product_attribute <= '0') { - return productDetails.id_product; - } + if (!productDetails.id_product) { + return + } - return productDetails.id_product + '-' + productDetails.id_product_attribute; + // TODO: check why comparing to string value + if (productDetails.id_product_attribute <= '0') { + return productDetails.id_product; } - return undefined; + return productDetails.id_product + '-' + productDetails.id_product_attribute; } function addInputsInsurance(event) { @@ -202,7 +203,6 @@ handleInput('alma_id_insurance_contract', event.selectedAlmaInsurance.insuranceContractId, formAddToCart); handleInput('alma_quantity_insurance', selectedInsuranceQuantity, formAddToCart); - } function handleInput(inputName, value, form) { From 2d3bc727abaebde98a3022c53542d89f77d0ee64 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 23 Oct 2024 18:42:00 +0200 Subject: [PATCH 15/32] fix: use product details data provided by PS Instead of trying to find it from the DOM + use plain JS objects instead of data attributes for settings & product details --- alma/views/js/alma-product-insurance.js | 67 +++++++++++-------- .../templates/hook/displayProductActions.tpl | 10 ++- 2 files changed, 48 insertions(+), 29 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index d9368bb44..633143517 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -26,11 +26,9 @@ throw new Error('[Alma] Product details not found. You need to add the hook displayProductActions in your template product page.'); } - const settings = getSettingsInsurance(); let insuranceSelected = false; let selectedAlmaInsurance = null; let addToCartFlow = false; - let productDetails = JSON.parse(document.querySelector('.alma-widget-insurance .js-product-details').dataset.product); let quantity = getQuantity(); let almaEligibilityAnswer = false; @@ -72,17 +70,31 @@ } }); prestashop.on('updatedProduct', function (data) { - // TODO: - // - use data.product_details to load latest product details from the data-product attribute of the div - // - fallback to #product-details[data-product] if for any reason we cannot find what we need in `data` - // - have a last fallback to making our own AJAX call? + // Update product details data from the PrestaShop-sent data + if (data.product_details) { + const shadowDiv = document.createElement('div'); + shadowDiv.innerHTML = data.product_details; - document.querySelector('.qty [name="qty"]').value = quantity; + const psProductDetails = shadowDiv.querySelector('[data-product]'); + if (!psProductDetails || !psProductDetails.dataset.product) { + AlmaInsurance.productDetails = null + } else { + AlmaInsurance.productDetails = JSON.parse(psProductDetails.dataset.product); + } + } + + // If we did not get the data from PS's AJAX request, get it from the product-details panel + const psProductDetails = document.querySelector('[data-product]'); + if (!AlmaInsurance.productDetails && psProductDetails && psProductDetails.dataset.product) { + AlmaInsurance.productDetails = JSON.parse(psProductDetails.dataset.product); + } - productDetails = JSON.parse(document.querySelector('.alma-widget-insurance .js-product-details').dataset.product); - productDetails.quantity_wanted = parseInt(quantity); + if (!AlmaInsurance.productDetails) { + // TODO: fallback on making an AJAX call ourselves? + console.error("Could not find product details"); + return; + } - document.querySelector('.alma-widget-insurance .js-product-details').dataset.product = JSON.stringify(productDetails); refreshWidget(); addModalListenerToAddToCart(); }); @@ -97,14 +109,6 @@ return quantity } - function getSettingsInsurance() { - if (document.querySelector('#alma-widget-insurance-product-page')) { - return JSON.parse(document.querySelector('#alma-widget-insurance-product-page').dataset.almaInsuranceSettings); - } - - return null; - } - function btnLoaders(action) { const $addBtn = $(".add-to-cart"); if (action === 'start') { @@ -165,19 +169,28 @@ } function refreshWidget() { - let cmsReference = createCmsReference(productDetails); - let priceAmount = productDetails.price_amount; - if (productDetails.price_amount === undefined) { - priceAmount = productDetails.price; + let cmsReference = createCmsReference(AlmaInsurance.productDetails); + let priceAmount = AlmaInsurance.productDetails.price_amount; + if (AlmaInsurance.productDetails.price_amount === undefined) { + priceAmount = AlmaInsurance.productDetails.price; } let staticPriceToCents = Math.round(priceAmount * 100); - quantity = productDetails.quantity_wanted; - if (productDetails.quantity_wanted <= 0) { + quantity = AlmaInsurance.productDetails.quantity_wanted; + if (quantity <= 0) { quantity = 1; } - getProductDataForApiCall(cmsReference, staticPriceToCents, productDetails.name, settings.merchant_id, quantity, settings.cart_id, settings.session_id, insuranceSelected); + getProductDataForApiCall( + cmsReference, + staticPriceToCents, + AlmaInsurance.productDetails.name, + AlmaInsurance.settings.merchant_id, + quantity, + AlmaInsurance.settings.cart_id, + AlmaInsurance.settings.session_id, + insuranceSelected + ); } function createCmsReference(productDetails) { @@ -235,7 +248,7 @@ } function addModalListenerToAddToCart() { - if (settings.isAddToCartPopupActivated === true && almaEligibilityAnswer) { + if (AlmaInsurance.settings.isAddToCartPopupActivated === true && almaEligibilityAnswer) { const addToCart = getAddToCartButton(); if (addToCart) { // If we change the quantity the DOM is reloaded then we need to remove and add the listener again @@ -267,7 +280,7 @@ } function handleInsuranceProductPage() { - if (productDetails.id === $('#alma-insurance-global').data('insurance-id')) { + if (AlmaInsurance.productDetails.id === $('#alma-insurance-global').data('insurance-id')) { //$('.product-prices').hide(); // To hide the price of the insurance product page let tagInformationInsurance = '
' + $('#alma-insurance-global').data('message-insurance-page') + '
'; $(tagInformationInsurance).insertAfter('.product-variants'); diff --git a/alma/views/templates/hook/displayProductActions.tpl b/alma/views/templates/hook/displayProductActions.tpl index 41e1835b9..e2ab487f9 100644 --- a/alma/views/templates/hook/displayProductActions.tpl +++ b/alma/views/templates/hook/displayProductActions.tpl @@ -20,7 +20,13 @@ * @copyright 2018-2024 Alma SAS * @license https://opensource.org/licenses/MIT The MIT License *} -
- +
+ {literal} + + {/literal}
From 3ad023fbc14d58534695c9afc804573212911e75 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 23 Oct 2024 18:43:24 +0200 Subject: [PATCH 16/32] chore: fix code style warnings --- alma/views/js/alma-product-insurance.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 633143517..63d302276 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -33,7 +33,7 @@ let almaEligibilityAnswer = false; //Insurance - $("body").on("hidden.bs.modal", "#blockcart-modal", function (e) { + $("body").on("hidden.bs.modal", "#blockcart-modal", function () { removeInsurance(); }); handleInsuranceProductPage(); @@ -280,9 +280,10 @@ } function handleInsuranceProductPage() { - if (AlmaInsurance.productDetails.id === $('#alma-insurance-global').data('insurance-id')) { + const $almaInsuranceGlobal = $('#alma-insurance-global'); + if (AlmaInsurance.productDetails.id === $almaInsuranceGlobal.data('insurance-id')) { //$('.product-prices').hide(); // To hide the price of the insurance product page - let tagInformationInsurance = '
' + $('#alma-insurance-global').data('message-insurance-page') + '
'; + let tagInformationInsurance = '
' + $almaInsuranceGlobal.data('message-insurance-page') + '
'; $(tagInformationInsurance).insertAfter('.product-variants'); } } From c6011a8ead262ec965735bf0739d9d9e4da4fb9f Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Wed, 23 Oct 2024 19:29:59 +0200 Subject: [PATCH 17/32] chore: make Aqua happy --- alma/views/js/alma-product-insurance.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 63d302276..0765ae5d5 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -73,7 +73,7 @@ // Update product details data from the PrestaShop-sent data if (data.product_details) { const shadowDiv = document.createElement('div'); - shadowDiv.innerHTML = data.product_details; + $(shadowDiv).html(data.product_details); const psProductDetails = shadowDiv.querySelector('[data-product]'); if (!psProductDetails || !psProductDetails.dataset.product) { From 85f612eaff6f198357763e8e67eb54d45bd59fdf Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Thu, 24 Oct 2024 01:28:41 +0200 Subject: [PATCH 18/32] fix: update quantity_wanted with correct value There's a bug in some PS 1.7 versions where quantity_wanted is not set to the actual quantity value --- alma/views/js/alma-product-insurance.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 0765ae5d5..462eb612f 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -95,6 +95,9 @@ return; } + // There's a bug in some PS 1.7 versions where quantity_wanted is not set to the actual quantity value + AlmaInsurance.productDetails.quantity_wanted = getQuantity() + refreshWidget(); addModalListenerToAddToCart(); }); From 00d478d529988c39764793787b300b100b5dbadf Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Thu, 24 Oct 2024 18:38:24 +0200 Subject: [PATCH 19/32] fix: work around PS bug to maintain quantity_wanted --- alma/views/js/alma-product-insurance.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 462eb612f..dec142707 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -95,8 +95,10 @@ return; } - // There's a bug in some PS 1.7 versions where quantity_wanted is not set to the actual quantity value - AlmaInsurance.productDetails.quantity_wanted = getQuantity() + // There's a bug in some PS 1.7 versions where quantity_wanted is not set to the actual quantity value, + // while in later versions it's correctly set but the quantity input value is reset to 1 + AlmaInsurance.productDetails.quantity_wanted = quantity + setQuantity(AlmaInsurance.productDetails.quantity_wanted) refreshWidget(); addModalListenerToAddToCart(); @@ -106,12 +108,20 @@ function getQuantity() { let quantity = 1; - if (document.querySelector('.qty [name="qty"]')) { - quantity = parseInt(document.querySelector('.qty [name="qty"]').value); + + const qtyInput = document.querySelector('.qty [name="qty"]'); + if (qtyInput) { + quantity = Number(qtyInput.value); } + return quantity } + function setQuantity(quantity) { + const qtyInput = document.querySelector('.qty [name="qty"]'); + qtyInput.value = quantity; + } + function btnLoaders(action) { const $addBtn = $(".add-to-cart"); if (action === 'start') { From b61d5c34e37328175a5eff8ad0ccad03a5b8ef1d Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Thu, 24 Oct 2024 02:04:25 +0200 Subject: [PATCH 20/32] refactor: simplify & document insurance on product page --- alma/views/js/alma-product-insurance.js | 201 ++++++++++++++---------- 1 file changed, 122 insertions(+), 79 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index dec142707..8bfafe83c 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -26,49 +26,68 @@ throw new Error('[Alma] Product details not found. You need to add the hook displayProductActions in your template product page.'); } + let loaded = false; let insuranceSelected = false; let selectedAlmaInsurance = null; let addToCartFlow = false; let quantity = getQuantity(); let almaEligibilityAnswer = false; - //Insurance - $("body").on("hidden.bs.modal", "#blockcart-modal", function () { - removeInsurance(); - }); + // Reset the insurance widget & input when customer chooses "continue shopping" from the "added to cart" modal + $("body").on("hidden.bs.modal", "#blockcart-modal", removeInsurance); + + // Display warning to customer if they're seeing the insurance "product" page handleInsuranceProductPage(); - btnLoaders('start'); - onloadAddInsuranceInputOnProductAlma(); - if (typeof prestashop !== 'undefined') { - prestashop.on('updateProduct', function (event) { + + // Add spinner to add to cart button & disable it until insurance is loaded + showLoadingSpinner(); + + // Listening to messages from our widget + window.addEventListener('message', handleWidgetMessage); + + if (prestashop) { + prestashop.on('updateProduct', function (args) { let addToCart = getAddToCartButton(); - if (event.event !== undefined) { + // TODO: is this really useful? + if (args.event !== undefined) { quantity = getQuantity(); } - if (event.eventType === 'updatedProductQuantity') { - quantity = getQuantity(); - if (event.event) { - quantity = event.event.target.value; + + // Update quantity & reset insurance choices when quantity changes + if (args.eventType === 'updatedProductQuantity') { + if (args.event) { + quantity = Number(args.event.target.value); + } else { + quantity = getQuantity(); } removeInsurance(); } - if (event.eventType === 'updatedProductCombination') { + + // Reset insurance choice when product changes + if (args.eventType === 'updatedProductCombination') { removeInsurance(); } - if (typeof event.selectedAlmaInsurance !== 'undefined' && event.selectedAlmaInsurance !== null) { + + // An insurance offer has been chosen + if (Boolean(args.selectedAlmaInsurance)) { insuranceSelected = true; - addInputsInsurance(event); + addInsuranceInputs(args); } - if (typeof event.selectedInsuranceData !== 'undefined' && event.selectedInsuranceData) { - removeInputInsurance(); + + // Insurance choice has been withdrawn + if (Boolean(args.hasRemovedInsurance)) { + removeInsuranceInputs(); } + + // If we had intercepted the add to cart flow, resume it to effectively add the product to the cart if (addToCartFlow) { addToCart.click(); insuranceSelected = false; addToCartFlow = false; } }); + prestashop.on('updatedProduct', function (data) { // Update product details data from the PrestaShop-sent data if (data.product_details) { @@ -106,6 +125,7 @@ } + // Retrieve wanted product quantity from the quantity selector function getQuantity() { let quantity = 1; @@ -122,28 +142,36 @@ qtyInput.value = quantity; } - function btnLoaders(action) { - const $addBtn = $(".add-to-cart"); - if (action === 'start') { - $('
').insertBefore($(".add-to-cart i")); + // Display/hide a spinner on the add to cart button + function showLoadingSpinner(show = true) { + const $addBtn = $(getAddToCartButton()); + + if (show) { + loaded = false; + $addBtn.prepend($('
')); $addBtn.attr("disabled", "disabled"); - } - if (action === 'stop') { - $(".spinner").remove(); + } else { + $("#insuranceSpinner").remove(); $addBtn.removeAttr("disabled"); - addModalListenerToAddToCart(); } } - // ** Add input insurance in form to add to cart ** - function onloadAddInsuranceInputOnProductAlma() { - let currentResolve; + // Handle incoming messages from the widget + function handleWidgetMessage(message) { + let widgetInsurance = document.getElementById('alma-widget-insurance-product-page'); + + switch (message.data.type) { + // Widget is sending us the result of the eligibility call for the current product + case 'almaEligibilityAnswer': + almaEligibilityAnswer = message.data.eligibilityCallResponseStatus.response.eligibleProduct; + + // TODO: we should receive a "loaded" message from the widget + if (!loaded) { + loaded = true; + showLoadingSpinner(false); + addModalListenerToAddToCart(); + } - window.addEventListener('message', (e) => { - let widgetInsurance = document.getElementById('alma-widget-insurance-product-page'); - if (e.data.type === 'almaEligibilityAnswer') { - almaEligibilityAnswer = e.data.eligibilityCallResponseStatus.response.eligibleProduct; - btnLoaders('stop'); if (almaEligibilityAnswer) { prestashop.emit('updateProduct', { reason: { @@ -157,34 +185,37 @@ addToCart.removeEventListener("click", insuranceListener) } } - } - if (e.data.type === 'changeWidgetHeight') { - widgetInsurance.style.height = e.data.widgetHeight + 'px'; - } - if (e.data.type === 'getSelectedInsuranceData') { + break; + + // Widget is asking us to adjust the iframe's height + case 'changeWidgetHeight': + widgetInsurance.style.height = message.data.widgetHeight + 'px'; + break; + + // Widget is sending us selected insurance data + case 'getSelectedInsuranceData': if (parseInt(document.querySelector('.qty [name="qty"]').value) !== quantity) { quantity = getQuantity(); } insuranceSelected = true; - selectedAlmaInsurance = e.data.selectedInsuranceData; + selectedAlmaInsurance = message.data.selectedInsuranceData; prestashop.emit('updateProduct', { reason: { productUrl: window.location.href }, selectedAlmaInsurance: selectedAlmaInsurance, - selectedInsuranceData: e.data.declinedInsurance, - selectedInsuranceQuantity: e.data.selectedInsuranceQuantity + hasRemovedInsurance: message.data.declinedInsurance, + selectedInsuranceQuantity: message.data.selectedInsuranceQuantity }); - } else if (currentResolve) { - currentResolve(e.data); - } - }); + break; + } } + // Ask widget to refresh with updated product data function refreshWidget() { let cmsReference = createCmsReference(AlmaInsurance.productDetails); let priceAmount = AlmaInsurance.productDetails.price_amount; - if (AlmaInsurance.productDetails.price_amount === undefined) { + if (priceAmount === undefined) { priceAmount = AlmaInsurance.productDetails.price; } let staticPriceToCents = Math.round(priceAmount * 100); @@ -194,6 +225,7 @@ quantity = 1; } + // !! Global function provided by openInPageModal script getProductDataForApiCall( cmsReference, staticPriceToCents, @@ -206,20 +238,21 @@ ); } + // Concatenate product ID & its combination ID for a unique identifier function createCmsReference(productDetails) { if (!productDetails.id_product) { return } - // TODO: check why comparing to string value - if (productDetails.id_product_attribute <= '0') { + if (productDetails.id_product_attribute <= 0) { return productDetails.id_product; } return productDetails.id_product + '-' + productDetails.id_product_attribute; } - function addInputsInsurance(event) { + // Add hidden inputs to the add to cart form so that our insurance product is added along with the main product + function addInsuranceInputs(event) { let formAddToCart = document.getElementById('add-to-cart-or-refresh'); let selectedInsuranceQuantity = event.selectedInsuranceQuantity; @@ -227,37 +260,32 @@ selectedInsuranceQuantity = quantity } - handleInput('alma_id_insurance_contract', event.selectedAlmaInsurance.insuranceContractId, formAddToCart); - handleInput('alma_quantity_insurance', selectedInsuranceQuantity, formAddToCart); + // We need both the selected insurance contract ID, and how many subscriptions to add + addInsuranceInput('alma_id_insurance_contract', event.selectedAlmaInsurance.insuranceContractId, formAddToCart); + addInsuranceInput('alma_quantity_insurance', selectedInsuranceQuantity, formAddToCart); } - function handleInput(inputName, value, form) { - let elementInput = document.getElementById(inputName); - if (elementInput == null) { - let input = document.createElement('input'); - input.setAttribute('value', value); - input.setAttribute('name', inputName); - input.setAttribute('class', 'alma_insurance_input'); - input.setAttribute('id', inputName); - input.setAttribute('type', 'hidden'); - - form.prepend(input); + // Add a single insurance input to the add to cart form + function addInsuranceInput(inputName, value, form) { + let $elementInput = $(`#${inputName}`) + if (!$elementInput.length) { + const $input = $(``) + $(form).prepend($input); } else { - elementInput.setAttribute('value', value); + $elementInput.val(value); } } + // Remove our insurance hidden fields from the add to cart form + function removeInsuranceInputs() { + $('.alma_insurance_input').remove() + } + function removeInsurance() { + // !! Global function provided by openInPageModal script resetInsurance(); insuranceSelected = false; - removeInputInsurance(); - } - - function removeInputInsurance() { - let inputsInsurance = document.getElementById('add-to-cart-or-refresh').querySelectorAll('.alma_insurance_input'); - inputsInsurance.forEach((input) => { - input.remove(); - }); + removeInsuranceInputs(); } function addModalListenerToAddToCart() { @@ -271,27 +299,42 @@ } } - function getAddToCartButton() { - let addToCart = document.querySelector('button.add-to-cart'); - // TODO: Ravate specific to generalise with selector configuration - if (!addToCart) { - addToCart = document.querySelector('.add-to-cart a, .add-to-cart button').first(); - } + // Find the selector for the add to cart button + function getAddToCartBtnSelector() { + // TODO: move selectors to a module configuration option + const selectors = [ + '[data-button-action=add-to-cart]:visible', // generic PrestaShop add to cart button + 'button.add-to-cart:visible', + '.add-to-cart a:visible', + '.add-to-cart button:visible', + 'a[role=button][href$=addToCart]:visible' // elementor addToCart widget + ]; + + // Return first selector that successfully matches an element in the DOM + return selectors.find(selector => $(selector).length > 0) + } - return addToCart; + function getAddToCartButton() { + return $(getAddToCartBtnSelector())[0]; } function insuranceListener(event) { if (!insuranceSelected) { event.preventDefault(); event.stopPropagation(); + openModal('popupModal', quantity); + insuranceSelected = true; addToCartFlow = true; } + insuranceSelected = false; } + // This is only used to display a callout message when the product page for the actual insurance "product" from + // the catalog is being viewed by a customer + // TODO: This should probably be removed in favor of conditional templating/hooks on the product page itself function handleInsuranceProductPage() { const $almaInsuranceGlobal = $('#alma-insurance-global'); if (AlmaInsurance.productDetails.id === $almaInsuranceGlobal.data('insurance-id')) { From b5a7b6e91d8d1a36f8fac0f3fd9b81a6a92878b3 Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Fri, 25 Oct 2024 12:45:27 +0200 Subject: [PATCH 21/32] fix: include wanted product quantity in widget iframe URL Some versions of PS (e.g. 1.7.2.4) will completely reload the product actions DOM, causing the widget to fully reload and loose its state. As a result, the insurance modal always uses a quantity=1 when opened via the widget. Including the quantity in the URL fixes that --- .../controllers/hook/DisplayProductActionsHookController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/alma/controllers/hook/DisplayProductActionsHookController.php b/alma/controllers/hook/DisplayProductActionsHookController.php index 8959309f5..981cce9e9 100644 --- a/alma/controllers/hook/DisplayProductActionsHookController.php +++ b/alma/controllers/hook/DisplayProductActionsHookController.php @@ -120,6 +120,8 @@ public function run($params) ? $productParams['id_product_attribute'] : null; + $quantityWanted = isset($productParams['quantity_wanted']) ? $productParams['quantity_wanted'] : 1; + $cmsReference = $this->insuranceHelper->createCmsReference($productId, $productAttributeId); $staticPrice = $this->productHelper->getPriceStatic($productId, $productAttributeId); @@ -132,11 +134,12 @@ public function run($params) 'productDetails' => $this->handleProductDetails($params), 'settingsInsurance' => $this->handleSettings($merchantId), 'iframeUrl' => sprintf( - '%s%s?cms_reference=%s&product_price=%s&product_name=%s&merchant_id=%s&customer_session_id=%s&cart_id=%s', + '%s%s?cms_reference=%s&product_price=%s&product_quantity=%s&product_name=%s&merchant_id=%s&customer_session_id=%s&cart_id=%s', $this->adminInsuranceHelper->envUrl(), ConstantsHelper::FO_IFRAME_WIDGET_INSURANCE_PATH, $cmsReference, $staticPriceInCents, + $quantityWanted, $productName, $merchantId, $this->context->cookie->checksum, From 50fb3349774fc144e6e10efcc1a10d02a27fae1b Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Fri, 25 Oct 2024 12:54:41 +0200 Subject: [PATCH 22/32] refactor: simplify widget & modal control flow PrestaShop events are not manually triggered anymore, as we really only need to listen to them, so that we can trigger some update flows. The rest of the control flow remains handled at the message event handler level, which removes unnecessary reloads and fixes a few other bugs --- alma/views/js/alma-product-insurance.js | 88 +++++++++++-------------- 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 8bfafe83c..3711df750 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -47,8 +47,6 @@ if (prestashop) { prestashop.on('updateProduct', function (args) { - let addToCart = getAddToCartButton(); - // TODO: is this really useful? if (args.event !== undefined) { quantity = getQuantity(); @@ -68,24 +66,6 @@ if (args.eventType === 'updatedProductCombination') { removeInsurance(); } - - // An insurance offer has been chosen - if (Boolean(args.selectedAlmaInsurance)) { - insuranceSelected = true; - addInsuranceInputs(args); - } - - // Insurance choice has been withdrawn - if (Boolean(args.hasRemovedInsurance)) { - removeInsuranceInputs(); - } - - // If we had intercepted the add to cart flow, resume it to effectively add the product to the cart - if (addToCartFlow) { - addToCart.click(); - insuranceSelected = false; - addToCartFlow = false; - } }); prestashop.on('updatedProduct', function (data) { @@ -134,10 +114,18 @@ quantity = Number(qtyInput.value); } + if (quantity <= 0) { + quantity = 1; + } + return quantity } function setQuantity(quantity) { + if (quantity <= 0) { + quantity = 1; + } + const qtyInput = document.querySelector('.qty [name="qty"]'); qtyInput.value = quantity; } @@ -152,7 +140,7 @@ $addBtn.attr("disabled", "disabled"); } else { $("#insuranceSpinner").remove(); - $addBtn.removeAttr("disabled"); + $addBtn.attr("disabled", null); } } @@ -172,17 +160,11 @@ addModalListenerToAddToCart(); } - if (almaEligibilityAnswer) { - prestashop.emit('updateProduct', { - reason: { - productUrl: window.location.href, - } - }); - } else { + if (!almaEligibilityAnswer) { widgetInsurance.style.display = 'none'; let addToCart = document.querySelector('.add-to-cart'); if (addToCart) { - addToCart.removeEventListener("click", insuranceListener) + addToCart.removeEventListener("click", addToCartListener) } } break; @@ -197,16 +179,27 @@ if (parseInt(document.querySelector('.qty [name="qty"]').value) !== quantity) { quantity = getQuantity(); } - insuranceSelected = true; - selectedAlmaInsurance = message.data.selectedInsuranceData; - prestashop.emit('updateProduct', { - reason: { - productUrl: window.location.href - }, - selectedAlmaInsurance: selectedAlmaInsurance, + + const data = { + selectedAlmaInsurance: message.data.selectedInsuranceData, hasRemovedInsurance: message.data.declinedInsurance, selectedInsuranceQuantity: message.data.selectedInsuranceQuantity - }); + } + + if (Boolean(data.selectedAlmaInsurance)) { + // An insurance offer has been chosen + insuranceSelected = true; + addInsuranceInputs(data); + } else if (data.hasRemovedInsurance) { + // Insurance choice has been withdrawn + insuranceSelected = false; + removeInsuranceInputs(); + } + + // If we had intercepted the add to cart flow, resume it to effectively add the product to the cart + if (addToCartFlow) { + getAddToCartButton().click(); + } break; } } @@ -220,11 +213,6 @@ } let staticPriceToCents = Math.round(priceAmount * 100); - quantity = AlmaInsurance.productDetails.quantity_wanted; - if (quantity <= 0) { - quantity = 1; - } - // !! Global function provided by openInPageModal script getProductDataForApiCall( cmsReference, @@ -293,8 +281,8 @@ const addToCart = getAddToCartButton(); if (addToCart) { // If we change the quantity the DOM is reloaded then we need to remove and add the listener again - addToCart.removeEventListener("click", insuranceListener); - addToCart.addEventListener("click", insuranceListener); + addToCart.removeEventListener("click", addToCartListener); + addToCart.addEventListener("click", addToCartListener); } } } @@ -318,18 +306,16 @@ return $(getAddToCartBtnSelector())[0]; } - function insuranceListener(event) { - if (!insuranceSelected) { + function addToCartListener(event) { + if (!insuranceSelected && !addToCartFlow) { event.preventDefault(); event.stopPropagation(); - openModal('popupModal', quantity); - - insuranceSelected = true; addToCartFlow = true; + openModal('popupModal', quantity); + } else { + addToCartFlow = false; } - - insuranceSelected = false; } // This is only used to display a callout message when the product page for the actual insurance "product" from From bfe76b8409c125735a601b2fc890419386b24853 Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:15:33 +0000 Subject: [PATCH 23/32] chore(deps): update mysql docker tag to v9.1 --- compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose.yml b/compose.yml index 2983d0f87..1662ce5ad 100644 --- a/compose.yml +++ b/compose.yml @@ -2,7 +2,7 @@ version: '3' services: mysql: - image: mysql:9.0 + image: mysql:9.1 environment: MYSQL_ROOT_PASSWORD: admin MYSQL_DATABASE: prestashop From 3246c1f03bab436e30f7b2532fa1fc6242caac03 Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:15:36 +0000 Subject: [PATCH 24/32] chore(deps): update pre-commit repositories --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4936c40d8..431593ea1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/commitizen-tools/commitizen - rev: v3.29.1 + rev: v3.30.0 hooks: - id: commitizen name: Check commit message format @@ -39,7 +39,7 @@ repos: stages: [commit] - repo: https://github.com/returntocorp/semgrep - rev: v1.92.0 + rev: v1.93.0 hooks: - id: semgrep args: From 47a6eb5accb2737c3d9ad524caf6aafb43a11e9e Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Mon, 28 Oct 2024 13:43:43 +0100 Subject: [PATCH 25/32] fix: issue with some translation in payment buttons --- alma/lib/Helpers/PaymentOptionTemplateHelper.php | 2 +- alma/lib/Helpers/PlanHelper.php | 6 +++--- alma/lib/Helpers/TranslationHelper.php | 2 +- alma/tests/Unit/Helper/PaymentOptionTemplateHelperTest.php | 4 ++-- alma/tests/Unit/Helper/TranslationHelperTest.php | 2 +- alma/translations/en.php | 5 +++++ alma/translations/fr.php | 5 +++++ 7 files changed, 18 insertions(+), 8 deletions(-) diff --git a/alma/lib/Helpers/PaymentOptionTemplateHelper.php b/alma/lib/Helpers/PaymentOptionTemplateHelper.php index e964a3557..bb84f4a0d 100644 --- a/alma/lib/Helpers/PaymentOptionTemplateHelper.php +++ b/alma/lib/Helpers/PaymentOptionTemplateHelper.php @@ -172,7 +172,7 @@ public function buildTemplateVar( if ($isDeferred) { $templateVar['installmentText'] = sprintf( - $this->translationHelper->getTranslation('0 € today then %1$s on %2$s', 'PaymentOptionsHookController'), + $this->translationHelper->l('0 € today then %1$s on %2$s', 'PaymentOptionTemplateHelper'), $this->priceHelper->formatPriceToCentsByCurrencyId( $plans[0]['purchase_amount'] + $plans[0]['customer_fee'] ), diff --git a/alma/lib/Helpers/PlanHelper.php b/alma/lib/Helpers/PlanHelper.php index a09fdd43f..899a49ef2 100644 --- a/alma/lib/Helpers/PlanHelper.php +++ b/alma/lib/Helpers/PlanHelper.php @@ -128,18 +128,18 @@ public function buildDates($plans, $locale, $feePlans, $key, $isPayNow) $plans[$keyPlan]['human_date'] = $this->dateHelper->getDateFormat($locale, $paymentPlan['due_date']); if (0 === $keyPlan) { - $plans[$keyPlan]['human_date'] = $this->translationHelper->getTranslation('Today', 'PaymentService'); + $plans[$keyPlan]['human_date'] = $this->translationHelper->l('Today', 'PlanHelper'); continue; } if ($isPayNow) { - $plans[$keyPlan]['human_date'] = $this->translationHelper->getTranslation('Total', 'PaymentService'); + $plans[$keyPlan]['human_date'] = $this->translationHelper->l('Total', 'PlanHelper'); continue; } if ($this->settingsHelper->isDeferredTriggerLimitDays($feePlans, $key)) { $plans[$keyPlan]['human_date'] = sprintf( - $this->translationHelper->getTranslation('%s month later', 'PaymentService'), + $this->translationHelper->l('%s month later', 'PaymentService'), $keyPlan ); diff --git a/alma/lib/Helpers/TranslationHelper.php b/alma/lib/Helpers/TranslationHelper.php index 3191dcdde..cb69a581c 100644 --- a/alma/lib/Helpers/TranslationHelper.php +++ b/alma/lib/Helpers/TranslationHelper.php @@ -51,7 +51,7 @@ public function __construct($moduleFactory) * * @return mixed */ - public function getTranslation($string, $file) + public function l($string, $file) { return $this->module->l($string, $file); } diff --git a/alma/tests/Unit/Helper/PaymentOptionTemplateHelperTest.php b/alma/tests/Unit/Helper/PaymentOptionTemplateHelperTest.php index 0e74917b7..01cfe2f52 100644 --- a/alma/tests/Unit/Helper/PaymentOptionTemplateHelperTest.php +++ b/alma/tests/Unit/Helper/PaymentOptionTemplateHelperTest.php @@ -91,7 +91,7 @@ public function testBuildTemplateVarNoDeferredPlan() $this->settingsHelperMock->shouldReceive('getModeActive')->andReturn('test'); $this->settingsHelperMock->shouldReceive('getIdMerchant')->andReturn('merchantId'); $this->configurationHelperMock->shouldReceive('isInPageEnabled')->andReturn(true); - $this->translationHelperMock->shouldReceive('getTranslation')->andReturn('My translation'); + $this->translationHelperMock->shouldReceive('l')->andReturn('My translation'); $this->priceHelperMock->shouldReceive('formatPriceToCentsByCurrencyId')->andReturn('110.00'); $this->dateHelperMock->shouldReceive('getDateFormat')->andReturn('22/05/2024'); @@ -163,7 +163,7 @@ public function testBuildTemplateVarDeferredPlan() $this->settingsHelperMock->shouldReceive('getModeActive')->andReturn('test'); $this->settingsHelperMock->shouldReceive('getIdMerchant')->andReturn('merchantId'); $this->configurationHelperMock->shouldReceive('isInPageEnabled')->andReturn(true); - $this->translationHelperMock->shouldReceive('getTranslation')->andReturn('My translation'); + $this->translationHelperMock->shouldReceive('l')->andReturn('My translation'); $this->priceHelperMock->shouldReceive('formatPriceToCentsByCurrencyId')->andReturn('110.00'); $this->dateHelperMock->shouldReceive('getDateFormat')->andReturn('22/05/2024'); diff --git a/alma/tests/Unit/Helper/TranslationHelperTest.php b/alma/tests/Unit/Helper/TranslationHelperTest.php index 9ed8e3608..17e172924 100644 --- a/alma/tests/Unit/Helper/TranslationHelperTest.php +++ b/alma/tests/Unit/Helper/TranslationHelperTest.php @@ -34,6 +34,6 @@ public function testGetTranslation() $translationHelperBuilder = new TranslationHelperBuilder(); $translationHelper = $translationHelperBuilder->getInstance(); - $this->assertEquals('Today', $translationHelper->getTranslation('Today', 'PaymentService')); + $this->assertEquals('Today', $translationHelper->l('Today', 'PaymentService')); } } diff --git a/alma/translations/en.php b/alma/translations/en.php index 79c60b3a2..3899815c9 100644 --- a/alma/translations/en.php +++ b/alma/translations/en.php @@ -32,6 +32,7 @@ $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'Alma requires the JSON PHP extension.'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'Alma requires OpenSSL >= 1.0.1'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'My wording to translate'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Today'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'Could not connect to Alma using your API keys.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Please double check your keys on your %1$sAlma dashboard%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Error(s) key(s): %1$s.'; @@ -139,7 +140,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma - %d monthly installments'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'We regret to inform you that there was an issue during the payment process, your Alma payment will be fully refunded. Please retry your payment to complete your order.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'We apologize for the inconvenience, but there was an issue during the payment process, and we were unable to refund your Alma payment. To fix this, we kindly ask you to contact our support team with your payment reference: %s. Our team will be happy to assist you in ensuring that you receive your full refund. Thank you for your cooperation.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Today'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Total'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = '%s month later'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Error: Could not find Alma transaction'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = '0 € today then %1$s on %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Pay now by credit card'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Pay in %d installments'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Buy now Pay in %d days'; diff --git a/alma/translations/fr.php b/alma/translations/fr.php index 91a161af6..dd7512047 100644 --- a/alma/translations/fr.php +++ b/alma/translations/fr.php @@ -32,6 +32,7 @@ $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'Alma nécessite l\'extension PHP JSON'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'Alma nécessite OpenSSL >= 1.0.1'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'Ma formulation à traduire'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Aujourd\'hui'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'Impossible de se connecter à Alma en utilisant vos clés API.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Veuillez vérifier vos clés sur votre tableau de bord %1$sAlma%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Clé(s) d\'erreur : %1$s.'; @@ -134,7 +135,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma - Paiement en %d fois'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'Nous avons le regret de vous informer qu\'il y a eu un problème lors du processus de paiement, votre paiement Alma sera entièrement remboursé. Veuillez réessayer votre paiement pour terminer votre commande.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'Nous nous excusons pour la gêne occasionnée, mais il y a eu un problème pendant le processus de paiement, et nous n\'avons pas été en mesure de vous rembourser votre paiement Alma. Pour résoudre ce problème, nous vous demandons de contacter notre équipe d\'assistance en indiquant la référence de votre paiement : %s. Notre équipe sera heureuse de vous aider à obtenir le remboursement intégral de votre paiement. Nous vous remercions de votre coopération.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Aujourd\'hui'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Total'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = 'Dans %s mois'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Erreur : La transaction Alma n\'a pas pu être récupérée'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = '0 € aujourd\'hui puis %1$s le %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Payer maintenant par carte bancaire'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Payer en %d fois'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Payer dans %d jours'; From 014b0d47143403a86079c1768c28b00722d9f48d Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Tue, 29 Oct 2024 19:01:08 +0100 Subject: [PATCH 26/32] fix: Update wording for In-Page advanced feature --- alma/lib/Forms/InpageAdminFormBuilder.php | 6 +++--- alma/translations/en.php | 6 +++--- alma/translations/fr.php | 7 ++++++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/alma/lib/Forms/InpageAdminFormBuilder.php b/alma/lib/Forms/InpageAdminFormBuilder.php index cbdedfddf..16b5b3c88 100644 --- a/alma/lib/Forms/InpageAdminFormBuilder.php +++ b/alma/lib/Forms/InpageAdminFormBuilder.php @@ -48,14 +48,14 @@ protected function configForm() $this->inputAlmaSwitchForm( self::ALMA_ACTIVATE_INPAGE, $this->module->l('Activate in-page checkout', 'InpageAdminFormBuilder'), - $this->module->l('Activate in-page checkout for Pay Now, P2X, P3X and P4X', 'InpageAdminFormBuilder'), + $this->module->l('Activate in-page checkout for all Alma payment methods', 'InpageAdminFormBuilder'), $this->module->l('The checkout in-page in your own website', 'InpageAdminFormBuilder') ), $this->inputTextForm( self::ALMA_INPAGE_PAYMENT_BUTTON_SELECTOR, $this->module->l('Input payment button Alma selector', 'InpageAdminFormBuilder'), sprintf( - $this->module->l('%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the payment button Alma', 'InpageAdminFormBuilder'), + $this->module->l('%1$sAdvanced%2$s [Optional] CSS selector used by our scripts to identify the Alma payment button', 'InpageAdminFormBuilder'), '', '' ), @@ -65,7 +65,7 @@ protected function configForm() self::ALMA_INPAGE_PLACE_ORDER_BUTTON_SELECTOR, $this->module->l('Place order button selector', 'InpageAdminFormBuilder'), sprintf( - $this->module->l('%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the place order button', 'InpageAdminFormBuilder'), + $this->module->l('%1$sAdvanced%2$s [Optional] CSS selector used by our scripts to identify the payment confirmation button', 'InpageAdminFormBuilder'), '', '' ), diff --git a/alma/translations/en.php b/alma/translations/en.php index 79c60b3a2..d6fa144b3 100644 --- a/alma/translations/en.php +++ b/alma/translations/en.php @@ -79,13 +79,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Message displayed on an excluded product page or on the cart page if it contains an excluded product.'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Excluded categories'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Activate in-page checkout'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Activate in-page checkout for Pay Now, P2X, P3X and P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Activate in-page checkout for all Alma payment methods'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'The checkout in-page in your own website'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Input payment button Alma selector'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_fb28105057d934b2ddc35a775938069b'] = '%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the payment button Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAdvanced%2$s [Optional] CSS selector used by our scripts to identify the Alma payment button'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'E.g. #id, .class, ...'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Place order button selector'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_8fbbdefb0c9073d81c746e70f7168f3e'] = '%1$sAdvanced%2$s [Optional] Query selector for our scripts to identify the place order button'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAdvanced%2$s [Optional] CSS selector used by our scripts to identify the payment confirmation button'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'In-page checkout'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'This widget allows you to inform your customers of the availability of Alma\'s payment facilities right from the product page, which will help to increase your conversion rate. For more details on its configuration or in case of problems, please consult %1$sthis documentation%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Display widget'; diff --git a/alma/translations/fr.php b/alma/translations/fr.php index 91a161af6..c97d753b7 100644 --- a/alma/translations/fr.php +++ b/alma/translations/fr.php @@ -79,8 +79,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Message affiché sur les pages de produits exclus ou sur la page du panier s\'il contient un produit exclus'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Catégories exclues'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Activer le paiement avec In-page'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Activer le paiement avec In-page pour paiement comptant, P2X, P3X et P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Activer le paiement avec In-page pour toutes les méthodes de paiement Alma'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'La page d\'accueil de la caisse dans votre propre site web'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Sélecteur CSS du bouton de paiement Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAvancé%2$s [Optionnel] Sélecteur CSS utilisé par nos scripts pour identifier le bouton de paiement Alma.'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Ex.: #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Sélecteur CSS du bouton de confirmation de paiement'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAvancé%2$s [Optionnel] Sélecteur CSS utilisé par nos scripts pour identifier le bouton de confirmation de paiement.'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'Paiement en ligne'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Ce badge permet d\'informer vos clients de la disponibilité des facilité de paiement Alma dès la fiche produit, ce qui participera à augmenter votre taux de conversion. Pour des précisions sur sa configuration ou en cas de problèmes, consultez %1$scette documentation%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Afficher le badge'; From bd20c4597b64cee299a6250ed82287497a4c5553 Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 10:14:52 +0000 Subject: [PATCH 27/32] chore(deps): update pre-commit hook returntocorp/semgrep to v1.95.0 --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 431593ea1..fc27b27dc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,7 +39,7 @@ repos: stages: [commit] - repo: https://github.com/returntocorp/semgrep - rev: v1.93.0 + rev: v1.95.0 hooks: - id: semgrep args: From 96044bc31dd065766705a17778ec0860f3ffbdbc Mon Sep 17 00:00:00 2001 From: Olivier Lance Date: Fri, 8 Nov 2024 11:17:27 +0100 Subject: [PATCH 28/32] fix: don't crash when there is not quantity input --- alma/views/js/alma-product-insurance.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/alma/views/js/alma-product-insurance.js b/alma/views/js/alma-product-insurance.js index 3711df750..1b1b1c8aa 100644 --- a/alma/views/js/alma-product-insurance.js +++ b/alma/views/js/alma-product-insurance.js @@ -28,7 +28,6 @@ let loaded = false; let insuranceSelected = false; - let selectedAlmaInsurance = null; let addToCartFlow = false; let quantity = getQuantity(); let almaEligibilityAnswer = false; @@ -105,11 +104,15 @@ } + function getQuantityInput() { + return document.querySelector('.qty [name="qty"]'); + } + // Retrieve wanted product quantity from the quantity selector function getQuantity() { let quantity = 1; - const qtyInput = document.querySelector('.qty [name="qty"]'); + const qtyInput = getQuantityInput(); if (qtyInput) { quantity = Number(qtyInput.value); } @@ -126,8 +129,10 @@ quantity = 1; } - const qtyInput = document.querySelector('.qty [name="qty"]'); - qtyInput.value = quantity; + const qtyInput = getQuantityInput(); + if (qtyInput) { + qtyInput.value = quantity; + } } // Display/hide a spinner on the add to cart button @@ -176,7 +181,8 @@ // Widget is sending us selected insurance data case 'getSelectedInsuranceData': - if (parseInt(document.querySelector('.qty [name="qty"]').value) !== quantity) { + const qtyInput = getQuantityInput(); + if (qtyInput && parseInt(qtyInput.value) !== quantity) { quantity = getQuantity(); } From 7a66947d807b3ee70886950adda990595b28839f Mon Sep 17 00:00:00 2001 From: "alma-renovate-bot[bot]" <163289924+alma-renovate-bot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:20:26 +0000 Subject: [PATCH 29/32] chore(deps): update pre-commit repositories --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fc27b27dc..1e12d7ef5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/commitizen-tools/commitizen - rev: v3.30.0 + rev: v3.30.1 hooks: - id: commitizen name: Check commit message format @@ -39,7 +39,7 @@ repos: stages: [commit] - repo: https://github.com/returntocorp/semgrep - rev: v1.95.0 + rev: v1.96.0 hooks: - id: semgrep args: From ff52020a68b581a2be2d0f11d8fd073cc31a71f9 Mon Sep 17 00:00:00 2001 From: Benjamin-Freoua-Alma <89775252+Benjamin-Freoua-Alma@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:31:52 +0000 Subject: [PATCH 30/32] chore: update version --- CHANGELOG.md | 17 +++++++++++++++++ alma/alma.php | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c2adfeca..42738ef31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## v4.5.0 - 2024-11-13 + +### Changes + +### 🚀 New Features + +- fix: Update wording for In-Page advanced feature (#594) + +### 🐛 Bug Fixes + +- fix: Prevent crash when there is not quantity input on product page for insurance (#598) +- fix: issue with some translation in payment buttons (#593) + +#### Contributors + +@Benjamin-Freoua-Alma, @alma-renovate-bot, @alma-renovate-bot[bot], @carine-bonnafous, @github-actions and @olance + ## v4.4.1 - 2024-10-30 ### 🐛 Bug Fixes diff --git a/alma/alma.php b/alma/alma.php index 45ea046f8..5a5ff2240 100644 --- a/alma/alma.php +++ b/alma/alma.php @@ -30,7 +30,7 @@ class Alma extends PaymentModule { - const VERSION = '4.4.1'; + const VERSION = '4.5.0'; const PS_ACCOUNTS_VERSION_REQUIRED = '5.3.0'; public $_path; @@ -81,7 +81,7 @@ public function __construct() { $this->name = 'alma'; $this->tab = 'payments_gateways'; - $this->version = '4.4.1'; + $this->version = '4.5.0'; $this->author = 'Alma'; $this->need_instance = false; $this->bootstrap = true; From 3c7dfe7d9bfdbe0491bc1ac449e703854b680e4d Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Wed, 13 Nov 2024 11:36:47 +0100 Subject: [PATCH 31/32] chore: update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42738ef31..eba1d8292 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,11 @@ ### 🚀 New Features -- fix: Update wording for In-Page advanced feature (#594) +- feat: add inpage setting for selector payment buttons (#581) ### 🐛 Bug Fixes +- fix: Update wording for In-Page advanced feature (#594) - fix: Prevent crash when there is not quantity input on product page for insurance (#598) - fix: issue with some translation in payment buttons (#593) From dd24dfad7fefeb16e78ca56048dd8e0d67ce4e89 Mon Sep 17 00:00:00 2001 From: Benjamin Freoua Date: Wed, 13 Nov 2024 12:01:03 +0100 Subject: [PATCH 32/32] chore: update translations --- alma/translations/de.php | 20 ++++++++++---- alma/translations/es.php | 18 +++++++++--- alma/translations/fr.php | 16 +++++------ alma/translations/it.php | 60 +++++++++++++++++++++++----------------- alma/translations/nl.php | 16 +++++++++-- alma/translations/pt.php | 16 +++++++++-- 6 files changed, 98 insertions(+), 48 deletions(-) diff --git a/alma/translations/de.php b/alma/translations/de.php index a46762ffe..fd0f2ba12 100644 --- a/alma/translations/de.php +++ b/alma/translations/de.php @@ -32,6 +32,7 @@ $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'Alma erfordert die PHP-JSON-Erweiterung'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'Alma erfordert OpenSSL 1.0.1 oder höher'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'My wording to translate'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Heute'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'Could not connect to Alma using your API keys.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Please double check your keys on your %1$sAlma dashboard%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Error(s) key(s): %1$s.'; @@ -79,8 +80,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Meldung, die auf einer Seite mit einem ausgeschlossenen Produkt oder auf der Seite mit dem Einkaufswagen angezeigt wird, wenn dieser ein ausgeschlossenes Produkt enthält.'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Ausgeschlossene Kategorien'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'In-Page-Kaufabwicklung aktivieren'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Aktivieren Sie die In-Page-Kasse für Pay Now, P2X, P3X und P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Aktivieren Sie den In-Page-Checkout für alle Alma-Zahlungsarten'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'Die In-Page-Kasse auf Ihrer eigenen Website'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Zahlungseingangstaste Alma-Selektor'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAdvanced%2$s [Optional] CSS-Selektor, der von unseren Skripten verwendet wird, um die Alma-Zahlungsschaltfläche zu identifizieren'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Z.B. #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Auswahl der Schaltfläche Bestellung aufgeben'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAdvanced%2$s [Optional] CSS-Selektor, der von unseren Skripten verwendet wird, um die Schaltfläche zur Zahlungsbestätigung zu identifizieren'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'In-Page-Kasse'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Mit diesem Widget können Sie Ihre Kunden direkt auf der Produktseite über die Verfügbarkeit der Alma-Zahlungsmöglichkeiten informieren und so Ihre Konversionsrate erhöhen. Für weitere Details zur Konfiguration oder bei Problemen konsultieren Sie bitte %1$sdiese Dokumentation%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Widget anzeigen'; @@ -134,7 +140,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma – Zahlung in %d Raten'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'Leider gab es ein Problem während des Zahlungsvorgangs. Ihre Zahlung an Alma wird vollständig zurückerstattet. Bitte versuchen Sie Ihre Zahlung erneut, um Ihre Bestellung abzuschließen.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'Wir bitten um Entschuldigung für die Unannehmlichkeiten, leider gab es ein Problem während des Zahlungsvorgangs, die Rückerstattung Ihrer Alma Zahlung war nicht möglich. Um dieses Problem zu lösen, bitten wir Sie, unser Support-Team mit Ihrer Zahlungsreferenz zu kontaktieren: %s. Unser Team wird Sie gerne unterstützen, damit Sie Ihre volle Rückerstattung erhalten. Vielen Dank für Ihre Mitarbeit.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Heute'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Insgesamt'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = '%s Monat später'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Fehler: Alma-Transaktion konnte nicht gefunden werden'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = '0 € heute dann %1$s am %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Jetzt per Kreditkarte bezahlen'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Zahlung in %d Raten'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Jetzt kaufen Bezahlen in %d Tagen'; @@ -148,7 +158,8 @@ $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Orders'; $_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'I hereby acknowledge my acceptance to subscribe to the insurance offered by Alma. In doing so, I confirm that I have previously reviewed the [information notice, which constitutes the general conditions], the [insurance product information document], and the [pre-contractual information and advice sheet]. I ahead to it without reservation and agree to electronically sign the various documents forming my contract, if applicable. I expressly consent to the collection and use of my personal data for the purpose of subscribing to and managing my insurance contract(s).'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'Your configuration has been saved'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Error creating configuration Alma insurance: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Fehler beim Versicherungsprodukt während der Änderungskonfiguration: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Fehler beim Erstellen der Konfiguration Alma Versicherung: %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Orders with insurance'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Id Order'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Reference'; @@ -260,8 +271,8 @@ $_MODULE['<{alma}prestashop>notificationconfiguration_cf5ec9fb9f7214a3db82a5a39fec5b48'] = 'Enter your API key'; $_MODULE['<{alma}prestashop>notificationconfiguration_055f421849c2a1c32b885c95540f827c'] = 'Find your API live key on your %1$s Alma dashboard%2$s'; $_MODULE['<{alma}prestashop>notificationconfiguration_53b458e8453e3694811e61c96527d638'] = 'Um den Testmodus zu verwenden, rufen Sie Ihren Test-API-Schlüssel von Ihrem %1$ssandbox dashboard%2$s ab.'; -$_MODULE['<{alma}prestashop>notificationconfiguration_b040aba3ff898146cd8c1fb8cfd04daf'] = 'Wir bieten Ihnen an, das PrestaShop Account-Modul herunterzuladen oder zu aktualisieren (mindestens erforderliche Version %1$s)'; -$_MODULE['<{alma}prestashop>notificationconfiguration_9700e091d54b8ff1fafcd27518c75b23'] = 'Verknüpfen Sie Ihren Shop mit Ihrem PrestaShop-Konto, um alle Vorteile der vom PrestaShop Marketplace angebotenen Module zu nutzen und Ihre Erfahrungen zu optimieren.'; +$_MODULE['<{alma}prestashop>notificationconfiguration_b040aba3ff898146cd8c1fb8cfd04daf'] = 'We offer to download or update the PrestaShop Account module (minimum required version %1$s)'; +$_MODULE['<{alma}prestashop>notificationconfiguration_9700e091d54b8ff1fafcd27518c75b23'] = 'Link your store to your PrestaShop account to take full advantage of the modules offered by the PrestaShop Marketplace and optimize your experience.'; $_MODULE['<{alma}prestashop>notificationconfiguration_6997dde298b14fbf6a7c95bd39fe8dc4'] = 'Das Modul %1$sfinden Sie hier%2$s'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_a6b0ef107f0d278df612764187bbdece'] = ' Steigern Sie Ihre Leistung und erhalten Sie Einblicke!'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_5b64cb0849dd12ea528c04f2fe66ae4d'] = 'Indem Sie diese Option akzeptieren, ermöglichen Sie es Alma, die Nutzung Ihrer Zahlungsmittel zu analysieren, [1]mehr Informationen zu erhalten, um[/1] durchzuführen und diese Daten mit Ihnen zu teilen. Sie können [2]jederzeit abbestellen und Ihre Daten[/2] löschen.'; @@ -320,4 +331,3 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'Ihren Live-API-Schlüssel finden Sie in %1$sIhrem Alma-Dashboard%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'Um den Testmodus zu nutzen, rufen Sie in %1$sIhrem Sandbox-Dashboard%2$s Ihren Test-API-Schlüssel ab'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'Wenn Sie Probleme haben, kontaktieren Sie uns bitte per E-Mail unter %1$ssupport@getalma.eu%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'Die Ratenzahlung mit Alma ist bei dieser Bestellung nicht möglich'; diff --git a/alma/translations/es.php b/alma/translations/es.php index 7ba586292..ccd31d3a1 100644 --- a/alma/translations/es.php +++ b/alma/translations/es.php @@ -32,6 +32,7 @@ $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'Alma requiere la extensión PHP JSON'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'Alma requiere OpenSSL >= 1.0.1'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'Mi redacción para traducir'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Hoy'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'No se pudo conectar a Alma utilizando tus claves de API.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Por favor, vuelve a comprobar tus claves en tu %1$sPanel de control Alma%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Clave(s) de error(es): %1$s.'; @@ -79,8 +80,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Mensaje a mostrar en la página de un producto excluido o en la página del carrito si contiene un producto excluido.'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Categorías excluidas'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Activar el pago integrado'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Activar el pago integrado para Pay Now, P2X, P3X y P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Activar en la página de pago para todos los métodos de pago Alma'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'La página de pago en tu propio sitio web'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Botón de pago de entrada Selector de Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAvanzado%2$s [Opcional] Selector CSS utilizado por nuestros scripts para identificar el botón de pago Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Por ejemplo, #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Selector de botones para realizar pedidos'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAvanzado%2$s [Opcional] Selector CSS utilizado por nuestros scripts para identificar el botón de confirmación de pago.'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'Pago integrado'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Este widget te permite informar a tus Clientes de la disponibilidad del pago aplazado con Alma directamente desde la página del producto. Esto te ayudará a aumentar tu tasa de conversión. Para más detalles sobre su configuración o en caso de problemas, consulta %1$sesta documentación%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Mostrar widget'; @@ -134,7 +140,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma - Pago en %d plazos'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'Lamentamos informarte que ha habido un problema al procesar el pago. Tu pago con Alma será reembolsado en su totalidad. Por favor, vuelve a intentarlo para completar su pedido.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'Disculpa las molestias, pero se ha producido un problema al procesar el pago y no hemos podido reembolsarte tu pago de Alma. Para solucionarlo, rogamos que te pongas en contacto con nuestro equipo de soporte indicando tu referencia de pago: %s. Nuestro equipo estará encantado de ayudarte a recibir el reembolso en su totalidad. Gracias por tu colaboración.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Hoy'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Total'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = '%s mes después'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Error: No se pudo encontrar la transacción de Alma'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = '0 € hoy después %1$s en %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Paga ahora con tarjeta de crédito'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Pagar en %d plazos'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Comprar ahora Pagar en %d días'; @@ -148,7 +158,8 @@ $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Pedidos'; $_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'Por la presente acepto suscribir el seguro ofrecido por Alma. Al hacerlo, confirmo que he revisado previamente el [aviso informativo, que constituye las condiciones generales], el [documento de información sobre el producto de seguro] y la [hoja de información y asesoramiento precontractual]. Y sin reservas, acepto firmar electrónicamente los distintos documentos que forman mi contrato, si procede. Consiento expresamente la recolección y utilización de mis datos personales a efectos de la suscripción y gestión de mi(s) contrato(s) de seguro.'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'Tu configuración se ha guardado'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Error al crear la configuración Alma insurance: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Error al asegurar el producto durante la configuración del cambio: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Error al crear la configuración Alma seguro: %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Pedidos con seguro'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Id Orden'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Referencia'; @@ -260,7 +271,7 @@ $_MODULE['<{alma}prestashop>notificationconfiguration_cf5ec9fb9f7214a3db82a5a39fec5b48'] = 'Introduce tu clave API'; $_MODULE['<{alma}prestashop>notificationconfiguration_055f421849c2a1c32b885c95540f827c'] = 'Encuentra tu API live key en tu %1$s Alma dashboard%2$s'; $_MODULE['<{alma}prestashop>notificationconfiguration_53b458e8453e3694811e61c96527d638'] = 'Para utilizar el modo de prueba, obtenga su clave de API de prueba en el panel de control de su sandbox %1$s%2$s'; -$_MODULE['<{alma}prestashop>notificationconfiguration_b040aba3ff898146cd8c1fb8cfd04daf'] = 'Le ofrecemos descargar o actualizar el módulo Cuenta de PrestaShop (versión mínima requerida %1$s)'; +$_MODULE['<{alma}prestashop>notificationconfiguration_b040aba3ff898146cd8c1fb8cfd04daf'] = 'Te ofrecemos descargar o actualizar el módulo de tu cuenta de PrestaShop (versión mínima requerida %1$s)'; $_MODULE['<{alma}prestashop>notificationconfiguration_9700e091d54b8ff1fafcd27518c75b23'] = 'Vincula tu tienda a tu cuenta PrestaShop para aprovechar al máximo los módulos que ofrece PrestaShop Marketplace y optimizar tu experiencia.'; $_MODULE['<{alma}prestashop>notificationconfiguration_6997dde298b14fbf6a7c95bd39fe8dc4'] = 'Encontrará el módulo %1$saquí%2$s'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_a6b0ef107f0d278df612764187bbdece'] = ' Aumenta tu rendimiento y obtén información'; @@ -320,4 +331,3 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'Encuentra tu clave API Live en %1$stu panel de control Alma%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'Para utilizar el modo Test (en pruebas), copia tu clave API Test desde %1$stu panel de control sandbox%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'Si tienes algún problema, pónte en contacto con nosotros por correo electrónico en %1$ssoporte@almapay.com%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'El pago a plazos con Alma no está disponible para este pedido'; diff --git a/alma/translations/fr.php b/alma/translations/fr.php index fba79c7ce..72d440502 100644 --- a/alma/translations/fr.php +++ b/alma/translations/fr.php @@ -81,12 +81,12 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Catégories exclues'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Activer le paiement avec In-page'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Activer le paiement avec In-page pour toutes les méthodes de paiement Alma'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'La page d\'accueil de la caisse dans votre propre site web'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Sélecteur CSS du bouton de paiement Alma'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAvancé%2$s [Optionnel] Sélecteur CSS utilisé par nos scripts pour identifier le bouton de paiement Alma.'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Ex.: #id, .class, ...'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Sélecteur CSS du bouton de confirmation de paiement'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAvancé%2$s [Optionnel] Sélecteur CSS utilisé par nos scripts pour identifier le bouton de confirmation de paiement.'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'Le paiement avec In-page dans votre propre site web'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Bouton de paiement à l\'entrée Sélecteur d\'alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAdvanced%2$s [Optional] Sélecteur CSS utilisé par nos scripts pour identifier le bouton de paiement Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Ex : #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Sélecteur de bouton de commande'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAvancé%2$s [Facultatif] Sélecteur CSS utilisé par nos scripts pour identifier le bouton de confirmation de paiement.'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'Paiement en ligne'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Ce badge permet d\'informer vos clients de la disponibilité des facilité de paiement Alma dès la fiche produit, ce qui participera à augmenter votre taux de conversion. Pour des précisions sur sa configuration ou en cas de problèmes, consultez %1$scette documentation%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Afficher le badge'; @@ -158,7 +158,8 @@ $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Commandes'; $_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'Par la présente, je reconnais accepter de souscrire à l\'assurance proposée par Alma. Ce faisant, je confirme avoir préalablement pris connaissance de la [notice d\'information valant conditions générales], du [document d\'information sur le produit d\'assurance], et de la [fiche d\'information et de conseil précontractuelle]. J\'y adhère sans réserve et accepte de signer électroniquement les différents documents formant mon contrat, le cas échéant. Je consens expressément à la collecte et à l\'utilisation de mes données personnelles aux fins de la souscription et de la gestion de mon (mes) contrat(s) d\'assurance.'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'Votre configuration a été sauvegardée'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Erreur lors de la création de la configuration Assurance Alma : %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Erreur d\'assurance du produit lors de la modification de la configuration : %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Erreur lors de la création de la configuration Assurance Alma : %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Commandes avec assurance'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Ordonnance Id'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Référence'; @@ -330,4 +331,3 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'Retrouvez votre clef d\'API Live sur %1$svotre tableau de bord Alma%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'Pour utiliser le mode Test, récupérez votre clef d\'API Test sur %1$svotre tableau de bord sandbox%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'En cas de problème, veuillez nous contacter par courrier électronique à l\'adresse suivante : %1$ssupport@getalma.eu%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'Le paiement en plusieurs fois Alma n\'est pas disponible pour cette commande'; diff --git a/alma/translations/it.php b/alma/translations/it.php index 2462a45e3..aa4ac1e1d 100644 --- a/alma/translations/it.php +++ b/alma/translations/it.php @@ -26,12 +26,13 @@ $_MODULE['<{alma}prestashop>alma_c407a14c73b61d727c55a42fb531f2e3'] = '1x 2x 3x 4x, D+15 o D+30 Alma - Pagamento rateale e differito'; $_MODULE['<{alma}prestashop>alma_7f9c508fa226d3e72644403653115c29'] = 'Vendi di più aumentando la soddisfazione cliente! Metti al sicuro le tue liquidità con Alma, il pagamento a rate semplice e garantito.'; $_MODULE['<{alma}prestashop>alma_ce67a7d4b82bc360a17d25943924b388'] = 'Sei sicuro di voler disattivare i pagamenti Alma dal tuo negozio?'; -$_MODULE['<{alma}prestashop>alma_f1206f9fadc5ce41694f69129aecac26'] = 'Configurare'; +$_MODULE['<{alma}prestashop>alma_f1206f9fadc5ce41694f69129aecac26'] = 'Configura'; $_MODULE['<{alma}prestashop>alma_36359547b09bdb31f46c419a0bd5807e'] = 'Categorie escluse'; $_MODULE['<{alma}prestashop>alma_7bab99339291e7eea710b4a998e663de'] = 'Alma richiede l\'estensione PHP cURL'; $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'Alma richiede l\'estensione PHP JSON.'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'Alma richiede OpenSSL >= 1.0.1'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'La mia formulazione da tradurre'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Oggi'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'Impossibile connettersi ad Alma utilizzando le chiavi API.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Controlla che le chiavi API inserite corrispondano a quelle sul %1$sportale Alma%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Errore/i chiave: %1$s.'; @@ -79,8 +80,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Messaggio visualizzato nella pagina di un prodotto escluso o nella pagina del carrello se contiene un prodotto escluso.'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Categorie escluse'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Attiva il checkout nella stessa pagine'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Attiva del checkout nella stessa pagine per Paga Ora, P2X, P3X e P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Attivare il checkout in-page per tutti i metodi di pagamento Alma'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'La pagina di checkout all\'interno del tuo sito web'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Pulsante di pagamento in entrata Selettore Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAdvanced%2$s [Opzionale] Selettore CSS utilizzato dai nostri script per identificare il pulsante di pagamento Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Per esempio #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Selettore del pulsante di invio dell\'ordine'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAdvanced%2$s [Opzionale] Selettore CSS utilizzato dai nostri script per identificare il pulsante di conferma del pagamento'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'Pagamento sulla stessa pagina'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Questo widget ti consente di informare i tuoi clienti della disponibilità del sistema di pagamento Alma direttamente sulla pagina del prodotto, aiutandoti così ad aumentare il tuo tasso di conversione. Per maggiori dettagli sulla sua configurazione o in caso di problemi, consulta %1$squesta documentazione%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Visualizza Widget'; @@ -134,7 +140,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma - Pagamento in %d rate'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'Siamo spiacenti di informarti che si è verificato un problema durante il processo di pagamento; il tuo pagamento Alma sarà completamente rimborsato. Ti preghiamo di riprovare il pagamento per completare l\'ordine.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'Ci scusiamo per l\'inconveniente, ma si è verificato un problema durante il processo di pagamento e non siamo stati in grado di rimborsare il tuo pagamento Alma. Per risolvere il problema, ti chiediamo gentilmente di contattare l\'assistenza di Alma indicando il seguente riferimento di pagamento: %s. Il nostro team sarà lieto di assisterti a ricevere il rimborso completo. Grazie per la collaborazione.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Oggi'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Totale'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = '%s mese dopo'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Errore: Impossibile trovare la transazione Alma'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = 'Oggi paghi 0 € poi %1$s il %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Paga ora con la carta bancaria'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Paga in %d rate'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Compra ora Paga in %d giorni'; @@ -144,11 +154,12 @@ $_MODULE['<{alma}prestashop>customfieldshelper_6ed45ebd72fcca0fc0c271128e9d7b7b'] = 'Alla spedizione'; $_MODULE['<{alma}prestashop>apihelper_fc610b81ff31f9d969ddb659cd8248c1'] = 'Alma ha riscontrato un errore durante il recupero dello stato del commerciante, si prega di controllare le chiavi api o di riprovare più tardi.'; $_MODULE['<{alma}prestashop>admininsurancehelper_eaff1bdf24fcffe0e14e29a1bff51a12'] = 'Assicurazione'; -$_MODULE['<{alma}prestashop>admininsurancehelper_f1206f9fadc5ce41694f69129aecac26'] = 'Configurare'; +$_MODULE['<{alma}prestashop>admininsurancehelper_f1206f9fadc5ce41694f69129aecac26'] = 'Configura'; $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Ordini'; -$_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'Con la presente dichiaro di accettare di sottoscrivere l\'assicurazione offerta da Alma. In tal modo, confermo di aver preso visione della [nota informativa, che costituisce le condizioni generali], del [documento informativo sul prodotto assicurativo] e del [foglio informativo e di consulenza precontrattuale]. Accetto senza riserve e acconsento a firmare elettronicamente i vari documenti che formano il mio contratto, se del caso. Acconsento espressamente alla raccolta e all\'utilizzo dei miei dati personali ai fini della sottoscrizione e della gestione del/i mio/i contratto/i di assicurazione.'; +$_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'Con la presente dichiaro di accettare di sottoscrivere l\'assicurazione offerta da Alma. In tal modo, confermo di aver preso visione della [nota informativa, che costituisce le condizioni generali], del [documento informativo sul prodotto assicurativo] e del [foglio informativo e di consulenza precontrattuale]. Accetto senza riserve e acconsento a firmare elettronicamente i vari documenti che formano il mio contratto, se applicabile. Acconsento espressamente alla raccolta e all\'utilizzo dei miei dati personali ai fini della sottoscrizione e della gestione del/i mio/i contratto/i di assicurazione.'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'La configurazione è stata salvata'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Errore nella creazione della configurazione dell\'assicurazione Alma: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Errore nell\'assicurazione del prodotto durante la configurazione delle modifiche: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Errore nella creazione della configurazione dell\'assicurazione Alma: %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Ordini con assicurazione'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Ordine Id'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Riferimento'; @@ -171,7 +182,7 @@ $_MODULE['<{alma}prestashop>adminalmarefunds_dde9188155937e885e5f5b002e6dcb39'] = 'Errore: tipo di rimborso sconosciuto (%s)'; $_MODULE['<{alma}prestashop>subscription_e8b288e3bc9f8001cb5e625c549420e9'] = 'Manca l\'id dell\'abbonamento'; $_MODULE['<{alma}prestashop>subscription_0d06849941740b4bdd9281f07d28e0dd'] = 'L\'azione è sconosciuta'; -$_MODULE['<{alma}prestashop>subscription_a8cec6fae3a5545458fcf2f8a34dcbe9'] = 'Errore nell\'annullare l\'abbonamento'; +$_MODULE['<{alma}prestashop>subscription_a8cec6fae3a5545458fcf2f8a34dcbe9'] = 'Errore durante la cancellazione dell\'abbonamento'; $_MODULE['<{alma}prestashop>payment_2f9f52496706027b880bac2e3c9af1d8'] = 'Si è verificato un errore al momento della richiesta di pagamento. Si prega di riprovare più tardi o di contattarci qualora il problema dovesse persistere.'; $_MODULE['<{alma}prestashop>payment_efa820507b1951ee5722003639b1a0b0'] = 'Il pagamento rateale Alma non è disponibile per questa valuta'; $_MODULE['<{alma}prestashop>validation_9d55a51cbc2d6cf7f9251b0cec59390e'] = 'Si è verificato un errore al momento della convalida del pagamento. Si prega di riprovare più tardi o di contattarci qualora il problema dovesse persistere. ID carrello: %d'; @@ -190,7 +201,7 @@ $_MODULE['<{alma}prestashop>getcontenthookcontroller_bf17ac149e2e7a530c677e9bd51d3fd2'] = 'Moduli'; $_MODULE['<{alma}prestashop>getcontenthookcontroller_5f265dfcb9ab68a1258ec25393ffb886'] = 'Responsabile del modulo'; $_MODULE['<{alma}prestashop>getcontenthookcontroller_c6e24f81cb99e08c3d56b191c00aea28'] = 'Gestione dei moduli - Elenco'; -$_MODULE['<{alma}prestashop>frontheaderhookcontroller_0bbf1fb0708055cf522541b4151894c4'] = 'Per gestire i vostri acquisti con Assurance, accedete alla pagina di checkout.'; +$_MODULE['<{alma}prestashop>frontheaderhookcontroller_0bbf1fb0708055cf522541b4151894c4'] = 'Per gestire i vostri acquisti con Assurance, accedi alla pagina di checkout.'; $_MODULE['<{alma}prestashop>frontheaderhookcontroller_8f1e80580ceb2bb7a54a7288ea169b30'] = 'L\'assicurazione Alma può essere aggiunta al carrello solo se è associata a un prodotto assicurabile. Verrà proposta nella pagina del prodotto in questione.'; $_MODULE['<{alma}prestashop>displaypaymenthookcontroller_afd8ac1c65e1519d6a890e5f98558a52'] = '%1$s allora %2$d x %3$s'; $_MODULE['<{alma}prestashop>displaypaymenthookcontroller_bc69b42c4bd339154f9025f3299ad146'] = 'Oggi paghi %1$s poi %2$d x %3$s'; @@ -198,7 +209,7 @@ $_MODULE['<{alma}prestashop>actionordergriddefinitionmodifierhookcontroller_26ddd5e40e811e8db050efc33508167b'] = 'Ha un\'assicurazione'; $_MODULE['<{alma}prestashop>actionordergriddefinitionmodifierhookcontroller_93cba07454f06a4a960172bbd6e2a435'] = 'Sì'; $_MODULE['<{alma}prestashop>actionordergriddefinitionmodifierhookcontroller_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No'; -$_MODULE['<{alma}prestashop>displayadminordertophookcontroller_f23e273d05fb22018b906de7ac983510'] = 'Questo carrello comprende uno o più abbonamenti assicurativi. Assicuratevi che l\'abbonamento o gli abbonamenti siano stati annullati prima di procedere al rimborso. %1$sGestite la cancellazione direttamente qui.%2$s'; +$_MODULE['<{alma}prestashop>displayadminordertophookcontroller_f23e273d05fb22018b906de7ac983510'] = 'Questo carrello comprende uno o più abbonamenti assicurativi. Assicurati che l\'abbonamento o gli abbonamenti siano stati annullati prima di procedere al rimborso. %1$sGestisci la cancellazione direttamente qui.%2$s'; $_MODULE['<{alma}prestashop>insurance_order_details_f5d74ea75357b5e139854c14f8e24fe3'] = 'Dettagli dell\'ordine'; $_MODULE['<{alma}prestashop>insurance_order_details_88b1b598df916ded43ff4abb0935ed7e'] = 'Dettagli degli ordini'; $_MODULE['<{alma}prestashop>insurance_254f642527b45bc260048e30704edb39'] = 'Configurazione'; @@ -226,7 +237,7 @@ $_MODULE['<{alma}prestashop>excludedcategories_2b02fe17f294da7167110f5df2b72fc0'] = 'Se vendi tali prodotti, dovrai configurare il modulo Alma in modo tale che sia disattivato quando i clienti consultano o acquistano queste tipologie di prodotti.'; $_MODULE['<{alma}prestashop>excludedcategories_eeecfb6e26e4e102986292a543d37542'] = 'Utilizza %1$s%2$sla pagina delle categorie escluse%3$s%4$s per adeguarti a tali regole.'; $_MODULE['<{alma}prestashop>excludedcategories_576dc983c16c3d346e6dfe174b662bf2'] = 'Categorie attualmente escluse:'; -$_MODULE['<{alma}prestashop>displayadminordertop_57f05100f1068b2f65644ff34e339eb1'] = 'Ricordate di annullare gli abbonamenti assicurativi prima di avviare un rimborso.'; +$_MODULE['<{alma}prestashop>displayadminordertop_57f05100f1068b2f65644ff34e339eb1'] = 'Ricordati di annullare gli abbonamenti assicurativi prima di avviare un rimborso'; $_MODULE['<{alma}prestashop>sample_payment_button_1f956efd3d3772790153d1e9e95e64c5'] = 'Modifica il testo visualizzato durante la scelta del metodo di pagamento nel tuo checkout. Si adatterà alle lingue del tuo sito.'; $_MODULE['<{alma}prestashop>sample_payment_button_f3244aba99d8eb5ccaf1f3a6b8ad1a93'] = 'Esempio di pulsante di pagamento Alma'; $_MODULE['<{alma}prestashop>sample_payment_button_9f04fe30d0288024643a1dd3074abe2e'] = 'Esempio di titolo e descrizione.'; @@ -253,15 +264,15 @@ $_MODULE['<{alma}prestashop>pnx_fees_5532ee2e5ea88b613ccb38e9c88f9a77'] = 'se pensi che i tuoi volumi di vendita giustifichino tariffe migliori!'; $_MODULE['<{alma}prestashop>order_refund_ps15_cbb3ab577b705e328991986e35218f50'] = 'Importo rimborsato'; $_MODULE['<{alma}prestashop>order_refund_ps15_96b0141273eabab320119c467cdcaf17'] = 'Totale'; -$_MODULE['<{alma}prestashop>notificationconfiguration_9f246d669c560d2ac604f5e01c8dd981'] = 'Per utilizzare Alma, seguire i seguenti passaggi'; -$_MODULE['<{alma}prestashop>notificationconfiguration_3f2c7ed52eb56243edc3a40def7df34b'] = 'Associare un account PrestaShop (appena sotto)'; -$_MODULE['<{alma}prestashop>notificationconfiguration_b6a9cb8bac15ad209cf970e3f7cc73a0'] = 'Creare un account Alma'; -$_MODULE['<{alma}prestashop>notificationconfiguration_e243bbd390b43c9ee6047fab4ab3cdc0'] = 'Consultate la nostra guida introduttiva'; -$_MODULE['<{alma}prestashop>notificationconfiguration_cf5ec9fb9f7214a3db82a5a39fec5b48'] = 'Inserire la chiave API'; -$_MODULE['<{alma}prestashop>notificationconfiguration_055f421849c2a1c32b885c95540f827c'] = 'Trovate la vostra chiave API live sul vostro cruscotto %1$s Alma%2$s'; -$_MODULE['<{alma}prestashop>notificationconfiguration_53b458e8453e3694811e61c96527d638'] = 'Per utilizzare la modalità Test, recuperare la chiave API Test dalla dashboard di %1$ssandbox%2$s.'; +$_MODULE['<{alma}prestashop>notificationconfiguration_9f246d669c560d2ac604f5e01c8dd981'] = 'Per utilizzare Alma, ti invitiamo a seguire i seguenti passaggi'; +$_MODULE['<{alma}prestashop>notificationconfiguration_3f2c7ed52eb56243edc3a40def7df34b'] = 'Associa un account PrestaShop (vedi sotto)'; +$_MODULE['<{alma}prestashop>notificationconfiguration_b6a9cb8bac15ad209cf970e3f7cc73a0'] = 'Crea un account Alma'; +$_MODULE['<{alma}prestashop>notificationconfiguration_e243bbd390b43c9ee6047fab4ab3cdc0'] = 'Consulta la nostra guida introduttiva'; +$_MODULE['<{alma}prestashop>notificationconfiguration_cf5ec9fb9f7214a3db82a5a39fec5b48'] = 'Inserisci la chiave API'; +$_MODULE['<{alma}prestashop>notificationconfiguration_055f421849c2a1c32b885c95540f827c'] = 'Trovi la tua chiave API live nel tuo account Alma %1$s Alma%2$s'; +$_MODULE['<{alma}prestashop>notificationconfiguration_53b458e8453e3694811e61c96527d638'] = 'Per utilizzare la modalità Test, recupera la chiave API Test dalla dashboard di %1$ssandbox%2$s'; $_MODULE['<{alma}prestashop>notificationconfiguration_b040aba3ff898146cd8c1fb8cfd04daf'] = 'Offriamo il download o l\'aggiornamento del modulo PrestaShop Account (versione minima richiesta %1$s).'; -$_MODULE['<{alma}prestashop>notificationconfiguration_9700e091d54b8ff1fafcd27518c75b23'] = 'Collegate il vostro negozio al vostro account PrestaShop per sfruttare appieno i moduli offerti dal Marketplace PrestaShop e ottimizzare la vostra esperienza.'; +$_MODULE['<{alma}prestashop>notificationconfiguration_9700e091d54b8ff1fafcd27518c75b23'] = 'Collega il tuo negozio al tuo account PrestaShop per sfruttare appieno i moduli offerti dal Marketplace PrestaShop e ottimizza la tua esperienza.'; $_MODULE['<{alma}prestashop>notificationconfiguration_6997dde298b14fbf6a7c95bd39fe8dc4'] = 'È possibile trovare il modulo %1$squi%2$s'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_a6b0ef107f0d278df612764187bbdece'] = 'Aumenta le tue prestazioni e ricevi approfondimenti sulle tue vendite!'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_5b64cb0849dd12ea528c04f2fe66ae4d'] = 'Attivando questa opzione, permetti ad Alma di analizzare l\'utilizzo dei tuoi metodi di pagamento [1]al fine[/1] di migliorare il servizio e condividerti un approfondimento sui dati analizzati. Puoi [2]annullare l\'iscrizione e cancellare i tuoi dati[/2] in qualsiasi momento.'; @@ -270,11 +281,11 @@ $_MODULE['<{alma}prestashop>notificationshareofcheckout_28515fa383208fc73e01ab440f053fb0'] = 'fornitore di pagamento per ogni ordine'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_d98ac12774fca5c3cbaffe276840c55f'] = 'Rifiuta'; $_MODULE['<{alma}prestashop>notificationshareofcheckout_c4408d335012a56ff58937d78050efad'] = 'Accetta'; -$_MODULE['<{alma}prestashop>displaybackofficeheader_1e5f420d1f82c216803c0f6f2d25fb19'] = 'Confermare la cancellazione dell\'assicurazione prima di rimborsare l\'ordine'; -$_MODULE['<{alma}prestashop>displaybackofficeheader_ea4788705e6873b424c65e91c2846b19'] = 'Annullamento'; -$_MODULE['<{alma}prestashop>displaybackofficeheader_9fc85cd14a16265c6062fef6709317f0'] = 'Rimborsare l\'ordine'; -$_MODULE['<{alma}prestashop>displaybackofficeheader_d51b3b1c19648b5d3bfc1c5db6264519'] = 'Prima di procedere al rimborso dell\'ordine, accertarsi che i contratti assicurativi associati siano stati annullati con successo.'; -$_MODULE['<{alma}prestashop>displaybackofficeheader_36e992ad2ba4173cd6391e4c737b8e1d'] = 'È sicuro di voler confermare il rimborso?'; +$_MODULE['<{alma}prestashop>displaybackofficeheader_1e5f420d1f82c216803c0f6f2d25fb19'] = 'Ti chiediamo di confermare di voler cancellare l\'assicurazione prima di rimborsare l\'ordine'; +$_MODULE['<{alma}prestashop>displaybackofficeheader_ea4788705e6873b424c65e91c2846b19'] = 'Annulla'; +$_MODULE['<{alma}prestashop>displaybackofficeheader_9fc85cd14a16265c6062fef6709317f0'] = 'Rimborsa l\'ordine'; +$_MODULE['<{alma}prestashop>displaybackofficeheader_d51b3b1c19648b5d3bfc1c5db6264519'] = 'Prima di procedere al rimborso dell\'ordine, verifica che i contratti assicurativi associati siano stati annullati con successo.'; +$_MODULE['<{alma}prestashop>displaybackofficeheader_36e992ad2ba4173cd6391e4c737b8e1d'] = 'Sei sicuro di voler procedere al rimborso?'; $_MODULE['<{alma}prestashop>getcontent_53ce4ef3d9b0dde0cb18ee9424dc4e4f'] = 'Compilare tutti i campi obbligatori'; $_MODULE['<{alma}prestashop>getcontent_8f5fc63df52306a94566eba9f11de438'] = 'Inserire la chiave API Live per utilizzare la modalità Live'; $_MODULE['<{alma}prestashop>getcontent_fde62b5820c448b8db7eb98235de0138'] = 'Inserire la chiave API Test per utilizzare la modalità Test'; @@ -298,7 +309,7 @@ $_MODULE['<{alma}prestashop>getcontent_8c10d3b0970a247fc554062dc9055fd1'] = 'L’ammontare massimo per i pagamenti in %1$d rate deve essere compreso tra %2$d e %3$d.'; $_MODULE['<{alma}prestashop>getcontent_84b96a3ca61f4425b3fd56534a89a653'] = 'Impossibile salvare le impostazioni di Share of Checkout, riprova più tardi'; $_MODULE['<{alma}prestashop>getcontent_7f40d377cc4942c4f0d6e75a736f8445'] = 'Configurazione memorizzata con successo'; -$_MODULE['<{alma}prestashop>widgetaddinsuranceproducts_f1aab89a3a1e86807c8dffa61d41ded6'] = 'Proteggete il resto dei vostri prodotti con'; +$_MODULE['<{alma}prestashop>widgetaddinsuranceproducts_f1aab89a3a1e86807c8dffa61d41ded6'] = 'Proteggi il resto dei tuoi prodotti con'; $_MODULE['<{alma}prestashop>widgetaddinsuranceproducts_f28220d70798406523119d998573b489'] = 'Voglio assicurare tutti i [1]%1$s[/1] rimanenti nel mio carrello'; $_MODULE['<{alma}prestashop>fees_3acc62b245d8bc10f04d81f69d85b685'] = '(Nessun costo aggiuntivo)'; $_MODULE['<{alma}prestashop>feeplan_64408fc092e84b9eb352626a0bcbbdf7'] = 'TAEG fisso'; @@ -319,5 +330,4 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_8e51eafe439b0adfecc2dc209c2efb15'] = 'Potrai quindi inserire le tue chiavi API:'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'Trovi la tua chiave API Live sulla %1$stua dashboard Alma%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'Per utilizzare la modalità Test, recupera la tua chiave API Test sulla %1$stua dashboard sandbox%2$s'; -$_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'In caso di problemi, si prega di contattarci via e-mail all\'indirizzo %1$ssupport@getalma.eu%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'Il pagamento rateale di Alma non è disponibile per questo ordine'; +$_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'In caso di problemi, ti invitiamo a contattarci via e-mail all\'indirizzo %1$ssupport@getalma.eu%2$s'; diff --git a/alma/translations/nl.php b/alma/translations/nl.php index 59d104eda..7ddddd9d2 100644 --- a/alma/translations/nl.php +++ b/alma/translations/nl.php @@ -32,6 +32,7 @@ $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'Voor Alma is een PHP JSON extensie nodig.'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'Voor Alma is OpenSSL >= 1.0.1 nodig'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'Mijn formulering om te vertalen'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Vandaag'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'Kan geen verbinding maken met Alma met behulp van jouw API-keys.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Controleer de API-keys op jouw %1$sAlma dashboard%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Fout(en) sleutel(s): %1$s.'; @@ -79,8 +80,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Bericht dat wordt weergegeven op een uitgesloten productpagina of op de winkelwagenpagina als deze een uitgesloten product bevat.'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Uitgesloten categorieën'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'In-pagina afrekenen activeren'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'In-page checkout activeren voor Pay Now, P2X, P3X en P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'In-page checkout activeren voor alle betaalmethoden van Alma'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'De in-pagina checkout op je eigen website'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Invoer betaalknop Alma keuzeschakelaar'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sGeavanceerd%2$s [Optioneel] CSS-selector gebruikt door onze scripts om de Alma-betaalknop te identificeren'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Bijv. #id, .class, ...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Bestelling plaatsen knop selector'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sGeavanceerd%2$s [Optioneel] CSS-selector die door onze scripts wordt gebruikt om de knop voor betalingsbevestiging te identificeren'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'In-pagina afrekenen'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Met deze widget kunt u uw klanten informeren over de beschikbaarheid van Alma\'s betalingsmogelijkheden direct vanaf de productpagina, wat helpt om uw conversiepercentage te verhogen. Voor meer details over de configuratie of voor bij problemen kunt u %1$sdeze documentatie%2$sraadplegen.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Weergave widget'; @@ -134,7 +140,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma - Betalen in %d keer'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'Het spijt ons je te moeten informeren dat er een probleem opgetreden is tijdens het betaalproces, jouw Alma-betaling zal volledig worden terugbetaald. Probeer de betaling opnieuw om je bestelling te voltooien.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'Onze excuses voor het ongemak, maar er was een probleem tijdens het betaalproces, en we konden jouw Alma-betaling niet terugbetalen. Om dit op te lossen, willen we je vriendelijk verzoeken contact op te nemen met ons support team met jouw betaalreferentie: %s. Ons team zal je helpen om ervoor te zorgen dat je de volledige terugbetaling ontvangt. Bedankt voor je medewerking.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Vandaag'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Totaal'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = '%s maand later'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Fout: Kon Alma transactie niet vinden'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = '€0 vandaag dan %1$s op %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Betaal nu met creditcard'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Betalen in %d termijnen'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Koop nu Betaal in %d dagen'; @@ -148,7 +158,8 @@ $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Bestellingen'; $_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'Hierbij verklaar ik akkoord te gaan met de verzekering aangeboden door Alma. Hierbij bevestig ik dat ik vooraf kennis heb genomen van de [informatiebrochure, die de algemene voorwaarden vormt], het [informatiedocument over het verzekeringsproduct] en het [precontractuele informatie- en adviesblad]. Ik ga er zonder voorbehoud mee akkoord en stem ermee in de verschillende documenten die mijn contract vormen, indien van toepassing, elektronisch te ondertekenen. Ik geef uitdrukkelijk toestemming voor het verzamelen en gebruiken van mijn persoonsgegevens met het oog op het afsluiten en beheren van mijn verzekeringscontract(en).'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'Je configuratie is opgeslagen'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Fout bij het aanmaken van configuratie Alma verzekering: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Fout verzekering product tijdens wijziging configuratie: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Fout bij het aanmaken van configuratie Alma verzekering: %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Bestellingen met verzekering'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Id bestelling'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Referentie'; @@ -320,4 +331,3 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'Vindt jouw API-sleutel voor Live op %1$suw dashboard van Alma%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'Om de Test-modus te gebruiken, zoek je jouw API-sleutel voor Test op %1$suw sandbox dashboard%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'Als je problemen ondervindt, kun je contact met ons opnemen via e-mail op %1$ssupport@getalma.eu%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'Gespreide betaling van Alma is niet beschikbaar voor deze bestelling'; diff --git a/alma/translations/pt.php b/alma/translations/pt.php index 242031aca..88b2dea25 100644 --- a/alma/translations/pt.php +++ b/alma/translations/pt.php @@ -32,6 +32,7 @@ $_MODULE['<{alma}prestashop>alma_fbb47375d2272bef79f5722a183bf1ec'] = 'A Alma requer a extensão JSON PHP'; $_MODULE['<{alma}prestashop>alma_7fb83ba9cf3cc38857a2ddae98534d22'] = 'A Alma requer OpenSSL >= 1.0.1'; $_MODULE['<{alma}prestashop>modulefactorytest_5914ca153abaf8a2af61e13e7fe7e829'] = 'A minha redação para traduzir'; +$_MODULE['<{alma}prestashop>translationhelpertest_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Hoje'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_cc76de47de858ac2fa2964f534ecfdfb'] = 'Não foi possível conectar-se à Alma usando suas chaves de API.'; $_MODULE['<{alma}prestashop>wrongcredentialsexception_733b6ddadc31fd97174b0cfe69b584c9'] = 'Por favor, verifique novamente as suas chaves no seu painel de instrumentos %1$sAlma%2$s.'; $_MODULE['<{alma}prestashop>wrongparamsexception_8ec75b5f68c49d1d6541b1e318a8120d'] = 'Chave(s) de erro(s): %1$s.'; @@ -79,8 +80,13 @@ $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_c4cea4750fb3ef077cbf2e1283c312ac'] = 'Mensagem exibida numa página de produto excluído ou na página do cesto, se incluir um produto excluído.'; $_MODULE['<{alma}prestashop>excludedcategoryadminformbuilder_36359547b09bdb31f46c419a0bd5807e'] = 'Categorias excluídas'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_2420ebe02d61c738479f399a97e1cf18'] = 'Ativar o checkout na página'; -$_MODULE['<{alma}prestashop>inpageadminformbuilder_bf3b980c4aa11b5fca4cc3096f50e0b8'] = 'Ativar o checkout na página para Pay Now, P2X, P3X e P4X'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_3dd32a0e923aeb930c7c0ced60f7b2e0'] = 'Ativar o checkout na página para todos os métodos de pagamento Alma'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_220a4f39147308a2160f7abc4d00ae43'] = 'A página de checkout no seu próprio sítio Web'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6f7991629de2e9ee19a0bf2a0469138c'] = 'Botão de pagamento de entrada Seletor de Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_6644897911f79aa5889998a5ab18c5cd'] = '%1$sAvançado%2$s [Opcional] Seletor CSS utilizado pelos nossos scripts para identificar o botão de pagamento Alma'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_cc12a5229a16dced1984745e05872a94'] = 'Por exemplo, #id, .class...'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_8ee0042ba2657c2af782fcc8893fa45a'] = 'Botão de seleção da encomenda'; +$_MODULE['<{alma}prestashop>inpageadminformbuilder_afa1a431a4735641af813166d75b1c06'] = '%1$sAvançado%2$s [Opcional] Seletor CSS utilizado pelos nossos scripts para identificar o botão de confirmação de pagamento'; $_MODULE['<{alma}prestashop>inpageadminformbuilder_6de24747c86085e597f6b38d4d1d01a4'] = 'Checkout na página'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_a2a52a9dd1864e2b995793bd67b8c6e5'] = 'Este widget permite informar os seus clientes sobre a disponibilidade das facilidades de pagamento da Alma diretamente na página do produto, o que ajudará a aumentar sua taxa de conversão. Para mais detalhes sobre a sua configuração ou em caso de problemas, consulte %1$sesta documentação%2$s.'; $_MODULE['<{alma}prestashop>carteligibilityadminformbuilder_ac6329ea064b9212be7e442cb46bf68f'] = 'Exibir o widget'; @@ -134,7 +140,11 @@ $_MODULE['<{alma}prestashop>paymentvalidation_6f11098989b14063e0a4cfe362734850'] = 'Alma - %d prestações mensais'; $_MODULE['<{alma}prestashop>refundhelper_446ae76a36687f9dbc62430e7006ca91'] = 'Lamentamos informar que houve um problema durante o processo de pagamento, o seu pagamento Alma será totalmente reembolsado. Por favor, tente novamente efectuar o pagamento para concluir a sua encomenda.'; $_MODULE['<{alma}prestashop>refundhelper_448edd2d5c593906afa202847b8d79c0'] = 'Pedimos desculpa pelo incómodo, mas houve um problema durante o processo de pagamento e não foi possível reembolsar o seu pagamento Alma. Para resolver este problema, pedimos-lhe que contacte a nossa equipa de apoio com a sua referência de pagamento: %s. A nossa equipa terá todo o prazer em ajudá-lo a garantir que recebe o seu reembolso total. Agradecemos a sua colaboração.'; +$_MODULE['<{alma}prestashop>planhelper_1dd1c5fb7f25cd41b291d43a89e3aefd'] = 'Hoje'; +$_MODULE['<{alma}prestashop>planhelper_96b0141273eabab320119c467cdcaf17'] = 'Total'; +$_MODULE['<{alma}prestashop>planhelper_9bbd94e0a507283ae202812ea1bd6f20'] = '%s mês mais tarde'; $_MODULE['<{alma}prestashop>orderhelper_7960c85fd5916169fc5038a2192094f8'] = 'Erro: não foi possível encontrar a transação da Alma'; +$_MODULE['<{alma}prestashop>paymentoptiontemplatehelper_9088921432b295dfe6f02863b2dc0ff8'] = '0€ hoje, e depois %1$s em %2$s'; $_MODULE['<{alma}prestashop>customfieldshelper_2c53dea2326232a2d867ddd1d2206aa0'] = 'Pagar agora com cartão de crédito'; $_MODULE['<{alma}prestashop>customfieldshelper_300de0751d957421cc332ba21c43a598'] = 'Pagar em %d prestações'; $_MODULE['<{alma}prestashop>customfieldshelper_726c61fad46c135efb4198820e5484ba'] = 'Compre agora e pague em %d dias'; @@ -148,7 +158,8 @@ $_MODULE['<{alma}prestashop>admininsurancehelper_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Encomendas'; $_MODULE['<{alma}prestashop>insuranceservice_d87aee5118a62a7ff6c21e4ac31006c5'] = 'Confirmo a minha aceitação em subscrever o seguro proposto pela Alma. Ao fazê-lo, confirmo que tomei conhecimento prévio da [nota informativa, que constitui as condições gerais], do [documento de informação sobre o produto de seguro] e da [ficha de informação e aconselhamento pré-contratual]. Aceito sem reservas e concordo em assinar eletronicamente os vários documentos que constituem o meu contrato, se aplicável. Autorizo expressamente a recolha e utilização dos meus dados pessoais para efeitos de subscrição e gestão do(s) meu(s) contrato(s) de seguro.'; $_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b824200e9b8aca1fbb762d6566ff0cd7'] = 'A sua configuração foi guardada'; -$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_4a39c6a33c3441762924914168d2a387'] = 'Erro ao criar a configuração do seguro Alma: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_a6bf06f186e2fccecad054fd831c2144'] = '[Alma] Erro no produto de seguro durante a configuração da mudança: %1$s'; +$_MODULE['<{alma}prestashop>adminalmainsuranceconfiguration_b42688965893bdb7a37cf1197e506e25'] = '[Alma] Erro ao criar a configuração do seguro Alma: %1$s'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_a66f446516cd125af12bd25073f88b78'] = 'Encomendas com seguro'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_49414cda71621b3ee718ae5ff40804c5'] = 'Id Ordem'; $_MODULE['<{alma}prestashop>adminalmainsuranceorders_63d5049791d9d79d86e9a108b0a999ca'] = 'Referência'; @@ -320,4 +331,3 @@ $_MODULE['<{alma}prestashop>notificationfirstinstallation_1e6898bbd6a44041932ac84cbda13bd7'] = 'Pode encontrar a sua chave API live no %1$sseu painel de controlo Alma%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_689c39b29a6d91e6dff728a7762cbc9e'] = 'Para utilizar o modo teste, precisa da sua chave API de teste no %1$sseu painel sandbox%2$s'; $_MODULE['<{alma}prestashop>notificationfirstinstallation_dcab24ea1a3cd9bab8047b1b6f7ee65c'] = 'Se tiver algum problema, contacte-nos por correio eletrónico para %1$ssupport@getalma.eu%2$s'; -$_MODULE['<{alma}prestashop>displaypayment_pnx_22f0189423433ab0e055b91d98970e5f'] = 'As prestações mensais através da Alma não estão disponíveis para esta encomenda';