diff --git a/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php b/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php index cd184c7..96ab96b 100644 --- a/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php +++ b/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php @@ -192,5 +192,41 @@ public function newsletterSubscriber($observer) return $this; } + /** + * Check Captcha On Checkout Register Page + * + * @param Varien_Event_Observer $observer + * @return $this + */ + public function checkCheckout($observer) + { + $checkoutMethod = Mage::getSingleton('checkout/type_onepage')->getQuote()->getCheckoutMethod(); + if ($checkoutMethod == Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) { + $formId = 'register_during_checkout'; + $captchaModel = Mage::helper('captcha')->getCaptcha($formId); + if ($captchaModel->isRequired()) { + $controller = $observer->getControllerAction(); + if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) { + $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true); + $result = array('error' => 1, 'message' => Mage::helper('captcha')->__('Incorrect CAPTCHA.')); + $controller->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); + } + } + } + if ($checkoutMethod == Mage_Checkout_Model_Type_Onepage::METHOD_GUEST) { + $formId = 'guest_checkout'; + $captchaModel = Mage::helper('captcha')->getCaptcha($formId); + if ($captchaModel->isRequired()) { + $controller = $observer->getControllerAction(); + if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) { + $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true); + $result = array('error' => 1, 'message' => Mage::helper('captcha')->__('Incorrect CAPTCHA.')); + $controller->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); + } + } + } + return $this; + } + } diff --git a/app/code/community/ProxiBlue/ReCaptcha/Model/Recaptcha.php b/app/code/community/ProxiBlue/ReCaptcha/Model/Recaptcha.php index d24be23..dcc573c 100755 --- a/app/code/community/ProxiBlue/ReCaptcha/Model/Recaptcha.php +++ b/app/code/community/ProxiBlue/ReCaptcha/Model/Recaptcha.php @@ -194,6 +194,9 @@ public function getElementId($type = 'input') public function isRequired($login = null) { if(!$this->_isEnabled() || !in_array($this->_formId, $this->_getTargetForms())){ + if($this->_formId == 'recapctha_checkout') { + return true; + } return false; } @@ -208,4 +211,35 @@ private function _debug($message) { Mage::log($message, null, 'recapctha.log'); } } + + /** + * Retrieve list of forms where captcha must be shown + * + * For frontend this list is based on current website + * + * @return array + */ + protected function _getTargetForms() + { + $formsString = (string) $this->_getHelper()->getConfigNode('forms'); + $forms = explode(',', $formsString); + // remove either checkout as guest or register at checkout, and if either is there, replace with a generic checkout + if (($key = array_search('register_during_checkout', $forms)) !== false) { + unset($forms[$key]); + if (Mage::registry('has_recapctha') == false && $this->_formId == 'register_during_checkout') { + $forms[] = 'recapctha_checkout'; + $this->_formId = 'recapctha_checkout'; + Mage::register('has_recapctha', true, true); + } + } + if (($key = array_search('guest_checkout', $forms)) !== false) { + unset($forms[$key]); + if (Mage::registry('has_recapctha') == false && $this->_formId == 'guest_checkout') { + $forms[] = 'recapctha_checkout'; + $this->_formId = 'recapctha_checkout'; + Mage::register('has_recapctha', true, true); + } + } + return array_unique($forms); + } } diff --git a/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml b/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml index 7fa3de5..3ecf3fe 100755 --- a/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml +++ b/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml @@ -2,7 +2,7 @@ - 2.3.4 + 2.3.7 @@ -54,6 +54,14 @@ + + + + proxiblue_recaptcha/observer + checkCheckout + + + diff --git a/composer.json b/composer.json index 7514ece..5fc519d 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "license": "OSL-3.0", "homepage": "https://github.com/ProxiBlue/reCaptcha", "description": "Clean integration of Google reCaptcha to OpenMage", - "version": "2.3.6", + "version": "2.3.7", "authors": [ { "name": "Lucas van Staden",