NPJ next: ТестТьюринга ...

Главная | Каталог | Изменения | НовыеКомментарии | Пользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Установка капчи в NPJ


Начиная с версии npj.r1.9.a200907282329 капча интегрирована в дистрибутив NPJ для анонимных комментариев и регистрации пользователей.

Взят отсюда. Должен лежать в lib/captcha. Нужно смотреть, что происходит с сессией, если ее нет в нужный момент – либо твикать session.auto_start, или стартовать вручную в нужном месте (хотя в случае НПЖ где это нужное место не очень понятно...)

lib/captcha/.htaccess




core/classes/FieldCaptcha.php


<?php

define
'LIB_DIR''/lib/captcha');


Class 
FieldCaptcha extends Field {

        var 
$config = array(); // настройки шаблона
        
        
function FieldCaptcha( &$rh$config ) {

            
$this->config =& $config;
            
Field::Field(&$rh$config);
            
            
// передаем значения переменных в шаблон
            // $this->rh->tpl->Assign("_DebugMessage", $_SESSION['captcha_keystring']); - предыдущее значение (идет в валидатор)
            
$this->rh->tpl->Assign("_CaptchaGD"LIB_DIR."/");
            
$this->rh->tpl->Assign("_RegistrationPage""http://".$_SERVER['HTTP_HOST']."/registration");
        }

        
// override родительского Field::Validate()
        
function Validate() {
            
            
$config = &$this->config;
            
$data = &$this->data;
            
Field::Validate();
            
            if (isset(
$this->config["nessesary"]) && ($data === "") && ($this->config["nessesary"]==1)) {
                  
$this->invalidReasons["FormError_Nessesary"] = "Поле должно быть обязательно заполнено!";
            } 
            elseif ( isset(
$this->config["nessesary"]) && (strtolower($data) !== $_SESSION['captcha_keystring']) ) {
                 
$this->invalidReasons["FormError_Nessesary"] = "Вы ввели неверное значение. Попробуйте снова.";
            }
                           unset(
$_SESSION['captcha_keystring']);            
            
$this->invalid sizeof($this->invalidReasons) != 0;
            return !
$this->invalid
        }


}  
// EOC


?>

npj/classes/NpjRequestHandler.php


Заменить

unset($_SESSION);


на

unset($_GET['PHPNPJID']);


npj/themes/absent/templates/forms/captcha.html


{{TEMPLATE:VisualCaptcha}}
<a href="{{_RegistrationPage}}" style="font-size:6pt; text-decoration:none">{ Зарегистрироваться }</a>
<div>
  <img src="{{_CaptchaGD}}" width="200" height="60" alt="Visual Captcha"/><br>
  <input type="text" id="id_{{_Field}}" name="{{_Field}}" rows="1" style="width:200px">
</div>
{{_DebugMessage}}
{{/TEMPLATE:VisualCaptcha}}


npj/handlers/comments/!form_add.php


Добавить перед вызовом $form = &new Form(...)
<?
    
if ($principal->data["user_id"] == 1) {  // капчу показывать только гостям  
   
        
$rh->UseClass("FieldCaptcha"$rh->core_dir); 
           
           
$group1[] = &new FieldCaptcha( &$rh, array(                
                                  
"field" => "captcha"
                                  
"nessesary" => 1,      
                                  
"tpl_row" => "form.html:Row_Span",
                                  
"tpl_data" => "captcha.html:VisualCaptcha" ) );               
       } 
?>

npj/messagesets/std_form_Comment.php


Добавить в массив $this->message_set строку

"Form.captcha"          => "Вы человек? Подтвердите вводом текста скартинки",


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]
Поделиться ссылкой