47 $arFields[
"RESPONSE"] = mb_substr($s, 0, -1);
75 $ID =
$DB->Add(
"b_learn_test_result",
$arFields, Array(
"RESPONSE"),
"learning");
83 public static function AddResponse($TEST_RESULT_ID, $RESPONSE)
87 $TEST_RESULT_ID = intval($TEST_RESULT_ID);
88 if ($TEST_RESULT_ID < 1)
return false;
90 $rsTestResult =
CTestResult::GetList(Array(), Array(
"ID" => $TEST_RESULT_ID,
'CHECK_PERMISSIONS' =>
'N'));
92 if ($arTestResult = $rsTestResult->GetNext())
94 if ($arTestResult[
"QUESTION_TYPE"] ==
"T")
98 "RESPONSE" => $RESPONSE,
105 if (!is_array($RESPONSE))
106 $RESPONSE = Array($RESPONSE);
109 "SELECT A.ID, Q.POINT ".
110 "FROM b_learn_test_result TR ".
111 "INNER JOIN b_learn_question Q ON TR.QUESTION_ID = Q.ID ".
112 "INNER JOIN b_learn_answer A ON Q.ID = A.QUESTION_ID ".
113 "WHERE TR.ID = '".$TEST_RESULT_ID.
"' ".
114 ($arTestResult[
"QUESTION_TYPE"] !=
"R" ?
"AND A.CORRECT = 'Y' " :
"").
115 "ORDER BY A.SORT ASC, A.ID ASC";
117 if (!
$res =
$DB->Query($strSql))
123 $arAnswer[] =
$arRes[
"ID"];
124 $str_POINT =
$arRes[
"POINT"];
127 if ($arTestResult[
"QUESTION_TYPE"] ==
"R")
129 if ($arAnswer != $RESPONSE)
134 $t1 = array_diff($arAnswer,$RESPONSE);
135 $t2 = array_diff($RESPONSE,$arAnswer);
136 if ($t1!=$t2 || $t2 != Array())
144 "RESPONSE" => $RESPONSE,
145 "POINT"=> $str_POINT,
146 "CORRECT"=> ($str_POINT ==
"0" ?
"N" :
"Y"),
167 if (
$ID < 1)
return false;
179 $strUpdate =
$DB->PrepareUpdate(
"b_learn_test_result",
$arFields,
"learning");
180 $strSql =
"UPDATE b_learn_test_result SET ".$strUpdate.
" WHERE ID=".
$ID;
181 $DB->QueryBind($strSql, $arBinds);
193 if (
$ID < 1)
return false;
195 $strSql =
"DELETE FROM b_learn_test_result WHERE ID = ".$ID;
197 if (!
$DB->Query($strSql))
214 $arSqlSearch = array_filter($arSqlSearch);
216 if ($oPermParser->IsNeedCheckPerm())
217 $arSqlSearch[] =
" L.ID IN (" . $oPermParser->SQLForAccessibleLessons() .
") ";
220 if ( ! empty($arSqlSearch) )
222 $strSqlSearch =
' WHERE ';
223 $strSqlSearch .= implode(
' AND ', $arSqlSearch);
226 $strSqlFrom =
"FROM b_learn_test_result TR
227 INNER JOIN b_learn_question Q ON TR.QUESTION_ID = Q.ID
228 INNER JOIN b_learn_lesson L ON Q.LESSON_ID = L.ID "
231 $strSql =
"SELECT TR.*, Q.QUESTION_TYPE, Q.NAME as QUESTION_NAME,
232 Q.POINT as QUESTION_POINT, Q.LESSON_ID "
235 if (!is_array($arOrder))
239 foreach($arOrder as $by=>
$order)
241 $by = mb_strtolower($by);
247 $arSqlOrder[] =
" TR.ID ".$order.
" ";
248 elseif ($by ==
"attempt_id")
249 $arSqlOrder[] =
" TR.ATTEMPT_ID ".$order.
" ";
250 elseif ($by ==
"question_id")
251 $arSqlOrder[] =
" TR.QUESTION_ID ".$order.
" ";
253 $arSqlOrder[] =
" TR.POINT ".$order.
" ";
255 $arSqlOrder[] =
" TR.CORRECT ".$order.
" ";
256 elseif ($by ==
"answered")
257 $arSqlOrder[] =
" TR.ANSWERED ".$order.
" ";
258 elseif ($by ==
"question_point")
259 $arSqlOrder[] =
" QUESTION_POINT ".$order.
" ";
260 elseif ($by ==
"question_name")
261 $arSqlOrder[] =
" QUESTION_NAME ".$order.
" ";
266 $arSqlOrder[] =
" TR.ID ".$order.
" ";
273 $arSqlOrderCnt =
count($arSqlOrder);
274 for (
$i=0;
$i<$arSqlOrderCnt;
$i++)
277 $strSqlOrder =
" ORDER BY ";
281 $strSqlOrder .= $arSqlOrder[
$i];
284 $strSql .= $strSqlOrder;
286 if (is_array($arNavParams) && ( ! empty($arNavParams) ) )
288 if (isset($arNavParams[
'nTopCount']) && ((
int) $arNavParams[
'nTopCount'] > 0))
290 $strSql =
$DB->TopSql($strSql, (
int) $arNavParams[
'nTopCount']);
295 $res_cnt =
$DB->Query(
"SELECT COUNT(TR.ID) as C " . $strSqlFrom);
296 $res_cnt = $res_cnt->fetch();
297 $res =
new CDBResult();
298 $res->NavQuery($strSql, $res_cnt[
'C'], $arNavParams);
317 $arSqlSearch = Array();
323 $cOperationType =
$res[
"OPERATION"];
340 case "QUESTION_NAME":
358 $TEST_RESULT_ID = intval($TEST_RESULT_ID);
360 if ($TEST_RESULT_ID < 1)
365 "FROM b_learn_test_result TR ".
366 "WHERE TR.ID = '".$TEST_RESULT_ID.
"'";
369 if (!$arAttemptResult =
$res->Fetch())
373 "SELECT SUM(TR.POINT) as SUM_POINT, SUM( Q.POINT ) MAX_POINT ".
374 "FROM b_learn_test_result TR ".
375 "INNER JOIN b_learn_question Q ON TR.QUESTION_ID = Q.ID ".
376 "WHERE TR.ATTEMPT_ID = '".$arAttemptResult[
"ATTEMPT_ID"].
"'";
379 if (!$arSum =
$res->Fetch())
383 "UPDATE b_learn_attempt SET SCORE = '".$arSum[
"SUM_POINT"].
"', MAX_SCORE ='".$arSum[
"MAX_POINT"].
"' ".
384 "WHERE ID = '".$arAttemptResult[
"ATTEMPT_ID"].
"'";
386 if (!
$res =
$DB->Query($strSql))
395 $ATTEMPT_ID = intval($ATTEMPT_ID);
397 $strSql =
"SELECT ANSWERED,COUNT(*) C ".
398 "FROM b_learn_test_result ".
399 "WHERE ATTEMPT_ID = ".$ATTEMPT_ID.
" ".
404 if(
$ar[
"ANSWERED"]==
"Y")
417 "SELECT COUNT(*) as C ".
418 "FROM b_learn_test_result TR ".
419 "WHERE TR.ATTEMPT_ID = '".intval($ATTEMPT_ID).
"'";
422 $res_cnt =
$res->Fetch();
424 return intval($res_cnt[
"C"]);
439 "SELECT ROUND(SUM(CASE WHEN TR.CORRECT = 'Y' THEN Q.POINT ELSE 0 END) * 100 / SUM(Q.POINT), 4) as PCNT ".
440 "FROM b_learn_test_result TR, b_learn_question Q ".
441 "WHERE TR.ATTEMPT_ID = '".intval($ATTEMPT_ID).
"' AND TR.QUESTION_ID = Q.ID";
443 if (!
$res =
$DB->Query($strSql))
446 if (!$arStat =
$res->Fetch())
450 return ( (
int) (floor($arStat[
"PCNT"] + 0.00001) + 0.00001) );
457 $strSql =
"SELECT SUM(CASE WHEN TR.CORRECT = 'Y' THEN 1 ELSE 0 END) AS CNT FROM b_learn_test_result TR WHERE TR.ATTEMPT_ID = ".intval($ATTEMPT_ID).
" GROUP BY ATTEMPT_ID";
459 if (!
$res =
$DB->Query($strSql))
462 if (!$arStat =
$res->Fetch())
465 return $arStat[
"CNT"];
static OnAttemptChange($ATTEMPT_ID, $bCOMPLETED=false)
static FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
static MkOperationFilter($key)
CheckFields(&$arFields, $ID=false)
static GetPercent($ATTEMPT_ID)
static OnTestResultChange($TEST_RESULT_ID)
static GetCorrectCount($ATTEMPT_ID)
static GetCount($ATTEMPT_ID)
static GetProgress($ATTEMPT_ID)
static AddResponse($TEST_RESULT_ID, $RESPONSE)
static GetFilter($arFilter)
static GetList($arOrder=array(), $arFilter=array(), $arNavParams=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
DelDuplicateSort(&$arSort)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"