Огромная просьба людей "с кривыми руками" проходить мимо этой темы1. скачиваем прикреплённый архив архивчик.zip
2. распаковываем архив, файл kcaptcha.php и папки fonts, util кладём по следующему пути \components\com_adsmanager\helpers\
3. делаем возможным настройку CAPTCHA через админку, для этого выполняем следующие шаги:
- открываем файл \administrator\components\com_adsmanager\views\admin\tmpl\configuration.php текстовым редактором
- в конце файла (строки примерно 369-372) ищем такой код
<?php
echo $tabs->endPanel();
echo $tabs->endPane();
?>
- между строками echo $tabs->endPanel(); и echo $tabs->endPane(); вставляем следующий код:
echo $tabs->startPanel(JText::_('ADSMANAGER_TAB_CAPTCHA'), "Captcha-page");
?>
<table cellpadding="4" cellspacing="0" border="0" width="100%" class="adminlist">
<tr>
<td><?php echo JText::_('ADSMANAGER_USE_CAPTCHA'); ?></td>
<td>
<select id='use_captcha' name='use_captcha'>
<option value='1' <?php if ($this->conf->use_captcha == 1) { echo "selected"; } ?>><?php echo JText::_('ADSMANAGER_YES'); ?></option>
<option value='0' <?php if ($this->conf->use_captcha == 0) { echo "selected"; } ?>><?php echo JText::_('ADSMANAGER_NO'); ?></option>
</select>
</td>
<td><?php echo JText::_('ADSMANAGER_USE_CAPTCHA_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_ALPHABET'); ?></td>
<td><input type="text" size="50" name="allowed_symbols" value=<?php echo $this->conf->allowed_symbols; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_ALPHABET_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_LENGTH'); ?></td>
<td><input type="text" size="50" name="captcha_length" value=<?php echo $this->conf->captcha_length; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_LENGTH_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_WIDTH'); ?></td>
<td><input type="text" size="50" name="captcha_width" value=<?php echo $this->conf->captcha_width; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_WIDTH_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_HEIGHT'); ?></td>
<td><input type="text" size="50" name="captcha_height" value=<?php echo $this->conf->captcha_height; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_HEIGHT_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_AMPLITUDE'); ?></td>
<td><input type="text" size="50" name="captcha_amplitude" value=<?php echo $this->conf->captcha_amplitude; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_AMPLITUDE_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_W_NOISE'); ?></td>
<td><input type="text" size="50" name="captcha_w_noise" value=<?php echo $this->conf->captcha_w_noise; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_W_NOISE_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_B_NOISE'); ?></td>
<td><input type="text" size="50" name="captcha_b_noise" value=<?php echo $this->conf->captcha_b_noise; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_B_NOISE_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_SHOW_CREDITS'); ?></td>
<td>
<select id='captcha_show_credits' name='captcha_show_credits'>
<option value='1' <?php if ($this->conf->captcha_show_credits == 1) { echo "selected"; } ?>><?php echo JText::_('ADSMANAGER_YES'); ?></option>
<option value='0' <?php if ($this->conf->captcha_show_credits == 0) { echo "selected"; } ?>><?php echo JText::_('ADSMANAGER_NO'); ?></option>
</select>
</td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_SHOW_CREDITS_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_CREDITS'); ?></td>
<td><input type="text" size="50" name="captcha_credits" value=<?php echo $this->conf->captcha_credits; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_CREDITS_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_QUALITY'); ?></td>
<td><input type="text" size="50" name="captcha_quality" value=<?php echo $this->conf->captcha_quality; ?> /></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_QUALITY_LONG'); ?></td>
</tr>
<tr>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_SAMPLE'); ?></td>
<td><?php echo '<img src="'.$this->baseurl.'index.php?option=com_adsmanager&task=getcaptcha" onClick="this.src=this.src+\'&\'+Math.random();" title="Нажмите для обновления" style="cursor:pointer">'; ?></td>
<td><?php echo JText::_('ADSMANAGER_CAPTCHA_SAMPLE_LONG'); ?></td>
</tr>
</table>
<?php
echo $tabs->endPanel();
- меняем кодировку файла на UTF-8 без BOM, сохраняем и закрываем файл
- в языковой файл \administrator\language\ru-RU\ru-RU.com_adsmanager.ini в любое место вставляем следующие строки:
ADSMANAGER_TAB_CAPTCHA="Капча"
ADSMANAGER_USE_CAPTCHA="Включить Captcha?"
ADSMANAGER_USE_CAPTCHA_LONG="Использовать капчу для неавторизованных пользователей при добавлении объявления?"
ADSMANAGER_ALPHABET="Набор символов"
ADSMANAGER_ALPHABET_LONG="Введите символы, которые будут использоваться при генерации CAPTCHA"
ADSMANAGER_CAPTCHA_LENGTH="Количество символов"
ADSMANAGER_CAPTCHA_LENGTH_LONG="Количество символов, из которых будет состоять CAPTCHA"
ADSMANAGER_CAPTCHA_WIDTH="Ширина картинки"
ADSMANAGER_CAPTCHA_WIDTH_LONG="Ширина CAPTCHA в пикселях"
ADSMANAGER_CAPTCHA_HEIGHT="Высота картинки"
ADSMANAGER_CAPTCHA_HEIGHT_LONG="Высота CAPTCHA в пикселях"
ADSMANAGER_CAPTCHA_AMPLITUDE="Искажение символов"
ADSMANAGER_CAPTCHA_AMPLITUDE_LONG="Вертикальное искажение символов CAPTCHA в пикселях"
ADSMANAGER_CAPTCHA_W_NOISE="Плотность шума 1"
ADSMANAGER_CAPTCHA_W_NOISE_LONG="Плотность шума белого цвета"
ADSMANAGER_CAPTCHA_B_NOISE="Плотность шума 2"
ADSMANAGER_CAPTCHA_B_NOISE_LONG="Плотность шума чёрного цвета"
ADSMANAGER_CAPTCHA_SHOW_CREDITS="Показать подпись?"
ADSMANAGER_CAPTCHA_SHOW_CREDITS_LONG="Возможность показывать подпись внизу изображения CAPTCHA с заданным текстом (Высота +12px)"
ADSMANAGER_CAPTCHA_CREDITS="Подпись"
ADSMANAGER_CAPTCHA_CREDITS_LONG="Введите текст подписи"
ADSMANAGER_CAPTCHA_QUALITY="Качество изображения"
ADSMANAGER_CAPTCHA_QUALITY_LONG="Качество JPEG-сжатия картинки"
ADSMANAGER_CAPTCHA_SAMPLE="Образец CAPTCHA"
ADSMANAGER_CAPTCHA_SAMPLE_LONG="Просмотр примера CAPTCHA"
- сохраняем и закрываем файл
- в скаченном архиве есть скрипт "конфигурация.sql"
- в phpmyadmin выполняем скрипт импортом файла
4. открываем файл \components\com_adsmanager\controller.php и ищем функцию function save, перед этой функцией вставляем код:
function getcaptcha()
{
include( JPATH_BASE .'/components/com_adsmanager/helpers/kcaptcha.php' );
$this->addModelPath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_adsmanager'.DS.'models');
$configurationmodel = &$this->getModel( "configuration" );
$conf = $configurationmodel->getConfiguration();
$captcha = new KCAPTCHA($conf);
$session = JFactory::getSession();
$session->set('captcha_keystring', $captcha->getKeyString());
exit;
}
function getresultcaptchacheck()
{
$captha = JRequest::getVar('captcha_keystring');
$session = JFactory::getSession();
$sessCaptcha = $session->get('captcha_keystring');
$a = "0";
if($sessCaptcha !== $captha) $a = "1";
if ($captha == "CAPTCHA" ) $a = "0";
echo $a;
}
Меняем кодировку файла на на UTF-8 без BOM, сохраняем, закрываем
Для "любознательных людей" - заходим в админку компонета, на вкладке Конфигурация появилась новая панель Капча, на которой можно настроить капчу и посмотреть как она будет выглядеть
5. Осталось дело за малым - вывести капчу при добавлении объявления... Для этого делаем следующее:
- открываем файл \components\com_adsmanager\views\edit\tmpl\default.php
- находим строки (примерно 366-368)
if (function_exists("editPaidAd")){
editPaidAd($this->content,$this->isUpdateMode,$this->conf);
}
- после этих строк вставляем
if ($this->conf->submission_type != 1 && $this->conf->use_captcha) {
?>
<tr name="ad_captcha">
<td></td>
<td><?php echo '<img src="'.$this->baseurl.'index.php?option=com_adsmanager&task=getcaptcha" onClick="this.src=this.src+\'&\'+Math.random();" title="Нажмите для обновления" style="cursor:pointer">'; ?></td>
</tr>
<tr name="ad_captcha_check">
<td>Введите текст с картинки</td>
<td><input type="text" name="keystring"></td>
</tr>
<?php }
else echo "<input type='hidden' name='keystring' value='CAPTCHA' />";
- так! картинку мы вывели... осталось написать функцию проверки при сохранении...
в этом же файле ищем такие строки (примерно 114-124)
if(iserror==1) {
alert(errorMSG);
return false;
} else {
//Little hack to be able to return the selected_cats
<?php if ($this->nbcats > 1) { ?>
srcList.name = "selected_cats[]";
<?php } ?>
return true;
}
}
var url = "<?php echo $this->baseurl; ?>/index.php?option=com_adsmanager&task=getresultcaptchacheck&no_html=1&captcha_keystring="+mfrm.keystring.value;
var req = new XMLHttpRequest;
req.open("GET", url, true);
req.send(null);
req.onreadystatechange = function(){
if (req.readyState == 4) {
if (req.status == 200) {
if(req.responseText=="1") {
errorMSG += 'Проверочный код : Неверно введены символы с картинки! \n';
mfrm.keystring.style.background = "#c0fafc";
iserror=1;
}
if(iserror==1) {
alert(errorMSG);
} else {
//Little hack to be able to return the selected_cats
<?php if ($this->nbcats > 1) { ?>
srcList.name = "selected_cats[]";
<?php } ?>
document.adminForm.submit();
return true;
}
}
}
}
return false;
}
Меняем кодировку на UTF-8 без BOM, сохраняем, закрываем, проверяем
ЗЫ: Ну вот собственно и всё, что я хотел рассказать
[вложение удалено Администратором]