[Mod] Вопросы и соглашение перед просмотром ххх торрентов

Статус
В этой теме нельзя размещать новые ответы.

SuffeRiNG64

Писатель
Регистрация
21 Сен 2009
Сообщения
2
Реакции
7
Нужно задать пользователю пару вопросов, на которые ответ должны знать люди (как минимум) старше 18 лет. Если тест пройден - открывается доступ к закрытой категории на определенное время (в моем варианте на 48 часов). Ограничение можно снять или установить другое но тогда есть риск, что за родительский комп сел малолетний искатель красивого и тогда он как минимум картинки посмотрит (если скачать не додумается)

как это делается? Все просто

PHP:
# 
#-----[ Выполняем SQL запрос ]------------------------------------------------ 
# 

ALTER TABLE `users` ADD `user_not_kid` datetime NOT NULL default '0000-00-00 00:00:00';

PHP:
#
#-----[Изменняем файл download.php]-------------------------------------------
#

//Находим следующее

$res = sql_query("SELECT name FROM torrents WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__); 

//и заменяем на 

$res = sql_query("SELECT name, category FROM torrents WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__);


//Находим 

if (!$row) 
    stderr($tracker_lang['error'], $tracker_lang['invalid_id']); 

//И после этого добавляем

if ($row['category'] == XXX && (gmtime() - strtotime($CURUSER['user_not_kid'])) > 172800) { 
stderr($tracker_lang['error'], "Закачка из этой категории запрещена возростным цензом!<br>Для доступа к запрещенным разделам нужно быть старше 18 лет.<br>
                                В связи с тем что многие пользователи ставят в дату рождения не верную информацию, чтобы завысить свой возраст,<br>
                                принято рещение провести проверку на взрослость. Если у вас есть желание получить 48-и часовой доступ<br>
                                к запрещенным разделам пройдите пожалуйста <a href=18.php>ТЕСТИРОВАНИЕ</a>"); 
} 

//Здесь XXX = ID категории с запрещенным допуском 
//172800 = 48 часов в секундах

PHP:
#
#-----[Изменняем файл details.php]-------------------------------------------
#

//Находим в нем строку (которая при наличии установленных определенных модов может малость отличаться)

$res = sql_query("SELECT torrents.seeders, torrents.banned, torrents.leechers, torrents.info_hash, torrents.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(torrents.last_action) AS lastseed, torrents.numratings, torrents.name, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.owner, torrents.save_as, torrents.descr, torrents.visible, torrents.size, torrents.added, torrents.views, torrents.hits, torrents.times_completed, torrents.id, torrents.type, torrents.numfiles, torrents.image1, torrents.image2, categories.name AS cat_name, users.username FROM torrents LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN users ON torrents.owner = users.id WHERE torrents.id = $id")

//Находим в этой строке 

categories.name AS cat_name,

//И после этого значения дописываем в строку запроса

 categories.id AS cat_id,

//Находим дальше

if (!$row || ($row["banned"] == "yes" && !$moderator)) 
        stderr($tracker_lang['error'], $tracker_lang['no_torrent_with_such_id']); 
else { 

//и после этого вставляем следующее

 
    if ($row["cat_id"]=="ХХХ") { 
        if(gmtime() - strtotime($CURUSER['user_not_kid']) > 172800) { 
stderr($tracker_lang['error'], "Закачка из этой категории запрещена возростным цензом!<br>Для доступа к запрещенным разделам нужно быть старше 18 лет.<br>
                                В связи с тем что многие пользователи ставят в дату рождения не верную информацию, чтобы завысить свой возраст,<br>
                                принято рещение провести проверку на взрослость. Если у вас есть желание получить 48-и часовой доступ<br>
                                к запрещенным разделам пройдите пожалуйста <a href=18.php>ТЕСТИРОВАНИЕ</a>"); 
        } 
    } 

//Здесь XXX = ID категории с запрещенным допуском 
//172800 = 48 часов в секундах

#
#-----[На этом пока все]-------------------------------------------
#

Создаем в корне сайта файл 18.php c таким содержимым

PHP:
<?php

require "include/bittorrent.php";

dbconn();

loggedinorreturn();

session_start();

ob_start();

$page_title = 'Возрастной контроль';

stdhead($page_title);
begin_main_frame();


class questions {
	
    var $questions        = array();
    var $random_questions = array();
    var $user_answers     = array();
    var $Q_prefix         = 'UQA_';
    var $test_complete    = TRUE;
    var $show_questions   = 3;
    var $out              = '';
	
    function questions($questions) {
        // Создаем массив вопросов
        if ( is_array($questions) && sizeof($questions)>0 )
	{
            $this->questions = $questions;
        } else {
            die ('База с вопросами не найдена<BR> Свяжитесь с Администратором.');
        }
    }

    function input($in) {
        return trim(htmlspecialchars(strtolower($in)));
    }

    function get_random_questions() {
        if ( !isset($_POST) || sizeof($_POST)==0 )
        {
            // Выбираем случайный вопрос из базы
            $rand_keys = array_rand($this->questions, $this->show_questions);

            for ($i=0; $i<sizeof( $rand_keys ); $i++) {

                $rand_key = $rand_keys [ $i ];
                $this->random_questions [ $rand_key ] = $this->questions [ $rand_key ];
            }
        }
        else
        {
            //
            $p_keys = array_keys($_POST);
            reset($p_keys);
            do
            {
                $p_key = pos( $p_keys );

                if (substr($p_key, 0, 4) == $this->Q_prefix )
                {
                    $qid = intval( substr ( $p_key, 4 ) );
                    $this->random_questions [ $qid ] = $this->questions [ $qid ];
                }

            } while ( next($p_keys) );
        }
    }

    function get_user_answers() {
        reset( $this->random_questions );
        do {

            $qid = key( $this->random_questions );
            $q   = pos( $this->random_questions );

            $q_user_answer = $this->user_answers[ $qid ] = $this->input( isset($_POST [ $this->Q_prefix . $qid ]) ? $_POST [ $this->Q_prefix . $qid ] : '' );
            $result        = $this->validate( $qid );

            if (!$result) $this->test_complete = FALSE;

            $this->do_out($qid, $result, $q['q'], $q_user_answer);

        } while ( next($this->random_questions) );

    }

    function validate ( $qid ) {
    	global $lang;
        $valid_answer = $this->questions [ $qid ] [ 'a' ];
        $user_answer  = $this->user_answers[ $qid ];

        if (is_array($valid_answer)) {

            $tmp_valid_answer = FALSE;
            for ($i=0; $i<sizeof($valid_answer); $i++) {

                if ( strcasecmp(strtolower($valid_answer[$i]), $user_answer) == 0 ) $tmp_valid_answer = TRUE;
            }

            $this->questions [ $qid ] ['result'] = ( $tmp_valid_answer ) ? TRUE : FALSE;
        }
        else 
        {
            $this->questions [ $qid ] ['result'] = ( strcasecmp(strtolower($valid_answer), $user_answer) == 0 ) ? TRUE : FALSE;
        }

        return $this->questions [ $qid ] ['result'];
    }

    function do_out($qid, $result, $q_text, $q_user_answer) 
    {
	$id   = $this->Q_prefix . $qid;
        $mark = ($result) ? 'green' : 'red';
	
        $out = "";
	
	$out .= "<li>\n";
	$out .= "\t<div class=\"q_title\"><label for=\"$id\">$q_text</label></div>\n";
        $out .= "\t<div class=\"q_answer $mark\">\n";
        $out .= "\t\t<input type=\"text\" name=\"$id\" id=\"$id\" value=\"$q_user_answer\" />\n";
        $out .= "\t</div>\n";
        $out .= "</li>\n";
	
	$this->out .= $out;
    }
}

// Считываем вопросы из нужного файла
require($rootpath . 'include/18_q.php');

setlocale(LC_CTYPE, 'ru_RU.CP1251');

$quest = new questions( $questions );
$quest->get_random_questions( );
$quest->get_user_answers( );


// Проверяем согласие на прохождение теста
if (isset( $_POST['over18']) && $quest->input($_POST['over18'])=='on' ) {
    $mark   = 'green';
    $cheked = 'checked';
} else {
    $mark   = '';
    $cheked = '';
    $quest->test_complete = FALSE;
}

$over18 = '<input type="checkbox" name="over18" '.$cheked.' />';
//

$msg = '';
if ($quest->test_complete) {

    $gdt = getdate();
    $cuid = $CURUSER['id'];
    sql_query('UPDATE users SET user_not_kid = '.sqlesc(get_date_time()).' WHERE id='.$cuid);

    $msg  = 'Тест успешно пройден!<br /><br />';
    $msg .= 'Через 10 секунд вы будете перенаправлены на главную страницу сайта<br />';

    if (!isset($redirect) || $redirect == '' || strlen($redirect) == 0) {
        $msg .= 'Нажмите <a href="index.php">сюда</a> для перехода на главную страницу. (если ждать не охота)<br />';
        $msg .= 'Теперь вам в течение 48 часов доступны ограниченые разделы форума.';
    }
print('
<META HTTP-EQUIV="REFRESH" CONTENT="10;URL=index.php">

<table class="forumline forum">
<col class="row1">
<tr>
	<th>Возрастной контроль ПРОЙДЕН</th>
</tr>
<tr>
	<td>
		<div id="q18">
			<div class="message">'.$msg.'</div>
                </div>
	</td>
</tr>
</table>
');

} else {
    //$msg  = 'У вас есть ровно 1 минута на то чтобы дать правильные ответы на следующие вопросы:';
    $msg .= 'Запрошеный вами раздел может содержать материалы, которые не предназначены для просмотра лицам не достигшим совершенолетия<br />';
    $msg .= '';

print('
<META HTTP-EQUIV="REFRESH" CONTENT="60;URL=18.php">

<table class="forumline forum">
<col class="row1">
<form name="age_control" method="POST" action="?">
<tr>
	<th>Возрастной контроль</th>
</tr>
<tr>
	<td>
		<div id="q18">
			<div class="message">'.$msg.'</div>

			<div class="over18">
				'.$over18.'&nbsp;&nbsp;Данной формой я (<span>'.$CURUSER['username'].'</span>) 
				подтверждаю, что являюсь совершеннолетним (18 лет или более), 
    				и действительно хочу просмотреть материалы данного раздела.
			</div>
    
			<div class="i_am_cool">
				В подтверждение своего возраста я готов пройти данный тест.
			</div>
			
			<div class="test">
				<div class="rules">
		            		Дайте правильные ответы на перечисленые вопросы.<br />
					Для ответа у вас есть всего 60 секунд.
				</div>
			
				<ol>' . $quest->out . '</ol>
			</div>
	</td>
</tr>
<tr>
	<td class="catBottom"><input type="submit" value="Ответить" /></td>
</tr>
</form>
</table>
');

}
$user_time = 0;
// End;

end_main_frame();
stdfoot();
die;

?>

и создаем файл с базой вопросов include/18_q.php
(приведу часть своего файла с вопросами чтобы дать понятие о его структуре)
PHP:
<?PHP

$questions[] = array( 'q' => 'Имя президента Украины ?',
                     'a' => array('виктор', 'вiктор', 'витя', 'вiтя') );

$questions[] = array( 'q' => '2+2*2 будет равно:',
                     'a' => '6' );

$questions[] = array( 'q' => 'Страна-Победитель ЧМ по футболу 2006 г.:',
                     'a' => array('италия', 'iталiя') );
                     
$questions[] = array( 'q' => 'Фамилия <i>последнего</i> президента СССР:',
                     'a' => array('горбачев', 'горбачёв', 'горбачов') );

$questions[] = array( 'q' => 'Украинская точка обмена трафиком:',
                     'a' => array('ua-ix', 'uaix', 'юаикс') );

$questions[] = array( 'q' => 'Самая высокая точка Украины (название горы):',
                     'a' => 'говерла' );   

$questions[] = array( 'q' => '"Мастер и Маргарита" написал (Фамилия писателя):',
                     'a' => 'булгаков' ); 
                     
$questions[] = array( 'q' => 'Фамилия известного политика на картинке:<BR><img src="http://вашсайт/data/yanukovich.jpg">',
                     'a' => array('янукович') ); 

$questions[] = array( 'q' => 'Фамилия известного украинского писателя изображенного на картинке<BR> (автор: "Кобзарь", "Гайдамаки" ...):<BR><img src="http://вашсайт/data/shevchenko.jpg">',
                     'a' => array('шевченко', 'тарас шевченко') ); 
                                          
$questions[] = array( 'q' => 'Имя первого космонавта ?',
                     'a' => array('юрий', 'юра', 'юрiй') );

$questions[] = array( 'q' => 'Отчество Брежнева ?',
                     'a' => array('ильич', 'iлiч') );

$questions[] = array( 'q' => 'Количиство республик в СССР:',
                     'a' => array('15', '16') );  
                     
$questions[] = array( 'q' => 'Главную роль в фильме "3 мушкетера" сыграл :',
                     'a' => 'боярский' );  
                     
$questions[] = array( 'q' => 'Раньше по всем телеканалам в 21-00 вещалась програма:',
                     'a' => array('время', 'час') ); 
                      
$questions[] = array( 'q' => ' Санкт-Петербург назывался раньше:',
                     'a' => array('ленинград', 'ленiнград') );  

$questions[] = array( 'q' => 'Первая строка гимна СССР:',
                     'a' => array('союз нерушимый республик свободных', 'союз нерушимый') );  

$questions[] = array( 'q' => 'Реальная фамилия В.И.Ленина:',
                     'a' => 'ульянов' );  

$questions[] = array( 'q' => 'Чью мать обещал показать американцам Хрущев? Чертову, Кузькину, Микояна, свою :',
                     'a' => 'Кузькину' );  

$questions[] = array( 'q' => 'Последовательное изложение самим говорящим или пишущим основных этапов его жизни.',
                     'a' => 'автобиография' );  
                                         
$questions[] = array( 'q' => 'Отсутствие конца, предела (в пространстве и времени).',
                     'a' => 'бесконечность' );  
                                         
$questions[] = array( 'q' => 'Пространство, не имеющее видимых пределов, границ.',
                     'a' => 'бесконечность' );  
                                         
$questions[] = array( 'q' => 'Устройство для приготовления бетонной смеси путем перемешивания ее составных частей во вращающемся барабане.',
                     'a' => 'бетономешалка' );  
                                         
$questions[] = array( 'q' => 'Боевая готовность.',
                     'a' => 'боеготовность' );  
                                         
$questions[] = array( 'q' => 'Водитель трамвая.',
                     'a' => 'вагоновожатый' );  

$questions[] = array( 'q' => 'Водоем (обычно искусственный), созданный для целей путем перегораживания плотиной реки, ручья и т.п.',
                     'a' => 'водохранилище' );  
                                         
$questions[] = array( 'q' => 'Военнослужащий, взятый в плен.',
                     'a' => 'военнопленный' );  
                                         
$questions[] = array( 'q' => 'Извлечение из организма некоторого количества крови с лечебной целью.',
                     'a' => 'кровопускание' );  
                                         
$questions[] = array( 'q' => 'Член Республиканской партии (в США).',
                     'a' => 'республиканец' );  
                                         
$questions[] = array( 'q' => 'Сельскохозяйственная машина.',
                     'a' => 'сельхозмашина' );  
                                         
$questions[] = array( 'q' => 'Помещение, где производится сортировка.',
                     'a' => 'сортировочная' );  
                                         
$questions[] = array( 'q' => 'Газ, пар или жидкость, передающие тепло в системах бытового и промышленного теплоснабжения.',
                     'a' => 'теплоноситель' );  
                                         
?>

и так далее
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху