Select Page

Contact section of Joomla! 1.5 using SecurityImages 5.0

Contact section of Joomla! 1.5 using SecurityImages 5.0

 

SecurityImages BETA will be available in no more than 2 days…

Note that SecurityImages is still WAY to intrusive toward #Joomla! as core file has to be changed in order to use Captcha.

Lets take the contact section of #Joomla! as  an example.

  • Download the patch HERE (soon available as a ready to use patch) and overwrite file on your server OR
  • Do it on your own, this is more for 3rd party developer, or people wanting to understand the internal of #Joomla! or SecurityImages

Click Read MORE!

      It is always recommended to use a switch in all your component to activate deactivate SecurityImages per components  through the administrator control panel.

      This is done by adding to administrator/components/com_contact/contact_items.xml the following code:

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

      Joomla will read this xml file on the fly  and build the graphical user interface for the contact settings.

      contact.settings.securityimages.5.0

      Since Joomla! 1.5 now use a Model View Controller paradigm, we have to alter the controller, and add a new Task displaySecurityImagesCaptcha()in  components/com_contact/controller.php:

         function displaySecurityImagesCaptcha() { 
              global
      $mainframe
             
              //Per contact you can define if the user has to resolve the capctha 
             
      $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(‘useSecurityImages’)) {     
                 
      $check = null
                 
      $mainframe->triggerEvent(
      onSecurityImagesDisplay, array($check)); 
                  if (!
      $
      check) { 
                      echo
      “<br/>Erreur affichage du Captcha<br/>”
                  } 
              } 
                   
          } 

      As you can see, the event “onSecurityImagesDisplay” is triggered on a per contact name basis. That mean that some contact can have a Captcha while other have not. 

      The next step is to add the task checkSecurityImagesCaptcha() checking the captcha in the components/com_contact/controller.php

      function checkSecurityImagesCaptcha() { 
              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 ); 
             
              //check if that user has a capctha 
             
      if (!$params->get(
      useSecurityImages)) {  
                  return
      true
              } 
             
      $return = false
             
      $securityImagesJoomlaContactUserTry = JRequest::getVar(‘securityImagesJoomlaContactUserTry’, false, , ‘CMD’); 
             
      $mainframe->triggerEvent(
      onSecurityImagesCheck, array($securityImagesJoomlaContactUserTry &$return));
              return
      $return;
          } 

      One more step is to alter the original submit() method of the controller in components/com_contact/controller.php

              global $mainframe  

              if (!$this->checkSecurityImagesCaptcha()) {
                 
      JError::raiseWarning(“999”,“Invalid Captcha Code”);
                 
      $this->display();
                  return
      false;
              } 

      And finally altering the view /com_contact/views/contact/tmpl/default_form.php
      to display the Captcha field

      <?php if ($this->params->get(useSecurityImages)) { ?>             
      <img src=”index.php?option=com_contact&task=
      displaySecurityImagesCaptcha&contact_id=<?php echo $this->contact->id; ?>“> 
      <br /> 
      <input type=”text” name=”securityImagesJoomlaContactUserTry” /> 
      <br /> 
       <?php } ?>

      As you see a lot of thing have been done, and I am still testing and improving the code.

      About The Author

      I worked with various Insurances companies across Switzerland on online applications handling billion premium volumes. I love to continuously spark my creativity in many different and challenging open-source projects fueled by my great passion for innovation and blockchain technology.In my technical role as a senior software engineer and Blockchain consultant, I help to define and implement innovative solutions in the scope of both blockchain and traditional products, solutions, and services. I can support the full spectrum of software development activities, starting from analyzing ideas and business cases and up to the production deployment of the solutions.I'm the Founder and CEO of Disruptr GmbH.

      Categories