Новости Joomla

Вышли релизы безопасности Joomla 6.1.4 и Joomla 5.4.9

Релиз безопасности Joomla 6.1.4 и Joomla 5.4.9

Проект Joomla! рад сообщить о выходе Joomla 6.1.4 и Joomla 5.4.9. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

JoomShift - компонент переноса контента между Joomla сайтами.

‍ JoomShift - компонент переноса контента между Joomla сайтами.

JoomShift - компонент переноса контента между Joomla сайтами.Он позволяет экспортировать модули, меню, материалы, категории, пользовательские поля и пользователей в виде переносимых JSON/ZIP-файлов, а затем импортировать их в любую другую установку Joomla.

Возможности компонента:- Модули — полная настройка, назначение пунктов меню, позиционирование и содержимое SP Page Builder.
-Меню — иерархия родительских/дочерних элементов, типы элементов, ссылки, уровни доступа и параметры. Отсутствующие типы меню создаются автоматически, а элементы, указывающие на неустановленные компоненты, пропускаются с предупреждением.
-Статьи и категории — контент, метаданные, изображения и иерархия категорий.
-Пользовательские поля — группы полей, определения, ограничения по категориям и значения (включая поля с несколькими значениями) — экспортируются и автоматически создаются заново на целевом сайте.
-Пользователи — данные профиля, назначения групп и хэши паролей, чтобы учетные записи работали сразу после импорта.
-Кросс-версииJoomla - компонент адаптируется к различиям в схеме базы данных между версиями Joomla.
-Создан для крупных сайтов — постраничные списки (20/50/100/250строк) и автоматический пакетный экспорт для сайтов с более чем 500 элементами, поэтому он продолжает работать на обычном хостинге.
-Опция перезаписи — обновляет совпадающие элементы при повторном импорте вместо создания дубликатов.
-Drag-n-drop импорт с подробным отчетом о том, что было импортировано, обновлено или пропущено, и почему.

На момент написания заметки для скачивания необходима регистрация/логин на сайте разработчика.

-Joomla Extensions Directory-Страница расширения#joomla#расширения

Модуль joomLab JS Ajax Cart позволит организовать в Вашем интернет-магазине на компоненте JoomShopping удобную AJAX корзину с возможностью добавлять товары и изменять их количество без перезагрузки страницы.

Модуль joomLab JS Ajax Cart позволит организовать в Вашем интернет-магазине на компоненте JoomShopping удобную AJAX корзину с возможностью добавлять товары и изменять их количество без перезагрузки страницы.

Кроме этого, в состав пакета установки входит плагин, который позволяет выводить атрибуты товара в список всех товаров, менять эти атрибуты и добавлять товар в корзину из списка товаров. Если атрибутов много, то их можно выводить в всплывающем (модальном окне).

В модуле предусмотрено 2 макета дизайна для Bootstrap и UIkit и максимальная кастомизация для переопределения макетов в шаблон.Демо расширенияСтраница расширения

Видео в Telegram

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

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

Автор abrodski

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

Автор holovla

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

Автор newjey

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

Автор Karolinus

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