VirtueMart Forum

VirtueMart 2 + 3 + 4 => General Questions => Topic started by: sohopros on October 27, 2013, 04:04:09 AM

Title: Virtuemart and Captcha (registration form)
Post by: sohopros on October 27, 2013, 04:04:09 AM
We are looking for a a captcha solution that is compatible with Virtuemart. We've seen many forum posts recommending EasyCalcCheck Plus. We tried it, and it works fine for the "Ask a question" form, but were not able to display a captcha on the virtuemart user registration page.

Questions:
1 - Are you aware of any captcha plugin that would work with both "Ask a question" and user registration forms?
2 - Is there any way to make EasyCalcCheck Plus work with the virtuemart user registration form?

Thank you,
SOHO Prospecting Team

EasyCalcCheck Plus on JED -> http://extensions.joomla.org/extensions/access-a-security/site-security/captcha/11964
Title: Re: Virtuemart and Captcha (registration form)
Post by: sohopros on November 02, 2013, 00:30:01 AM
Hi again,

We are still unable to make ECC+ captcha work with registration form in VirtueMart.

Anyone knows how can we make it work?

Regards,
SOHO Prospecting Team
Title: Re: Virtuemart and Captcha (registration form)
Post by: coligtho on November 02, 2013, 17:38:37 PM
Quote from: sohopros on November 02, 2013, 00:30:01 AM
Hi again,

We are still unable to make ECC+ captcha work with registration form in VirtueMart.

Anyone knows how can we make it work?

Regards,
SOHO Prospecting Team

Same problem here
Title: Re: Virtuemart and Captcha (registration form)
Post by: coligtho on November 03, 2013, 03:47:14 AM
Because I need to hit the deadline for our project and have no time to search for a better plugin to work with captcha I decided to modify the plugin and combine it with template override:

For the registration form you need to create a file on the template override:

<joomla root>/templates/<yourtemplate>/html/com_virtuemart/user/edit.php

on the form you need to change the attribute id of the form to --> id="userForm2"

and then on the plugin I modified: <joomla root>/plugins/system/easycalccheckplus/easycalccheckplus.php

I tried to modify the function "onUserBeforeSave"

so the function code becomes:

public function onUserBeforeSave($user, $isnew, $new)
    {
        if($this->_load_ecc_check == true)
        {
            if(!empty($isnew))
            {
                $option = JRequest::getWord('option');
                $task = JRequest::getWord('task');

                if(  ($this->params->get('user_reg') AND $option == 'com_users') OR ($this->params->get('communitybuilder') AND $option == 'com_comprofiler'))
                {
                    if(!$this->performChecks())
                    {
                        $url = $this->buildFailedUrl();
                        $this->redirect($url);
                    }
                } elseif( $option=='com_virtuemart' && $task=='saveUser' ){
               
                if(!$this->performChecks()){
                $application = JFactory::getApplication();
               
                $application->enqueueMessage('You failed the spam check. Please try again!', 'error');
                return false;
                }
               
            }
            }
           
        }
    }


And I also modify the loadEcc function on the file within this function try to find the code that says:

elseif($option == 'com_virtuemart')

and change it to:

elseif($option == 'com_virtuemart') // Virtuemart - tested with version 2.0.12f
            {
                if($task == 'askquestion' OR $task == 'mailAskquestion')
                {
                    $this->_extension_info = array('com_virtuemart', '<form[^>]+id="askform".+</form>', '<label>', '<input[^>]*type="submit" name="submit_ask"[^>]*/>', 'mailAskquestion');

                    if($this->params->get('virtuemart') AND ( $view == 'productdetails' AND $task == 'askquestion' ) )
                    {
                        $this->_load_ecc = true;
                    }
                    elseif($this->params->get('virtuemart') AND ($view == 'productdetails' AND $task == 'mailAskquestion') )
                    {
                        $this->_load_ecc_check = true;
                    }
                }
                elseif( $layout == 'edit' OR $task == 'saveUser' OR $task == 'editaddresscheckout' OR $task == 'registercheckoutuser' OR $task == 'savecheckoutuser')
                {
                    $this->_extension_info = array('com_virtuemart', '<form[^>]+id="userForm2".+</form>', '<label>', '<button[^>]*type="submit"[^>]*/>', 'savecheckoutuser');

                    if($this->params->get('virtuemart') AND ( ($layout == 'edit' AND $view == 'user') OR ($view == 'user' AND $task == 'editaddresscheckout') ) )
                    {
                        $this->_load_ecc = true;
                    }
                    elseif($this->params->get('virtuemart') AND $view == 'user' AND ( $task == 'saveUser' OR $task == 'registercheckoutuser' OR $task == 'savecheckoutuser') )
                    {
                        $this->_load_ecc_check = true;
                    }
                }
            }


I know it's not good to break this plugin but I'm desperate to get the project done and it's part of security. I'm not yet sure if how this would affect the way the plugin work as a whole but so far it's working fine on my end just let me know if this works or if you encounter any issues.
Title: Re: Virtuemart and Captcha (registration form)
Post by: jjk on November 28, 2013, 10:07:47 AM
Did you try the latest version of ECC+ including support for VM 2.0.24.a?
http://joomla-extensions.kubik-rubik.de/ecc-easycalccheck-plus#changelog