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

Тема в разделе "Торрент Трекеры", создана пользователем SuffeRiNG64, 25 сен 2009.

Статус темы:
Закрыта.
  1. SuffeRiNG64

    SuffeRiNG64 Писатель

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

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

    PHP:

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


    ALTER TABLE `usersADD `user_not_kiddatetime 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)>)
        {
                
    $this->questions $questions;
            } else {
                die (
    'База с вопросами не найдена<BR> Свяжитесь с Администратором.');
            }
        }

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

        function 
    get_random_questions() {
            if ( !isset(
    $_POST) || sizeof($_POST)==)
            {
                
    // Выбираем случайный вопрос из базы
                
    $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_key04) == $this->Q_prefix )
                    {
                        
    $qid intvalsubstr $p_key) );
                        
    $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) == $tmp_valid_answer TRUE;
                }

                
    $this->questions $qid ] ['result'] = ( $tmp_valid_answer ) ? TRUE FALSE;
            }
            else 
            {
                
    $this->questions $qid ] ['result'] = ( strcasecmp(strtolower($valid_answer), $user_answer) == ) ? 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' => 'теплоноситель' );  
                                             
    ?>
    и так далее
     
Статус темы:
Закрыта.