diff --git a/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php b/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php index 70e8e8e..aa9dfa3 100644 --- a/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php +++ b/app/code/community/ProxiBlue/ReCaptcha/Model/Observer.php @@ -54,6 +54,30 @@ public function checkContact($observer) return $this; } + /** + * Check Captcha On Forgot Password Page + * + * @param Varien_Event_Observer $observer + * @return Mage_Captcha_Model_Observer + */ + public function checkReview($observer) + { + $formId = 'user_review'; + $captchaModel = Mage::helper('captcha')->getCaptcha($formId); + if ($captchaModel->isRequired()) { + $controller = $observer->getControllerAction(); + if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) { + Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.')); + //$controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true); + //$refererUrl = $this->_getRefererUrl(); + //$controller->getResponse()->setRedirect($refererUrl); + //invalidate the formkey, whoich will force the controller to redirect back to referer + $controller->getRequest()->setParam('form_key', 'Incorrect CAPTCHA.'); + } + } + return $this; + } + /** * Get Captcha String * @@ -67,4 +91,28 @@ protected function _getCaptchaString($request, $formId) return $captchaParams[$formId]; } + /** + * Identify referer url via all accepted methods (HTTP_REFERER, regular or base64-encoded request param) + * + * @return string + */ + protected function _getRefererUrl($controller) + { + $refererUrl = $controller->getRequest()->getServer('HTTP_REFERER'); + if ($url = $controller->getRequest()->getParam(Mage_Core_Controller_Varien_Action::PARAM_NAME_REFERER_URL)) { + $refererUrl = $url; + } + if ($url = $controller->getRequest()->getParam(Mage_Core_Controller_Varien_Action::PARAM_NAME_BASE64_URL)) { + $refererUrl = Mage::helper('core')->urlDecodeAndEscape($url); + } + if ($url = $controller->getRequest()->getParam(Mage_Core_Controller_Varien_Action::PARAM_NAME_URL_ENCODED)) { + $refererUrl = Mage::helper('core')->urlDecodeAndEscape($url); + } + + if (!$this->_isUrlInternal($refererUrl)) { + $refererUrl = Mage::app()->getStore()->getBaseUrl(); + } + return $refererUrl; + } + } diff --git a/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml b/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml index bf06b71..61ef481 100644 --- a/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml +++ b/app/code/community/ProxiBlue/ReCaptcha/etc/config.xml @@ -2,7 +2,7 @@ - 1.1.0 + 1.2.0 @@ -38,6 +38,14 @@ + + + + proxiblue_recaptcha/observer + checkReview + + + @@ -72,6 +80,9 @@ + + + diff --git a/app/code/community/ProxiBlue/ReCaptcha/etc/system.xml b/app/code/community/ProxiBlue/ReCaptcha/etc/system.xml index dc34be2..8ccd3f0 100755 --- a/app/code/community/ProxiBlue/ReCaptcha/etc/system.xml +++ b/app/code/community/ProxiBlue/ReCaptcha/etc/system.xml @@ -1,30 +1,4 @@ - diff --git a/app/design/frontend/base/default/layout/proxiblue_recaptcha.xml b/app/design/frontend/base/default/layout/proxiblue_recaptcha.xml index 38f693d..e29fc24 100644 --- a/app/design/frontend/base/default/layout/proxiblue_recaptcha.xml +++ b/app/design/frontend/base/default/layout/proxiblue_recaptcha.xml @@ -1,40 +1,8 @@ - - - - mage/captcha.js - - user_contact @@ -47,4 +15,19 @@ + + + + + user_review + + + 230 + + + 50 + + + +