Новости Joomla

👩‍💻 WT CDEK library v.1.3.0 - обновление PHP SDK для Joomla + CDEK.

👩‍💻 WT CDEK library v.1.3.0 - обновление PHP SDK для Joomla + CDEK.

Небольшая нативная PHP Joomla библиотека для работы с API v.2 службы доставки CDEK. Библиотека представляет собой клиент для авторизации в CDEK API по OAuth, работы с некоторыми методами API: получения ряда данных и расчета стоимости доставки. Поддерживается Joomla 4.2.7 и выше.

В пакет входят:
- библиотека Webtolk/Cdekapi
- системный плагин System - WT Cdek для хранения настроек и AJAX-интеграций
- task-плагин Task - Update WT Cdek data для обновления локальных копий справочников CDEK по расписанию
- web asset с официальным JavaScript-виджетом СДЭК

👉 v.1.3.0. Что нового?
- Полный рефакторинг библиотеки. Библиотека переработана в entity-based API с фасадом Cdek и отдельным слоем запросов. Обратная совместимость не нарушена, поэтому версия библиотеки - 1.3.0.
- Добавлена поддержка новых разделов API СДЭК. Добавлена поддержка новых разделов API СДЭК: webhooks, prealert, печатные формы, payment, passport, reverse, intakes и других сущностей.
- Улучшена интеграция с Joomla.
Улучшена интеграция с Joomla: installer script для layouts, новые поля Joomla Form для тарифов и обновлённые js виджета CDEK.
- документация библиотеки. Все методы библиотеки подробно описаны, а так же текст документации собран в отдельной папке в git репозитории и будет опубликован на сайте.

Библиотека эта нужна для разработчиков, создающих свои расширения для интеграции Joomla и курьерской службы CDEK.

Страница расширения
GitHub расширения

@joomlafeed

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

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
Просмотров: 1591
Последний ответ 14.02.2018, 22:44:25
от saudzboa
Не могу убрать форму "Задайте вопрос..." на странице товара

Автор abrodski

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

Автор holovla

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

Автор newjey

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

Автор Karolinus

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