[UserTest] - новая версия. Добавлено событие OnTestCalculate.

Если не устраивает стандартная логика расчета (по сумме баллов), то теперь в UserTest можно реализовать свою логику расчета. Для этого добавлено событие OnTestCalculate. На него можно создать свой плагин.
Под катом пример плагина 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;
}
Александр Туниеков
09 апреля 2019, 17:36
modx.pro
3
945
+4
Поблагодарить автора Отправить деньги

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0