Генератор вопросов и ответов [DLE 10.x]
Robot 2014.03.05 DLE модули 2108Название: Генератор вопросов и ответов
Автор: rocksmart
CMS: DLE 10.x
Описание:
Как вы знаете в десятой версии DLE появился модуль Вопросы и ответы для защиты от спама. В котором вы создаете вопросы вручную, данный хак позволит генерировать вопросы и ответы автоматически нажав лишь на кнопку.
Хак генерирует вопросы по принципу арифметических примеров:
Решите пример: 6 + 15 (ответ прописью)
Решите пример: 6 + 15 (ответ числом)
Решите пример: 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;
}}
Установка закончена.
Другие новости по теме:
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.