diff --git a/app/code/Magento/ReCaptchaPurchaseOrder/README.md b/app/code/Magento/ReCaptchaPurchaseOrder/README.md new file mode 100644 index 0000000..82f73cd --- /dev/null +++ b/app/code/Magento/ReCaptchaPurchaseOrder/README.md @@ -0,0 +1,3 @@ +# Magento_ReCaptchaPurchaseOrder module + +Please refer to: diff --git a/app/code/Magento/ReCaptchaPurchaseOrder/composer.json b/app/code/Magento/ReCaptchaPurchaseOrder/composer.json new file mode 100644 index 0000000..c491910 --- /dev/null +++ b/app/code/Magento/ReCaptchaPurchaseOrder/composer.json @@ -0,0 +1,23 @@ +{ + "name": "magento/module-re-captcha-purchase-order", + "description": "Google reCAPTCHA integration for Magento2", + "require": { + "php": "~8.2.0||~8.3.0||~8.4.0", + "magento/framework": "*" + }, + "suggest": { + "magento/module-purchase-order": "*", + "magento/module-re-captcha-admin-ui": "*", + "magento/module-re-captcha-frontend-ui": "*" + }, + "type": "magento2-module", + "license": "OSL-3.0", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ReCaptchaPurchaseOrder\\": "" + } + } +} diff --git a/app/code/Magento/ReCaptchaPurchaseOrder/etc/module.xml b/app/code/Magento/ReCaptchaPurchaseOrder/etc/module.xml new file mode 100644 index 0000000..842b54a --- /dev/null +++ b/app/code/Magento/ReCaptchaPurchaseOrder/etc/module.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/app/code/Magento/ReCaptchaPurchaseOrder/registration.php b/app/code/Magento/ReCaptchaPurchaseOrder/registration.php new file mode 100644 index 0000000..9b55048 --- /dev/null +++ b/app/code/Magento/ReCaptchaPurchaseOrder/registration.php @@ -0,0 +1,27 @@ + 0) { + reCaptchaId = $activeReCaptcha.last().attr('id'); + } + + if (reCaptchaId !== undefined && recaptchaRegistry.triggers.hasOwnProperty(reCaptchaId)) { + //ReCaptcha is present for checkout + recaptchaDeferred = $.Deferred(); + recaptchaRegistry.addListener(reCaptchaId, function (token) { + //Add reCaptcha value to place-order request and resolve deferred with the API call results + payload.xReCaptchaValue = token; + originalAction(serviceUrl, payload, messageContainer).done(function () { + recaptchaDeferred.resolve.apply(recaptchaDeferred, arguments); + }).fail(function () { + recaptchaDeferred.reject.apply(recaptchaDeferred, arguments); + }); + }); + //Trigger ReCaptcha validation + recaptchaRegistry.triggers[reCaptchaId](); + + if ( + !recaptchaRegistry._isInvisibleType.hasOwnProperty(reCaptchaId) || + recaptchaRegistry._isInvisibleType[reCaptchaId] === false + ) { + //remove listener so that place order action is only triggered by the 'Place Order' button + recaptchaRegistry.removeListener(reCaptchaId); + } + + return recaptchaDeferred; + } + + //No ReCaptcha, just sending the request + return originalAction(serviceUrl, payload, messageContainer); + }); + }; +});