- Модуль: learning
- Путь к файлу: ~/bitrix/modules/learning/classes/general/certification.php
- Класс: CAllCertification
- Вызов: CAllCertification::IsCourseCompleted
static function IsCourseCompleted($STUDENT_ID, $COURSE_ID)
{
global $DB;
$STUDENT_ID = intval($STUDENT_ID);
$COURSE_ID = intval($COURSE_ID);
if ($STUDENT_ID < 1 || $COURSE_ID < 1)
return false;
$strSql = "
SELECT COUNT(*) CNT_ALL, SUM(CASE WHEN G.COMPLETED = 'Y' THEN 1 ELSE 0 END ) CNT_COMPLETED
FROM b_learn_test T
INNER JOIN b_learn_course C ON T.COURSE_ID = C.ID
INNER JOIN b_learn_lesson TUL ON C.LINKED_LESSON_ID = TUL.ID
LEFT JOIN b_learn_gradebook G ON T.ID = G.TEST_ID AND G.STUDENT_ID = '".$STUDENT_ID."'
WHERE T.COURSE_ID = '".$COURSE_ID."' AND TUL.ACTIVE = 'Y' AND T.ACTIVE = 'Y'
";
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$cntAll = $cntCompleted = null;
$isCourseCompleted = false; // can be overrided below
if ( ($ar = $res->Fetch()) && intval($ar["CNT_ALL"]) > 0)
{
$cntAll = $ar['CNT_ALL'];
$cntCompleted = $ar['CNT_COMPLETED'];
if ($cntCompleted == $cntAll)
$isCourseCompleted = true;
}
$arEventData = array(
'STUDENT_ID' => $STUDENT_ID,
'COURSE_ID' => $COURSE_ID,
'CNT_ALL' => $cntAll,
'CNT_COMPLETED' => $cntCompleted
);
foreach(GetModuleEvents('learning', 'OnCheckCourseCompleted', true) as $arEvent)
{
$rc = ExecuteModuleEventEx($arEvent, array($arEventData));
if ($rc === false)
{
$isCourseCompleted = false;
break;
}
elseif ($rc === true)
{
$isCourseCompleted = true;
break;
}
}
return $isCourseCompleted;
}