You are here:   Home
Install CAPTCHA into default Joomla 1.5 Contact form
smaller text tool iconmedium text tool iconlarger text tool icon

captcha imageWith all the loads of SPAM people get on a daily basis you would think that the Joomla Dev team would have integrated a CAPTCHA feature into their contact form at the very least. Good thing we got a great community who have attempted to create CAPTCHA functionality for a few of the most widley used forms in Joomla. One of them being the default contact form.

This is a tutorial to install a CAPTCHA plugin into Joomla!. It's a hack as well as a plugin. But hey, It Works! I wish I could say the same for other CAPTCHA extensions out there.

Download the BIGO CAPTCHA 1.2 plugin from here: http://extensions.joomla.org/extensions/access-&-security/captcha/3499/details

Install the plugin into your Joomla 1.5 website.

Next we have to change the following files:

administrator/components/com_contact/contact_items.xml

components/com_contact/controller.php

components/com_contact/views/contact/tmpl/default_form.php

First we will change the administrator/components/com_contact/contact_items.xml file to give it a new parameter on the backend of Joomla.

After the on line 96 insert the following:

<param name="use_captcha" type="radio" default="1" label="Use Captcha" description="Enable Captcha verification">
<option value="0">No</option>
<option value="1">Yes</option>
</param>

Next we will change the components/com_contact/controller.php

After line 122 insert the following code:

/**
Captcha
*/
if (!$this->_checkCaptcha()) {
JError::raiseWarning("666","You have entered the wrong CAPTCHA sequence. Please try again.");
$this->display();
return false;
}


After line 395 insert the following:

/**
@author bigo
@date januray, 2008
*/
function displaycaptcha() {
global $mainframe;
$contactId = JRequest::getVar('contact_id', 0, '', 'int');
// load the contact details
$model    = &$this->getModel('contact');
$qOptions['id'] = $contactId;
$contact        = $model->getContact( $qOptions );
$params = new JParameter( $contact->params );
if ($params->get('use_captcha')) {
$Ok = null;
$mainframe->triggerEvent('onCaptcha_Display', array($Ok));
if (!$Ok) {
echo "<br/>Error displaying Captcha<br/>";
}
}
}

function _checkCaptcha() {
global $mainframe;
$contactId = JRequest::getVar('id', 0, '', 'int');
// load the contact details
$model = &$this->getModel('contact');
$qOptions['id'] = $contactId;
$contact = $model->getContact( $qOptions );
$params = new JParameter( $contact->params );
// not using captcha!
if (!$params->get('use_captcha')) {
return true;
}
$return = false;
$word = JRequest::getVar('word', false, '', 'CMD');
$mainframe->triggerEvent('onCaptcha_confirm', array($word, &$return));
if ($return) {
return true;
} else return false;
}

The above code allows our captcha to be displayed if chosen in the backend, checked and processed.

Last step is to add it to the contact form.

Open components/com_contact/views/contact/tmpl/default_form.php
Add the following code after line 63:

<?php if ($this->params->get('use_captcha')) { ?>
<!-- Bigo Captcha -->
<img src="/index.php?option=com_contact&task=displaycaptcha&contact_id=<?php echo $this->contact->id; ?>">
<br />
<input type="text" name="word" />
<br />
<?php } ?>

 

registered user groupThe Joomla!(R) name is used under a limited license from Open Source Matters in the United States and other countries.The Joomla! name and variations on it such as J, Joom, etc, is used under a limited license granted by Open Source Matters. The Joomla User Group San Diego is independent of and does not represent Open Source Matters or the Joomla! Project.