0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 10287 Просмотров
*

hardstep

  • Захожу иногда
  • 76
  • 5 / 0
стоит J 1.5.20 и VM 1.1.5 неуспел доделать сайт, как уже спам валиться через форму "задать вопрос по этому товару".
на контакты поставил плагин OsolCaptcha. настроил внешний вид и все хорошо в контактах.
кто разбирается в системе работы плагинов Joomla, помогите допилить эту хорошую капчу для формы "задать вопрос по этому товару".
мои мысли по этому поводу.
плагин, как и многие имеет 2 файла osolcaptcha.php и osolcaptcha.xml, которые лежат  plugins\system.
1) во втором файле после строк:
Код
<param name="enableForContactUs" type="radio"  label="Auto add in  Contact Us form?" description="If it is a customized contact us form by editing the HTML or because of template override ,the captcha may not auto add even if you enable tthis"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>
добавляю строки
Код
<param name="enableForVirtueMartAsk" type="radio"  label="Auto add in  VirtueMartAsk?" description="add in  VirtueMartAsk"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>
это даст отображение нового параметра в администрировании плагина
2) в osolcaptcha.php находится весь функционал плагина, который реализован через переменные и следующие функции
насколько понял, в плагине реализован механизм подмены кнопки(для которой нужна проверка капчей) таблицей с капчей и такой же кнопкой.
display - не понял, что делает, но похоже модификации не требует
setColors  - что-то делает с цветами, модификации не требует
create_imageAdv - делает капчу с размазанными буквами, модификации не требует
create_imagePlane  - делает капчу с неразмазанными буквами, модификации не требует
confirm - небольшая функция, не понял, что делает
onCaptcha_Display  - небольшая функция, не понял, что делает
onCaptcha_confirm  - небольшая функция, не понял, что делает
GetCapthcaHTML - функция генерирует HTML код самой CAPTCHA
getIsEnabledForForms - небольшая функция, модификации не требует
changeMod - небольшая функция, модификации не требует
onAfterRender - функция с одной строчкой global $mainframe;, модификации не требует
onShowOSOLCaptcha  - функция с одной строчкой, модификации не требует
HexToRGB - что-то делает с цветами, модификации не требует
RGBToHex - что-то делает с цветами, модификации не требует
botscoutCheck - для сервиса botscout, модификации не требует
mailBotScoutResult - для сервиса botscout, модификации не требует

onAfterDispatch - большая функция, ТРЕБУЕТ МОДИФИКАЦИИ
getEnabledForms  - небольшая функция, которая задает массив со строками кода, которые нужно искать, чтобы заменить качпей, ТРЕБУЕТ МОДИФИКАЦИИ
onAfterRoute - большая функция, ТРЕБУЕТ МОДИФИКАЦИИ
« Последнее редактирование: 17.10.2010, 21:47:37 от hardstep »
*

hardstep

  • Захожу иногда
  • 76
  • 5 / 0
спасибо всем за помощь. проблема решена:

1) в файл language/ru-RU/ru-RU.ini
в любую новую строчку вставляем
SEND_BUTTON=Отправить

