Вопрос разработчикам Moodle - как получить проходной балл теста по его ID?

Вопрос разработчикам Moodle - как получить проходной балл теста по его ID?

от Эдуард Сердюк -
Количество ответов: 3

Всем добра!
Есть ли в форуме разработчики, если нет - поделитесь линком на профильный форум 🙏
Вопрос в следующем:
пишу обработчик результатов теста. Есть полученная попытка теста:

$attempts = $DB->get_records('quiz_attempts', ['id' => $attempt_id]);

по ней получил сам тест:

$tests = $DB->get_records('quiz', ['id' => $attempt->quiz]);
$test = $tests[$attempt->quiz];

а из этого объекта получаю другую важную информацию (в том числе и все вопросы-ответы пользователя в этой попытке в этом тесте):
$cource_id = $test->course;            // id курса
$max_grades = $test->sumgrades; // максимальный балл по тесту
$test_name = $test->name;            // название теста

Но среди полей таблицы нет проходного балла! Гуглил, вроде как мудл при сохранении настроек теста пересчитывает проходной балл в процент и сохраняет в связанных таблицах. Кто в теме - подскажите либо API либо место в БД, откуда можно получить информацию о проходном балле (проценте) для теста с известным id?
Заранее спасибо!
контекст: Moodle 4.1.17

В ответ на Эдуард Сердюк

Вопрос разработчикам Moodle - как получить проходной балл теста по его ID?

от Evgeny Shmidt -

Параметры оценивания

        $item = grade_item::fetch([
            'courseid' => $courseid,
            'itemtype' => 'mod',
            'itemmodule' => 'quiz',
            'iteminstance' => $quizid,
            'outcomeid' => null
        ]);

Или напрямую из базы

        $item = $DB->get_recod('grade_items', [
            'courseid' => $courseid,
            'itemtype' => 'mod',
            'itemmodule' => 'quiz',
            'iteminstance' => $quizid,
            'outcomeid' => null
        ]);

Поля: $grademin — минимальная оценка, $grademax — максимальная, $gradepass — проходной балл

Подробнее см. lib/grade/grade_item.php

В ответ на Evgeny Shmidt

Вопрос разработчикам Moodle - как получить проходной балл теста по его ID?

от Эдуард Сердюк -
Спасибо!
Ваш ответ помог, до многого докопался уже.
Сейчас бьюсь с получением id и номера (который был представлен пользователю при перемешивании вопросов) вопроса, который выбрал пользователь. Так, question_obj имеет поле public 'answers', в котором ответы идут в порядке следования в БД:
'answers' => array (size=4)
40150 => object(question_answer)[123] ... ответ 1
40151 => object(question_answer)[124] ... ответ 2
40152 => object(question_answer)[125] ... ответ 3
40153 => object(question_answer)[126] ... ответ 4, допустим его выбрал пользователь

теоретически, имея текст ответа пользователя (он у меня есть), можно пройтись по всем элементам массива answers и найти id выбранного ответа. Но с номером (это может быть 123, ABC и даже без номера - тогда можно говорить о порядке следования) сложнее. Есть поле 
protected 'order' => array (size=4)
0 => string '40153' (length=5) // выбранный ответ был первым в списке в момент тестирования 
1 => string '40150' (length=5)
2 => string '40152' (length=5)
3 => string '40151' (length=5)
из которого можно вычленить порядок следования ответов, и зная id выбранного вопроса на предыдущем шаге - получить порядок следования выбранного вопроса...
Однако как добраться до protected поля, да и правильно ли это?
Думаю есть готовые api, позволяющие это определить...
Прошу помощи у знающих людей 🙏
В ответ на Эдуард Сердюк

Вопрос разработчикам Moodle - как получить проходной балл теста по его ID?

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Если ну очень надо, то доступ до приватного поля можно получить через Reflection
Только для подсчёта проходного бала не нужно разбираться в порядке ответов на конкретный вопрос
 
Вот есть статья, правда старая https://docs.moodle.org/dev/Question_database_structure  , там говорится в https://docs.moodle.org/dev/Multiple_Choice_question_type#quiz_multichoice_table   , что нужно искать в таблице quiz_states , там будет порядок ответов через запятую, потом выбранные ответы через запятую