X
    Categories: Knowledgebase

Add captcha to contact form for magento1

NameSpace : MyPackage and Module: MyModule

Module configuration

location : app/etc/modules/MyPackage_MyModule.xml

<config>
    <modules>
        <MyPackage_MyModule>
            <active>true</active>
            <codePool>local</codePool>
        </MyPackage_MyModule>
    </modules>
</config>

Create config file for this module

location : app/code/local/MyPackage/MyModule/etc/config.xml

<config>
    <modules>
        <MyPackage_MyModule>
            <version>0.0.0.1</version>
        </MyPackage_MyModule>
    </modules>
    <global>
        <models>
            <mymodule>
                <class>MyPackage_MyModule_Model</class>
            </mymodule>
        </models>
        <events>
            <controller_action_predispatch_contacts_index_post>
                <observers>
                    <mymodule>
                        <class>mymodule/observer</class>
                        <method>checkContacts</method>
                    </mymodule>
                </observers>
            </controller_action_predispatch_contacts_index_post>
        </events>
    </global>
    <default>
        <captcha>
            <frontend>
                <areas>
                    <contacts>
                        <label>Contacts Page</label>
                    </contacts>
                </areas>
            </frontend>
        </captcha>
        <customer>
            <captcha>
                <always_for>
                    <contacts>1</contacts>
                </always_for>
            </captcha>
        </customer>
    </default>
</config>

Create a observer for that

location: app/code/local/MyPackage/MyModule/Model/Observer.php

class MyPackage_MyModule_Model_Observer
{
    public function checkContacts($observer){
        $formId = 'contacts';
        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
        if ($captchaModel->isRequired()) {
            $controller = $observer->getControllerAction();
            $word = $this->_getCaptchaString($controller->getRequest(), $formId);
            if (!$captchaModel->isCorrect($word)) {
                Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
                $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
                $url =  Mage::getUrl('contacts');
                $controller->getResponse()->setRedirect($url);
            }
        }
        return $this;
    }
    /**
     * Get Captcha String
     *
     * @param Varien_Object $request
     * @param string $formId
     * @return string
     */
    protected function _getCaptchaString($request, $formId)
    {
        $captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
        return $captchaParams[$formId];
    }
}

Create a local.xml to your active theme inside layout folder.

<layout version="0.1.0">
<contacts_index_index>
    <reference name="contactForm">
        <action method="setTemplate"><template>mymodule/contacts/form.phtml</template></action>
        <block type="core/text_list" name="form.additional.info">
            <block type="captcha/captcha" name="captcha">
                <reference name="head">
                    <action method="addJs"><file>mage/captcha.js</file></action>
                </reference>
                <action method="setFormId"><formId>contacts</formId></action>
                <action method="setImgWidth"><width>230</width></action>
                <action method="setImgHeight"><width>50</width></action>
            </block>
        </block>
    </reference>
</contacts_index_index>

Now copy contacts/form.phtml to mymodule/contacts/form.phtml, add

<?php echo $this->getChildHtml('form.additional.info'); ?>
to
<form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post" class="b_default_layout">
<ul class="form-list">
<li class="fields row">
<div class=" col-lg-6 col-md-6 col-sm-6 m_bottom_15">
<label >
Clear cache. Now Go to System -> Configuration -> Customer Configuration -> Captcha. Select Contact Page and Save.

Then you will see the Result :

Hope it helps !

Kien Wiliam: Magento Ecommerce Developer