2) в файле plugins/system/osolcaptcha.php
функцию onAfterRoute
заменяем следующим кодом
Код
function onAfterRoute()
    {
        global $mainframe;
        //$this->botscoutCheck();
        JPlugin::loadLanguage( 'plg_system_osolcaptcha', JPATH_ADMINISTRATOR );
        //showCaptcha=True;
        $showCaptcha = JRequest::getVar('showCaptcha');
        if($showCaptcha == 'True')
        {
            return $this->display();
        }
    
        $return = false;
        $osolCatchaTxt = JRequest::getVar('osolCatchaTxt','');
        $osolCatchaTxtInst = JRequest::getVar('osolCatchaTxtInst','');
        

        /*$mainframe->triggerEvent('onCaptcha_confirm', array($osolCatchaTxt, &$return));
        if(!$return)*/
        //if(isset($_REQUEST[JUtility::getToken()])&& !$this->confirm($osolCatchaTxt))
        $option = JRequest::getVar('option');
        $task = JRequest::getVar('task');
        //$this->mailBotScoutResult();
        
        /**********************************************SECOND LEVEL SECURITY CHECK*******************************************************************/
            $secondLevelPass = true;
            $plugin     =& JPluginHelper::getPlugin('system', 'osolcaptcha');
            $this->params       = new JParameter($plugin->params);

            if(
               (
                ($option == 'com_contact' && $task=='submit')||
                ($option == 'com_user' && isset($_REQUEST['task']) && $task != 'logout' )
               ) &&
               $this->params->get("enableSecondLevelSecurity") == 'Yes' &&
               ($osolCatchaTxtInst == '' || $osolCatchaTxt == '')
              )
            {
                

                $isEnabledForForm = $this->getIsEnabledForForms();
                                
                switch($option)
                {
                    case 'com_contact':
                        if($isEnabledForForm["enableForContactUs"])
                        {
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        
                        break;
                    case 'com_virtuemart':
                        if($isEnabledForForm["enableForVirtueMartAsk"])
                        {
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        
                        break;
                    case 'com_user':
                        
                        if(JRequest::getVar('task') == 'login'  && $isEnabledForForm["enableForComLogin"])
                        {
                            JRequest::setVar('view','login');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        if(JRequest::getVar('task') == 'register_save'   && $isEnabledForForm["enableForRegistration"])
                        {
                            JRequest::setVar('view','register');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        if(JRequest::getVar('task') == 'remindusername'   && $isEnabledForForm["enableForRemind"])
                        {
                            JRequest::setVar('view','remind');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        if(JRequest::getVar('task') == 'requestreset'   && $isEnabledForForm["enableForReset"])
                        {
                            JRequest::setVar('view','reset');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        
                        
                        
                        break;
                }

                if(!$secondLevelPass)
                {
                    $this->reportBotscoutNegativeMail  = $this->params->get('reportBotscoutNegativeMail',$this->reportBotscoutNegativeMail);
                    if($this->reportBotscoutNegativeMail   !='')
                    {
                        $this->mailBotScoutResult();
                    }
                    JError::raiseWarning("666",JTEXT::_('OSOLCAPTCHA_ERROR_MESSAGE'));
                }
                
            }
        if(in_array($option,array('com_contact','com_user', 'com_virtuemart')) && (isset($_REQUEST['task'])&& $task != 'logout' ) && (isset($_REQUEST['osolCatchaTxt']) && !$this->confirm($osolCatchaTxt,$osolCatchaTxtInst)))//."$osolCatchaTxt,$osolCatchaTxtInst".JFactory::getSession()->get('securiy_code'.$osolCatchaTxtInst)
        {
            JError::raiseWarning("666",JTEXT::_('OSOLCAPTCHA_ERROR_MESSAGE'));
            switch($option)
            {
                case 'com_contact':
                    JRequest::setVar('task','');
                    
                    break;
                case 'com_virtuemart':
                    JRequest::setVar('task','');
                    
                    break;
                case 'com_user':
                    
                    if(JRequest::getVar('task') == 'login')
                    {
                        JRequest::setVar('view','login');
                    }
                    if(JRequest::getVar('task') == 'register_save')
                    {
                        JRequest::setVar('view','register');
                    }
                    if(JRequest::getVar('task') == 'remindusername')
                    {
                        JRequest::setVar('view','remind');
                    }
                    if(JRequest::getVar('task') == 'requestreset')
                    {
                        JRequest::setVar('view','reset');
                    }
                    
                    
                    JRequest::setVar('task','');
                    break;
            }
            
        }
        elseif(isset($_REQUEST['osolCatchaTxt']) && !$this->confirm($osolCatchaTxt,$osolCatchaTxtInst))
        {
            JError::raiseWarning("666",JTEXT::_('OSOLCAPTCHA_ERROR_MESSAGE').JTEXT::_('OSOL_CAPTCHA_GO_BACK'));
            $mainframe->redirect(JURI::base());
        }
        else
        {
            $this->botscoutCheck();
        }
        //admin passphrase check
        //$pathArray = explode("/",JURI::base());
        $pathArray = preg_split("~/~",JURI::base());//fix provided by Gruz from ukraine on 5th september 2010

        
        $isAdmin = ($pathArray[(count($pathArray) - 2)] == "administrator");
        
        if($isAdmin  )
        {
            $currentSession =  & JFactory::getSession() ;//&JSession::getInstance('none',array());
            $sessOsolAdminPassPhrase = $currentSession->get('osolAdminPassPhrase','');
            $paramOsolPassPhrase =$this->params->get("adminPassPhrase");
            $osolPP = JRequest::getVar('osolPP','');
            if(($paramOsolPassPhrase !='') && ( $sessOsolAdminPassPhrase != $paramOsolPassPhrase)  &&  ($osolPP!= $paramOsolPassPhrase ) )
            {
                $liveSiteUserSide  = str_replace("/administrator/","/",JURI::base());
                $mainframe->redirect($liveSiteUserSide);
                
            }
            elseif($osolPP == $paramOsolPassPhrase )
            {
                
                $currentSession->set('osolAdminPassPhrase',$osolPP);
            }
        }
    }

3) в файле plugins/system/osolcaptcha.php
функцию getEnabledForms
заменяем следующим кодом
Код
function getEnabledForms()
{
return array(
"enableForContactUs" => '<button class="button validate" type="submit">',
"enableForVirtueMartAsk" => '<input type="button" name="send" value="'. JTEXT::_('SEND_BUTTON').'" class="button" onclick="validateEnquiryForm()" />',

"enableForComLogin"  => '<input type="submit" name="Submit" class="button" value="'.JTEXT::_('LOGIN').'" />',
"enableForRegistration" => '<button class="button validate" type="submit">'.JTEXT::_('REGISTER').'</button>',
"enableForReset" => '<button type="submit" class="validate">'.JText::_('Submit').'</button>',
"enableForRemind" => '<button type="submit" class="validate">'.JText::_('Submit').'</button>',
);
}

4) в файле plugins/system/osolcaptcha.php
функцию onAfterDispatch
заменяем следующим кодом
Код
function onAfterDispatch()
    {
$document = &JFactory::getDocument();//
$content = $document->getBuffer('component');
$option = JRequest::getVar('option');
$view = JRequest::getVar('view');
$captchaHTML = $this->GetCapthcaHTML();
$plugin =& JPluginHelper::getPlugin('system', 'osolcaptcha');
 
$enabledForms = $this->getEnabledForms();
$isEnabledForForm = $this->getIsEnabledForForms();

$newContent = "";
if(in_array($option,array('com_contact','com_user', 'com_virtuemart')))
{
switch($option)
{
case 'com_contact':
//$checkContent = '<button class="button validate" type="submit">';
if($isEnabledForForm["enableForContactUs"])
{
$checkContent = $enabledForms["enableForContactUs"];
}
break;

case 'com_virtuemart':
//$checkContent = '<button class="button validate" type="submit">';
if($isEnabledForForm["enableForVirtueMartAsk"])
{
$checkContent = $enabledForms["enableForVirtueMartAsk"];
// echo 'CHECK CONTENTSSSSS'. $checkContent;
}
break;

case 'com_user':
switch($view)
{
case 'register':
if($isEnabledForForm["enableForRegistration"])
{
$checkContent = $enabledForms["enableForRegistration"];

}
//$checkContent = array('<button class="button validate" type="submit">'.JTEXT::_('REGISTER').'</button>','<input type="submit" name="Submit" class="button" value="'.JTEXT::_('LOGIN').'" />');
break;
case 'login':
if($isEnabledForForm["enableForComLogin"])
{
$checkContent = $enabledForms["enableForComLogin"];

}
break;
case 'remind':
//echo $isEnabledForForm["enableForComRemind"]
if($isEnabledForForm["enableForRemind"])
{
$checkContent = $enabledForms["enableForRemind"];


}
break;
case 'reset':
if($isEnabledForForm["enableForReset"] && JRequest::getVar('layout','') == '')
{
$checkContent = $enabledForms["enableForReset"];

}
break;

}

break;
}

$newContent = str_replace($checkContent,$captchaHTML.$checkContent,$content);
}
if($newContent!="")
{
$document->setBuffer($newContent,'component');
}

//now check for login module,add the possition here if the login module is not in any of the following
$plugin =& JPluginHelper::getPlugin('system', 'osolcaptcha');
   $this->params   = new JParameter($plugin->params);
if($this->params->get('enableForModules') == 'Yes')// && $option!= 'com_user')
{
foreach(array('left','right','top','user2','user3') as $pos)
{


$modContent = $document->getBuffer('modules',$pos);
$loginModuleSearch ='<input type="submit" name="Submit" class="button" value="'.JTEXT::_('LOGIN').'" />';

if(strstr($modContent,$loginModuleSearch)!=false)
{
//echo $pos.'true<br />';

$modContent = str_replace($loginModuleSearch ,$this->GetCapthcaHTML(true).$loginModuleSearch,$modContent);


$document->setBuffer($modContent ,'modules',$pos);


}

//echo "onAfterDespatch()<br />";
//echo "<pre>";print_r($modloginContent);echo "</pre>";
}
}
    }
5) в файле
components/com_virtuemart/themes/default/templates/product_details/flypage.tpl.php
(вместо flypage.tpl.php может быть та страница товара, которая указана в настройках магазина VM или категории товаров)
строчку
Код
<input type="button" name="send" value="<?php echo $VM_LANG->_('SEND_BUTTON')?>" class="button" onclick="validateEnquiryForm()" />    
заменяем на
Код
<input type="button" name="send" value="<?php echo JText::_('SEND_BUTTON')?>" class="button" onclick="validateEnquiryForm()" />

6) в файле plugins/system/osolcaptcha.xml
после строк:
Код
<param name="enableForContactUs" type="radio"  label="Auto add in  Contact Us form?" description="If it is a customized contact us form by editing the HTML or because of template override ,the captcha may not auto add even if you enable tthis"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>
добавляем строки
Код
<param name="enableForVirtueMartAsk" type="radio"  label="Auto add in  VirtueMartAsk?" description="add in  VirtueMartAsk"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>

быть может в решении есть неточности или лишние действия, но оно работает на J 1.5.10 + VM 1.1.5
если Вам понравилось или пригодилось решение, то жмите на "+" под моим ником слева
« Последнее редактирование: 17.10.2010, 21:49:22 от hardstep »
*

Вованище

  • Захожу иногда
  • 134
  • 20 / 0
  • <target = blank>
Цитировать
быть может в решении есть неточности или лишние действия, но оно работает на J 1.5.10 + VM 1.1.5
если Вам понравилось или пригодилось решение, то жмите на "+" под моим ником слева
Да уж - лишние действия. Инструкции разработчика читать не пробовал?
Достаточно в форму добавить этот код:
Код
<?php 
global $mainframe;
//set the argument below to true if you need to show vertically( 3 cells one below the other)
$mainframe->triggerEvent('onShowOSOLCaptcha', array(false));
?>
*

nik_neman

  • Захожу иногда
  • 52
  • 2 / 0
Был вопрос - разобрался сам.
« Последнее редактирование: 19.10.2011, 11:54:58 от nik_neman »
*

Meronix

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Да уж - лишние действия. Инструкции разработчика читать не пробовал?
Достаточно в форму добавить этот код:
Код
<?php 
global $mainframe;
//set the argument below to true if you need to show vertically( 3 cells one below the other)
$mainframe->triggerEvent('onShowOSOLCaptcha', array(false));
?>



А в какой файл его надо добавить?
*

bri_man

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Продолжу тему про OsolCaptcha. Создал модуль с формой. Аналогично хочу прикрутить капчу. Саму капчу вывел - проблем не возникло.
Но, как сделать, чтобы форма не отправлялась, пока не заполнен код CAPTCHA?
Смотрел html-код, который вставляет osolCapcha - никаких проверок там нет.
Подозреваю, что проверку осуществляет Joomla, и возможно исходя из классов, прописанных в тегах (form,input,textarea).
Но, чето не пойму как. Возможно, что - то в форму нужно добавить, но что?

У меня эта CAPTCHA работает на форме контактов. Практически аналогично оформил свою, но без результата.

Т. е. побольшому счету, для начала вообще понять бы как Joomla проверяет заполнение формы, например отправки в стандартных контактах.

hardstep, можешь дать код функции validateEnquiryForm() из кнопки
Код
<input type="button" name="send" value="<?php echo JText::_('SEND_BUTTON')?>" class="button" onclick="validateEnquiryForm()" />
?
« Последнее редактирование: 29.01.2012, 19:22:12 от bri_man »
*

bri_man

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Разобрался. Для вызова стандартной валидации формы, нужно дописать
Код
JHTML::_('behavior.formvalidation');
и установить у формы class="form-validate" и у обязательных полей class="inputbox required"
« Последнее редактирование: 29.01.2012, 21:41:18 от bri_man »
*

Иоланта

  • Захожу иногда
  • 166
  • 3 / 0
а у меня другая проблема. Может кто сталкивался с интеграцией osolcaptcha и ck forms?

У меня вообще плагин везде прекрасно работает (не только в форме авторизации и т.д.), но т.к. пользуюсь разными формами на сайте, CAPTCHA везде по-разному выглядит, решила убрать стандартную капчу из ck forms, заменить на osol, все появилось, но при отправке формы выдается системное сообщение, что код введен неправильно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Помогите мне поместить полем SKU под Описание Продукта browse_listtable.tpl.php

Автор saudzboa

Ответов: 1
Просмотров: 1090
Последний ответ 14.02.2018, 22:44:25
от saudzboa
Не могу убрать форму "Задайте вопрос..." на странице товара

Автор abrodski

Ответов: 1
Просмотров: 1381
Последний ответ 20.05.2014, 14:30:44
от abrodski
Вопрос по setPageTitle

Автор holovla

Ответов: 4
Просмотров: 1426
Последний ответ 26.04.2013, 22:20:00
от holovla
Задать вопрос о товаре в popup окне

Автор newjey

Ответов: 1
Просмотров: 1598
Последний ответ 18.04.2013, 17:02:44
от newjey
кнопка в описании товара "Задайте вопрос по этому товару". Защита от спама

Автор Karolinus

Ответов: 40
Просмотров: 15466
Последний ответ 08.02.2013, 13:54:39
от secur