Skip to content

Suggested changes from Julien #2

@Mark-H

Description

@Mark-H
I modified splitit code to be available only if Accept Terms is checked.

Can you modify the code of the extra on your side ?

Here are the modifications :


1. Fichier lexicon

Chemin : core/components/commerce_splitit/lexicon/en/default.inc.php

Ajouter cette ligne après $_lang['commerce_splitit.gateway'] = 'Splitit'; :

$_lang['commerce_splitit.accept_terms_first'] = 'Please accept the terms and conditions before paying with Splitit.';

Si tu as un fichier lexicon/fr/default.inc.php, y ajouter aussi :

$_lang['commerce_splitit.accept_terms_first'] = 'Veuillez accepter les conditions générales avant de payer avec Splitit.';

2. Template Splitit

Chemin : core/components/commerce_splitit/templates/frontend/gateways/splitit.twig

a) Dans le <style>, ajouter après le bloc existant :

#splitit-terms-notice {
    display: none;
    padding: 0.75rem 1rem;
    margin-bottom: 0.75rem;
    background: #fff8e1;
    border: 1px solid #f0c040;
    border-radius: 4px;
    color: #555;
}

b) Avant <div id="splitit-container"></div>, ajouter :

<div id="splitit-terms-notice"></div>

c) Dans onSuccess, remplacer le contenu par :

onSuccess: function(result) {
    const form = CommercePayments.getForm();

    // Safety check: terms must be accepted before submitting to Commerce
    const acceptTermsCheckbox = form.querySelector('input[name="accept_terms"]');
    if (acceptTermsCheckbox && !acceptTermsCheckbox.checked) {
        showSplititTermsNotice();
        return;
    }

    // Add data to form
    const input = document.createElement("input");
    input.setAttribute("type", "hidden");
    input.setAttribute("name", "splitit_data");
    input.setAttribute("value", JSON.stringify(result));
    form.appendChild(input);

    // Submit after adding the data
    form.submit();
}

d) Après splititDisableSubmitBtn, ajouter ces 2 fonctions :

function showSplititTermsNotice() {
    const notice = document.getElementById('splitit-terms-notice');
    if (notice) {
        notice.textContent = '{{ lex("commerce_splitit.accept_terms_first") }}';
        notice.style.display = 'block';
    }
}

function hideSplititTermsNotice() {
    const notice = document.getElementById('splitit-terms-notice');
    if (notice) {
        notice.style.display = 'none';
    }
}

e) Dans CommercePayments.onReady, remplacer tout le contenu par :

CommercePayments.onReady(function() {
    const form = CommercePayments.getForm();
    const btn = document.querySelector('button[type=submit].c-primary-button');
    const method = form.querySelector('#payment-method-{{ method }}');
    const radios = form.querySelectorAll('input[type=radio].c-payment-method-radio');
    const acceptTermsCheckbox = form.querySelector('input[name="accept_terms"]');

    const splitit = initializeSplitit();

    function termsAccepted() {
        return !acceptTermsCheckbox || acceptTermsCheckbox.checked;
    }

    function updateSplititVisibility() {
        if (method.checked) {
            splititDisableSubmitBtn(btn);
            if (termsAccepted()) {
                splitit.show();
                hideSplititTermsNotice();
            } else {
                splitit.hide();
                showSplititTermsNotice();
            }
        } else {
            splitit.hide();
            hideSplititTermsNotice();
            splititEnableSubmitBtn(btn);
        }
    }

    if (method.checked) {
        updateSplititVisibility();
    }

    radios.forEach(function(radio) {
        radio.addEventListener('change', function(e) {
            updateSplititVisibility();
        });
    });

    if (acceptTermsCheckbox) {
        acceptTermsCheckbox.addEventListener('change', function() {
            if (method.checked) {
                updateSplititVisibility();
            }
        });
    }
});

Résumé du comportement : Si AcceptTerms est activé et que l'utilisateur sélectionne Splitit sans avoir coché les CGU → le widget est masqué et un message s'affiche. Dès que la case est cochée → le widget apparaît. Double sécurité dans onSuccess au cas où.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions