Опция в адм. разделе:
Предпросмотр капчи в адм. разделе:
Отображение капчи при регистрации пользователя, "простой" вариант:
"Сложный":
Смысл цифр и линий снизу следующий: нужно брать числа снизу начиная с наименьшего, смотреть по линии к какой из букв/цифр ведёт линия - указанное число или цифру всталять в форму подтверждения, это необходимо проделать для всех цифр снизу, цифры снизу, код подтверждения сверху и линии между ними меняются и располагаются случайным образом.
В phpmyadmin выполнить:
Код: Выделить всё
INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_ppkaptcha_type', '0', '0');
Код: Выделить всё
$explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
Код: Выделить всё
$config['ppkbb_ppkaptcha_type']==1 ? $user->lang['CONFIRM_CODE_EXPLAIN']=$user->lang['PPKAPTCHA_CONFIRM_CODE_EXPLAIN'] : '';//PPK CAPTCHA
Код: Выделить всё
function execute($code, $seed)
{
Код: Выделить всё
global $phpbb_root_path, $config;//PPK CAPTCHA
Код: Выделить всё
unset($hold_chars);
Код: Выделить всё
//PPK CAPTCHA
function_exists('imagecreatefrompng') ? '' : $config['ppkbb_ppkaptcha_type']=0;
if($config['ppkbb_ppkaptcha_type'])
{
$_png = $this->define_pk_pngs();
if($config['ppkbb_ppkaptcha_type']==1)
{
$im = imagecreate(100*$code_len, 200);
$this->width=100*$code_len;
$this->height=200;
}
else
{
$im = imagecreate(100*$code_len, 120);
}
$gray50=imagecolorallocate($im, 50, 50, 50);
$gray125=imagecolorallocate($im, 125, 125, 125);
$white=imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
$codes=preg_split('//', $code, -1, PREG_SPLIT_NO_EMPTY);
$s_codes=$codes;
if($config['ppkbb_ppkaptcha_type']==1)
{
shuffle($s_codes);
}
$a_codes=count($codes);
for($i=0;$i<$a_codes;$i++)
{
$im2[$i]=imagecreatefrompng($phpbb_root_path.'images/symbols/'.$_png[$s_codes[$i]]);
$i_width[$i]=imagesx($im2[$i]);
$i_height[$i]=imagesy($im2[$i]);
//default
imagecopy($im, $im2[$i], mt_rand(100*$i, 100*$i+(100 - $i_width[$i])), mt_rand(0, 125 - $i_height[$i]), 0, 0, $i_width[$i], $i_height[$i]);
imagedestroy($im2[$i]);
}
for($i=0;$i<200;$i+=2)
{
imageline($im, 0, $i, (100*$code_len), $i, $gray50);
}
for($i=0;$i<(100*$code_len);$i+=2)
{
imageline($im, $i, 0, $i, 200, $gray50);
}
if($config['ppkbb_ppkaptcha_type']==1)
{
$r_array=range(0, $code_len-1);
shuffle($r_array);
$q=$q_base=200;
$lx=5;
$q_step=26;
$bd_pos=(100*$code_len)/2;
$bd_shift=intval($code_len*$q_step/2)+(4*$code_len);
$q=$q_base=$bd_pos-$bd_shift;
for($i=0;$i<$a_codes;$i++)
{
$real_key=array_search($s_codes[$i], $codes);
$shuffle_key[$real_key]=array_search($real_key, $r_array);
imageline($im, $lx, 130, $lx+90, 130, $white);
imageline($im, $lx, 130-10, $lx, 130, $white);
imageline($im, $lx+90, 130-10, $lx+90, 130, $white);
$q+=$q_step;
imagefilledrectangle($im, $q, 170, $q+20, 190, $gray125);
imagestring($im, 5, $q+7, 173, $r_array[$i]+1, $white);
imageline($im, (100*$i+50), 130, $q_base+($q_step*($shuffle_key[$real_key]+1)+10), 170, $white);
$lx+=100;
unset($codes[$real_key]);
}
imagefilledrectangle($im, 3, 183, 51, 195, $gray125);
imagestring($im, 1, 5, 186, 'PPKAPTCHA', $white);
}
header ("Content-type: image/png");
header('Cache-control: no-cache, no-store');
imagepng ($im);
imagedestroy ($im);
}
else
{
//PPK CAPTCHA
Код: Выделить всё
echo $image;
Код: Выделить всё
//PPK CAPTCHA
}
//PPK CAPTCHA
Код: Выделить всё
/**
* png image data
* Each 'data' element is base64_encoded uncompressed IDAT
*/
Код: Выделить всё
//PPK CAPTCHA
function define_pk_pngs()
{
$_png = array(
'0' => '0.png',
'1' => '1.png',
'2' => '2.png',
'3' => '3.png',
'4' => '4.png',
'5' => '5.png',
'6' => '6.png',
'7' => '7.png',
'8' => '8.png',
'9' => '9.png',
'A' => 'A.png',
'B' => 'B.png',
'C' => 'C.png',
'D' => 'D.png',
'E' => 'E.png',
'F' => 'F.png',
'G' => 'G.png',
'H' => 'H.png',
'I' => 'I.png',
'J' => 'J.png',
'K' => 'K.png',
'L' => 'L.png',
'M' => 'M.png',
'N' => 'N.png',
'O' => 'O.png',
'P' => 'P.png',
'Q' => 'Q.png',
'R' => 'R.png',
'S' => 'S.png',
'T' => 'T.png',
'U' => 'U.png',
'V' => 'V.png',
'W' => 'W.png',
'X' => 'X.png',
'Y' => 'Y.png',
'Z' => 'Z.png',
);
return $_png;
}
//PPK CAPTCHA
Код: Выделить всё
'legend2' => 'ACP_LOAD_SETTINGS',
Код: Выделить всё
//PPK CAPTCHA
'ppkbb_ppkaptcha_type' => array('lang' => 'PPKBB_PPKAPTCHA_TYPE', 'validate' => 'string', 'type' => 'text:1:1', 'explain' => true),
//PPK CAPTCHA
Код: Выделить всё
));
?>
Код: Выделить всё
//PPK CAPTCHA
'PPKAPTCHA_CONFIRM_CODE_EXPLAIN' => 'Введите код в точности так, как вы его видите, в порядке определённом линиями и цифрами снизу. Регистр символов не имеет значения.',
//PPK CAPTCHA
Код: Выделить всё
));
?>
Код: Выделить всё
//PPK CAPTCHA
'PPKBB_PPKAPTCHA_TYPE' => 'Использовать PPKAPTCHA',
'PPKBB_PPKAPTCHA_TYPE_EXPLAIN' => 'Если в опциях <em>Средства против спам-ботов</em> в качестве средства выбрана <em>Простая картинка</em> - использовать вариант PPKAPTCHA, 0 - не использовать, 1 - использовать сложный вариант, 2 - использовать простой вариант',
//PPK CAPTCHA
Код: Выделить всё
<dd><img src="{CONFIRM_IMAGE}" alt="{L_PREVIEW}" width="360" height="96" id="captcha_preview" /></dd>
Код: Выделить всё
<dd><img src="{CONFIRM_IMAGE}" alt="{L_PREVIEW}" id="captcha_preview" /></dd><!-- PPK CAPTCHA width="360" height="96" -->
Очистить кеш.
Идём в адм. раздел - вкладка Общие - Средства против спам-ботов - в поле Установленные модули: выбрать Простая картинка
Идём в адм. раздел - вкладка Общие - Функции конференции - Использовать PPKAPTCHA: устанавливаем опцию.
Символы букв и цифр в капче можно заменить на свои, директория /images/symbols/.