• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/attempt.php
  • Класс: CAllTestAttempt
  • Вызов: CAllTestAttempt::IsTestCompleted
static function IsTestCompleted($ATTEMPT_ID, $PERCENT)
{
	global $DB;

	$strSql =
	"SELECT * ".
	"FROM b_learn_test_result TR, b_learn_question Q ".
	"WHERE TR.QUESTION_ID = Q.ID AND TR.CORRECT = 'N' AND Q.CORRECT_REQUIRED = 'Y' AND TR.ATTEMPT_ID = '".intval($ATTEMPT_ID)."'";

	if (!$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__)) return false; if ($arStat = $res->Fetch()) return false; $strSql = "SELECT SUM(Q.POINT) as CNT_ALL, SUM(CASE WHEN TR.CORRECT = 'Y' THEN Q.POINT ELSE 0 END) as CNT_RIGHT ". "FROM b_learn_test_result TR, b_learn_question Q ". "WHERE TR.ATTEMPT_ID = '".intval($ATTEMPT_ID)."' AND TR.QUESTION_ID = Q.ID"; if (!$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__)) return false; if (!$arStat = $res->Fetch()) return false; if($arStat["CNT_RIGHT"]<=0 || $arStat["CNT_ALL"] == 0) return false; // Do some magic due to IEEE 754 $epsilon = 0.001; $scoreForSuccess = (float) ((int) $PERCENT); $userScore = round( ($arStat["CNT_RIGHT"] / $arStat["CNT_ALL"]) * 100, 2); $delta = abs($userScore - $scoreForSuccess); $isTestComplete = false; if ($userScore > $scoreForSuccess) $isTestComplete = true; elseif ($delta < $epsilon) // it means, that $userScore == $scoreForSuccess $isTestComplete = true; return ($isTestComplete); }