<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум АлаичЪ'а о SEO - PunBB - pun_stop_bots - убираем проверку при отправке сообщения]]></title>
	<link rel="self" href="https://talk.alaev.info/feed/atom/topic/6/" />
	<updated>2013-01-25T14:29:46Z</updated>
	<generator>PunBB</generator>
	<id>https://talk.alaev.info/topic/6/</id>
		<entry>
			<title type="html"><![CDATA[Re: PunBB - pun_stop_bots - убираем проверку при отправке сообщения]]></title>
			<link rel="alternate" href="https://talk.alaev.info/post/3086/#p3086" />
			<content type="html"><![CDATA[<p><strong>admin</strong>, подскажите пожалуйста, а где задается сам вопрос, на который придется отвечать при регистрации? В смысле, в каком файле его можно добавить?</p><p>Уже нашел) в БД оказывается.</p>]]></content>
			<author>
				<name><![CDATA[OKyJIucT]]></name>
				<uri>https://talk.alaev.info/user/85/</uri>
			</author>
			<updated>2013-01-25T14:29:46Z</updated>
			<id>https://talk.alaev.info/post/3086/#p3086</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[PunBB - pun_stop_bots - убираем проверку при отправке сообщения]]></title>
			<link rel="alternate" href="https://talk.alaev.info/post/31/#p31" />
			<content type="html"><![CDATA[<p>Так как данный форум построен на движке PunBB, то придется пилить и этот новый для меня движок.<br />А пилить пришлось прямо с первых минут использования <img src="https://talk.alaev.info/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>В данном посте расскажу о том, как рашить один неприятный момент, которые обнаружился буквально сегодня.<br />Дабы преградить различным ботам регистрацию на нашем форуме, я сразу установил расширение Stop spam from bots (pun_stop_bots). Суть расширения проста - при регистрации пользователя задается какой-то вопрос, на который надо ответить, короче, тупо система &quot;вопрос-ответ&quot;.</p><p>Все бы ничего, если не одно НО - оказалось, что и после регистрации, при попытке ответить на форуме, пользователям приходится вводить ответ на вопрос. Что может быть тупее и как разработчики такое допустили - я не знаю, но факт есть факт!</p><p>Чтобы решить данную несправедливость проделаем несколько простейших шагов.</p><br /><p><strong>Если расширение уже установлено:</strong></p><ul><li><p>Удаляем расширение через админку (жмем кнопку &quot;Удалить&quot;, а не &quot;Отключить&quot;). Внимание - все настройки и вопросы будут утеряны</p></li><li><p>Открываем файл /extensions/pun_stop_bots/manifest.xml</p></li><li><p>Находим следующий код (строка 173) и удаляем:</p></li></ul><div class="codebox"><pre><code>        &lt;hook id=&quot;po_form_submitted&quot;&gt;&lt;![CDATA[
            if (!$forum_page[&#039;is_admmod&#039;] &amp;&amp; !isset($_POST[&#039;preview&#039;]))
            {
                include $ext_info[&#039;path&#039;].&#039;/functions.php&#039;;
                if (file_exists(FORUM_CACHE_DIR.&#039;cache_pun_stop_bots.php&#039;))
                    include FORUM_CACHE_DIR.&#039;cache_pun_stop_bots.php&#039;;
                if (!defined(&#039;PUN_STOP_BOTS_CACHE_LOADED&#039;) || $pun_stop_bots_questions[&#039;cached&#039;] &lt; (time() - 43200))
                {
                    pun_stop_bots_generate_cache();
                    require FORUM_CACHE_DIR.&#039;cache_pun_stop_bots.php&#039;;
                }
                if (file_exists($ext_info[&#039;path&#039;].&#039;/lang/&#039;.$forum_user[&#039;language&#039;].&#039;/&#039;.$ext_info[&#039;id&#039;].&#039;.php&#039;))
                    include $ext_info[&#039;path&#039;].&#039;/lang/&#039;.$forum_user[&#039;language&#039;].&#039;/&#039;.$ext_info[&#039;id&#039;].&#039;.php&#039;;
                else
                    include $ext_info[&#039;path&#039;].&#039;/lang/English/&#039;.$ext_info[&#039;id&#039;].&#039;.php&#039;;

                $pun_stop_bots_true_answer = FALSE;

                //Check up the cookie.
                if (isset($_COOKIE[PUN_STOP_BOTS_COOKIE_NAME]))
                    $pun_stop_bots_true_answer = pun_stop_bots_check_cookie();
                //Check up the entered question.
                else if (isset($_POST[&#039;pun_stop_bots_submit&#039;]))
                {
                    $query = array(
                        &#039;SELECT&#039;    =&gt; &#039;pun_stop_bots_question_id&#039;,
                        &#039;FROM&#039;        =&gt; $forum_user[&#039;is_guest&#039;] ? &#039;online&#039; : &#039;users&#039;,
                        &#039;WHERE&#039;        =&gt; $forum_user[&#039;is_guest&#039;] ? &#039;ident = \&#039;&#039;.$forum_user[&#039;ident&#039;].&#039;\&#039;&#039; : &#039;id = &#039;.$forum_user[&#039;id&#039;]
                    );
                    $result = $forum_db-&gt;query_build($query) or error(__FILE__, __LINE__);
                    $row = $forum_db-&gt;fetch_assoc($result);

                    if ($row)
                        $question_id = $row[&#039;pun_stop_bots_question_id&#039;];
                    else
                        message($lang_common[&#039;Bad request&#039;]);

                    $answer = isset($_POST[&#039;pun_stop_bots_answer&#039;]) ? forum_trim(strtolower($_POST[&#039;pun_stop_bots_answer&#039;])) : null;
                    if (!empty($answer))
                        $pun_stop_bots_true_answer = pun_stop_bots_compare_answers($answer, $question_id);
                    else
                        $pun_stop_bots_true_answer = FALSE;
                    //Generate new question in case of incorrect answer.
                    if (!$pun_stop_bots_true_answer)
                        $new_question_id = $forum_user[&#039;is_guest&#039;] ? pun_stop_bots_generate_guest_question_id() : pun_stop_bots_generate_user_question_id();
                }

                // If it is a user and answer is correct set new cookie.
                if (!$forum_user[&#039;is_guest&#039;] &amp;&amp; !isset($_COOKIE[PUN_STOP_BOTS_COOKIE_NAME]) &amp;&amp; $pun_stop_bots_true_answer)
                {
                    $new_question_id = $forum_user[&#039;is_guest&#039;] ? pun_stop_bots_generate_guest_question_id() : pun_stop_bots_generate_user_question_id();
                    pun_stop_bots_set_cookie($new_question_id);
                }
                else if ($forum_user[&#039;is_guest&#039;] &amp;&amp; $pun_stop_bots_true_answer)
                {
                    $query = array(
                        &#039;UPDATE&#039;    =&gt;    &#039;online&#039;,
                        &#039;SET&#039;        =&gt;    &#039;pun_stop_bots_question_id = NULL&#039;,
                        &#039;WHERE&#039;        =&gt;    &#039;ident = \&#039;&#039;.$forum_user[&#039;ident&#039;].&#039;\&#039;&#039;
                    );
                    $forum_db-&gt;query_build($query) or error(__FILE__, __LINE__);
                }
                else if (!$pun_stop_bots_true_answer)
                {
                    //If it is first request of the page, we need to generate new question.
                    if (!isset($new_question_id))
                        $new_question_id =  $forum_user[&#039;is_guest&#039;] ? pun_stop_bots_generate_guest_question_id() : pun_stop_bots_generate_user_question_id();

                    $forum_page[&#039;crumbs&#039;] = array(
                        array($forum_config[&#039;o_board_title&#039;], forum_link($forum_url[&#039;index&#039;])),
                        $lang_pun_stop_bots[&#039;Stop bots question legend&#039;]
                    );

                    $forum_page[&#039;form_handler&#039;] = $_SERVER[&#039;REQUEST_URI&#039;];
                    $forum_page[&#039;question&#039;] = $pun_stop_bots_questions[&#039;questions&#039;][$new_question_id][&#039;question&#039;];
                    $forum_page[&#039;hidden_fields&#039;] = $_POST;

                    define(&#039;FORUM_PAGE&#039;, &#039;pun_stop_bots_page&#039;);
                    require FORUM_ROOT.&#039;header.php&#039;;

                    // START SUBST - &lt;!-- forum_main --&gt;
                    ob_start();

                    include $ext_info[&#039;path&#039;].&#039;/views/question_page.php&#039;;

                    $tpl_temp = forum_trim(ob_get_contents());
                    $tpl_main = str_replace(&#039;&lt;!-- forum_main --&gt;&#039;, $tpl_temp, $tpl_main);
                    ob_end_clean();
                    // END SUBST - &lt;!-- forum_main --&gt;

                    require FORUM_ROOT.&#039;footer.php&#039;;
                }
            }
        ]]&gt;&lt;/hook&gt;</code></pre></div><ul><li><p>Сохраняем и загружаем отредактированный файл обратно на сервер</p></li><li><p>Заново устанавливаем расширение</p></li><li><p>Добавляем вопросы и ответы в настройках расширения</p></li></ul><br /><p><strong>Если расширение еще не установлено:</strong></p><ul><li><p>Распаковываем архив с расширением на компьютер</p></li><li><p>Открываем файл manifest.xml</p></li><li><p>Находим код, указанный в мануале выше, и удаляем</p></li><li><p>Сохраняем отредактированный файл</p></li><li><p>Загружаем папку с расширением в соответствии с инструкциями</p></li><li><p>Устанавливаем расширение</p></li><li><p>Добавляем вопросы и ответы в настройках расширения</p></li></ul><br /><p>Все готово - улыбаемся и машем!</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://talk.alaev.info/user/2/</uri>
			</author>
			<updated>2012-08-27T09:02:31Z</updated>
			<id>https://talk.alaev.info/post/31/#p31</id>
		</entry>
</feed>
