[UserTest] - новая версия. Добавлено событие OnTestCalculate.
Если не устраивает стандартная логика расчета (по сумме баллов), то теперь в UserTest можно реализовать свою логику расчета. Для этого добавлено событие OnTestCalculate. На него можно создать свой плагин.
Под катом пример плагина UserTestCalculate.
Под катом пример плагина UserTestCalculate.
<?php
/** @var modX $modx */
switch ($modx->event->name) {
case 'OnTestCalculate':
/*
$test - массив с данными теста
$result - объект результата теста
$cat_results - массив с результатами категорий
$variants - коллекция вариантов результата тестов
*/
/*$modx->log(1, 'OnTestCalculate'. print_r($test,1). print_r($result->toArray(),1). print_r($cat_results,1));
foreach($variants as $v){
$modx->log(1, 'OnTestCalculate v '. print_r($v->toArray(),1));
}*/
//Получаем итоговые баллы категорий
$cat_point = array();
foreach($cat_results as $cr){
$cat_point[$cr['category_id']] = $cr['cat_point'];
}
switch($test['id']){
case 3://для теста с id = 3
//Получаем ответ пользователя на 8 вопрос
if($resAns = $modx->getObject('UserTestResultAnswers', array('result_id'=>$result->id, 'question_id'=>8))){
$answer = $resAns->answer;
}
//Для результата теста, где ответ на 8 вопрос = 1, где набрано баллов 3, где в категории 1(математика) и в в категории 2(физика) набрано баллов от 0 до 3,
// ставим вариант результата id = 8 (тест не сдан. 2.)
if($answer == "1" and $result->test_point == 3 and $cat_point[1] > 0 and $cat_point[1] < 3 and $cat_point[2] > 0 and $cat_point[2] < 3){
$result->variant_id = 8;
$result->save();
}
break;
}
break;
}
Поблагодарить автора
Отправить деньги