• Автор:

    Braund
  • Добавлено:

    янв 22, 2014
  • Комментариев:

    2
  • Просмотров:

    2083

Хак Генератор вопросов и ответов

Хак Генератор вопросов и ответов

Как вы знаете в десятой версии DLE появился модуль Вопросы и ответы для защиты от спама. В котором вы создаете вопросы вручную, данный хак позволит генерировать вопросы и ответы автоматически нажав лишь на кнопку.

Хак генерирует вопросы по принципу арифметических примеров:
Решите пример: 6 + 15 (ответ прописью)
Решите пример: 6 + 15 (ответ числом)
Решите пример: 13 - 3 (ответ прописью)
Решите пример: 13 - 3 (ответ числом)

Ответы автоматически генерируются в соответствии с вопросом , так если вопрос был

Решите пример: 13 - 3 (ответ прописью) сгенированый ответ десять

Установка:

Файл engine/inc/question.php после строки:
if( $member_id['user_group'] != 1 ) {
msg( "error", $lang['addnews_denied'], $lang['db_denied'] );
}


Добавить ниже:
/* генератор вопросов и ответов */
if ($_GET['action'] == "generate") {
if( $_REQUEST['user_hash'] == "" or $_REQUEST['user_hash'] != $dle_login_hash ) {die( "Hacking attempt! User not found" );}
for ($i = 0; $i < 40; $i++) {
$p = mt_rand(1, 15);
$m = mt_rand(1, 15);
if($p < $m) $example[] = array($p.' + '.$m ,$p+$m);
if($p > $m) $example[] = array($p.' - '.$m ,$p-$m);
}
foreach($example as $key => $val){
$question[] = array('question' => 'Решите пример: '.$example[$key][0].' (ответ числом)','answer' => $example[$key][1]);
$question[] = array('question' => 'Решите пример: '.$example[$key][0].' (ответ прописью)','answer' => plural::asString($example[$key][1],plural::MALE));
}
foreach($question as $val){
$db->query( "INSERT INTO " . PREFIX . "_question (question, answer) VALUES ('{$val['question']}', '{$val['answer']}')" );
$db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '84', '".htmlspecialchars($question, ENT_QUOTES, $config['charset'])."')" );
}
header( "Location: ?mod=question" ); die();
}


После строки:
<input type="button" class="btn btn-primary" value="{$lang['btn_question']}" name="btn-new" id="btn-new" style="width:180px;">


Вставить:
<script type="text/javascript">
$(function(){
$('#btn-generate').click(function(){
document.location='?mod=question&user_hash={$dle_login_hash}&action=generate';
return false;
});});
</script>
<input type="button" class="btn btn-primary" value="Сгенерировать вопросы" name="btn-generate" id="btn-generate" style="width:180px;">


Над закрывающим знаком:
?>


Вставить класс для перевода чисел в русские слова:
class Plural { 
const MALE = 1;
const FEMALE = 2;
const NEUTRAL = 3;
protected static $_digits = array(
self::MALE => array('ноль', 'один', 'два', 'три', 'четыре','пять', 'шесть', 'семь', 'восемь', 'девять'),
self::FEMALE => array('ноль', 'одна', 'две', 'три', 'четыре','пять', 'шесть', 'семь', 'восемь', 'девять'),
self::NEUTRAL => array('ноль', 'одно', 'два', 'три', 'четыре','пять', 'шесть', 'семь', 'восемь', 'девять')
);
protected static $_ths = array( 0 => array('','',''), 1=> array('тысяча', 'тысячи', 'тысяч'), 2 => array('миллион', 'миллиона', 'миллионов'),
3 => array('миллиард','миллиарда','миллиардов'), 4 => array('триллион','триллиона','триллионов'), 5 => array('квадриллион','квадриллиона','квадриллионов'));
protected static $_ths_g = array(self::NEUTRAL, self::FEMALE, self::MALE, self::MALE, self::MALE, self::MALE); // hack 4 thsds
protected static $_teens = array( 0=>'десять', 1=>'одиннадцать', 2=>'двенадцать', 3=>'тринадцать', 4=>'четырнадцать', 5=>'пятнадцать', 6=>'шестнадцать', 7=>'семнадцать', 8=>'восемнадцать', 9=>'девятнадцать' );
protected static $_tens = array( 2=>'двадцать', 3=>'тридцать', 4=>'сорок', 5=>'пятьдесят', 6=>'шестьдесят', 7=>'семьдесят', 8=>'восемьдесят', 9=>'девяносто');
protected static $_hundreds = array( 1=>'сто', 2=>'двести',3=>'триста',4=>'четыреста', 5=>'пятьсот',6=>'шестьсот', 7=>'семьсот', 8=>'восемьсот', 9=>'девятьсот'
);

protected function _ending($value, array $endings = array()) {
$result = '';
if ($value < 2) $result = $endings[0];
elseif ($value < 5) $result = $endings[1];
else $result = $endings[2];
return $result; }

protected function _triade($value, $mode = self::MALE, array $endings = array()) {
$result = '';
if ($value == 0) { return $result; }
$triade = str_split(str_pad($value,3,'0',STR_PAD_LEFT));
if ($triade[0]!=0) { $result.= (self::$_hundreds[$triade[0]].' '); }
if ($triade[1]==1) { $result.= (self::$_teens[$triade[2]].' '); }
elseif(($triade[1]!=0)) { $result.= (self::$_tens[$triade[1]].' '); }
if (($triade[2]!=0)&&($triade[1]!=1)) { $result.= (self::$_digits[$mode][$triade[2]].' '); }
if ($value!=0) { $ends = ($triade[1]==1?'1':'').$triade[2]; $result.= self::_ending($ends,$endings).' '; }
return $result;
}

public function asString($value, $mode = self::MALE, array $endings = array()) {
if (empty($endings)) { $endings = array('','',''); }
$result = '';
$steps = ceil(strlen($value)/3);
$sv = str_pad($value, $steps*3, '0', STR_PAD_LEFT);
for ($i=0; $i<$steps; $i++) {
$triade = substr($sv, $i*3, 3);
$iter = $steps - $i;
$ends = ($iter!=1)?(self::$_ths[$iter-1]):($endings);
$gender = ($iter!=1)?(self::$_ths_g[$iter-1]):($mode);
$result.= self::_triade($triade,$gender, $ends);
}
return $result;
}}


Автор: rocksmart
Вернуться

Комментарии:


  1. ribachokil.ribachokil → 2 марта 2014 21:49
    Отличный хак, автору респект!
  2. mako → 14 сентября 2014 21:31
    Отличный модуль большое спасибо автору на 10.3 норм встал!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.