13 if ( ! isset($row[
'LINKED_LESSON_ID']) )
16 return ( (
int) $row[
'LINKED_LESSON_ID'] );
91 if (
$ID < 1)
return false;
101 $strUpdate =
$DB->PrepareUpdate(
"b_learn_gradebook",
$arFields,
"learning");
102 $strSql =
"UPDATE b_learn_gradebook SET ".$strUpdate.
" WHERE ID=".
$ID;
103 $DB->QueryBind($strSql, $arBinds);
116 if (
$ID < 1)
return false;
118 $strSql =
"SELECT TEST_ID, STUDENT_ID FROM b_learn_gradebook WHERE ID = ".$ID;
120 if (!$arGBook =
$res->Fetch())
123 $attempts =
CTestAttempt::GetList(Array(), Array(
"TEST_ID" => $arGBook[
"TEST_ID"],
"STUDENT_ID" => $arGBook[
"STUDENT_ID"]));
124 while($arAttempt = $attempts->Fetch())
130 $strSql =
"DELETE FROM b_learn_gradebook WHERE ID = ".$ID;
132 if (!
$DB->Query($strSql))
143 $arSqlSearch = Array();
149 $cOperationType =
$res[
"OPERATION"];
176 case "USER_LAST_NAME":
195 $STUDENT_ID = intval($STUDENT_ID);
196 $TEST_ID = intval($TEST_ID);
198 if ($TEST_ID < 1 || $STUDENT_ID < 1)
201 $strSql =
"SELECT ID FROM b_learn_gradebook G WHERE STUDENT_ID = '".$STUDENT_ID.
"' AND TEST_ID = '".$TEST_ID.
"' ";
203 if (!$arG =
$res->Fetch())
207 "STUDENT_ID" => $STUDENT_ID,
208 "TEST_ID" => $TEST_ID,
217 $strSql =
"SELECT SCORE, MAX_SCORE, COMPLETED ".
218 "FROM b_learn_attempt ".
219 "WHERE STUDENT_ID = '".$STUDENT_ID.
"' AND TEST_ID = '".$TEST_ID.
"' ".
220 "ORDER BY COMPLETED DESC, SCORE DESC ";
225 if (intval(
$res->SelectedRowsCount()) == 0)
227 $strSql =
"DELETE FROM b_learn_gradebook WHERE ID = ".$arG[
"ID"];
229 if (!
$DB->Query($strSql))
238 $strSql =
"UPDATE b_learn_gradebook SET ATTEMPTS = '".intval(
$res->SelectedRowsCount()).
"', COMPLETED = '".
$ar[
"COMPLETED"].
"', RESULT = '".intval(
$ar[
"SCORE"]).
"' , MAX_RESULT = '".intval(
$ar[
"MAX_SCORE"]).
"' WHERE STUDENT_ID = '".$STUDENT_ID.
"' AND TEST_ID = '".$TEST_ID.
"' ";
239 if (!
$DB->Query($strSql))
249 $STUDENT_ID = intval($STUDENT_ID);
250 $TEST_ID = intval($TEST_ID);
252 $strSql =
"SELECT EXTRA_ATTEMPTS FROM b_learn_gradebook WHERE STUDENT_ID = ".$STUDENT_ID.
" AND TEST_ID = ".$TEST_ID.
"";
253 $rs =
$DB->Query($strSql);
260 return $ar[
"EXTRA_ATTEMPTS"];
268 $STUDENT_ID = intval($STUDENT_ID);
269 $TEST_ID = intval($TEST_ID);
270 $COUNT = intval($COUNT);
272 $strSql =
"SELECT ID, EXTRA_ATTEMPTS FROM b_learn_gradebook WHERE STUDENT_ID = ".$STUDENT_ID.
" AND TEST_ID = ".$TEST_ID.
"";
273 $rs =
$DB->Query($strSql);
274 if ( ! (
$ar =
$rs->Fetch()) )
277 "STUDENT_ID" => $STUDENT_ID,
278 "TEST_ID" => $TEST_ID,
282 "EXTRA_ATTEMPTS" => $COUNT
289 $strSql =
"UPDATE b_learn_gradebook SET EXTRA_ATTEMPTS = ".($ar[
"EXTRA_ATTEMPTS"] + $COUNT).
" WHERE ID = ".
$ar[
"ID"];
290 if (!
$DB->Query($strSql))
303 if ( ! empty($arSqlSearch) )
304 $strSqlSearch .= implode(
' AND ', $arSqlSearch);
307 $SqlSearchLang =
"''";
308 if (array_key_exists(
"SITE_ID",
$arFilter))
320 foreach($arLID as $v)
321 $SqlSearchLang .=
", '".$DB->ForSql($v, 2).
"'";
324 $strSqlFrom = static::__getSqlFromClause($SqlSearchLang);
326 if ($oPermParser->IsNeedCheckPerm())
327 $strSqlFrom .=
" AND TUL.ID IN (" . $oPermParser->SQLForAccessibleLessons() .
") ";
329 if ($strSqlSearch !==
'')
330 $strSqlFrom .=
' AND ' . $strSqlSearch;
333 "SELECT G.*, T.NAME as TEST_NAME, T.COURSE_ID as COURSE_ID,
334 T.APPROVED as TEST_APPROVED,
335 (T.ATTEMPT_LIMIT + G.EXTRA_ATTEMPTS) AS ATTEMPT_LIMIT, TUL.NAME as COURSE_NAME,
336 C.LINKED_LESSON_ID AS LINKED_LESSON_ID, ".
337 $DB->Concat(
"'('",
'U.LOGIN',
"') '",
"CASE WHEN U.NAME IS NULL THEN '' ELSE U.NAME END",
"' '",
"CASE WHEN U.LAST_NAME IS NULL THEN '' ELSE U.LAST_NAME END").
" as USER_NAME, U.ID as USER_ID ".
340 if (!is_array($arOrder))
345 foreach($arOrder as $by=>
$order)
347 $by = mb_strtolower($by);
353 $arSqlOrder[] =
" G.ID ".$order.
" ";
354 elseif ($by ==
"student_id")
355 $arSqlOrder[] =
" G.STUDENT_ID ".$order.
" ";
357 $arSqlOrder[] =
" G.TEST_ID ".$order.
" ";
358 elseif ($by ==
"completed")
359 $arSqlOrder[] =
" G.COMPLETED ".$order.
" ";
361 $arSqlOrder[] =
" G.RESULT ".$order.
" ";
362 elseif ($by ==
"max_result")
363 $arSqlOrder[] =
" G.MAX_RESULT ".$order.
" ";
364 elseif ($by ==
"user_name")
365 $arSqlOrder[] =
" USER_NAME ".$order.
" ";
366 elseif ($by ==
"test_name")
367 $arSqlOrder[] =
" TEST_NAME ".$order.
" ";
369 $arSqlOrder[] =
" G.ID ".$order.
" ";
375 if (!empty($arSqlOrder))
377 for (
$i=0, $len =
count($arSqlOrder);
$i < $len;
$i++)
380 $strSqlOrder =
" ORDER BY ";
384 $strSqlOrder .= $arSqlOrder[
$i];
388 $strSql .= $strSqlOrder;
390 if (is_array($arNavParams) && ( ! empty($arNavParams) ) )
392 if (isset($arNavParams[
'nTopCount']) && ((
int) $arNavParams[
'nTopCount'] > 0))
394 $strSql =
$DB->TopSql($strSql, (
int) $arNavParams[
'nTopCount']);
399 $res_cnt =
$DB->Query(
"SELECT COUNT(G.ID) as C " . $strSqlFrom);
400 $res_cnt = $res_cnt->fetch();
401 $res =
new CDBResult();
402 $res->NavQuery($strSql, $res_cnt[
'C'], $arNavParams);
408 return $DB->Query($strSql);
421 "FROM b_learn_gradebook G ".
422 "INNER JOIN b_learn_test T ON G.TEST_ID = T.ID ".
423 "INNER JOIN b_user U ON U.ID = G.STUDENT_ID ".
424 "LEFT JOIN b_learn_course C ON C.ID = T.COURSE_ID ".
425 "LEFT JOIN b_learn_lesson TUL ON TUL.ID = C.LINKED_LESSON_ID ".
426 "LEFT JOIN b_learn_test_mark TM ON G.TEST_ID = TM.TEST_ID ".
427 "WHERE (TM.SCORE IS NULL
430 SELECT MIN(SCORE) AS SCORE
431 FROM b_learn_test_mark
436 CASE WHEN G.MAX_RESULT > 0
438 (G.RESULT/G.MAX_RESULT*100)
444 (mb_strlen($SqlSearchLang) <= 2?
"":
447 ( SELECT 'x' FROM b_learn_course_site CS
448 WHERE C.ID = CS.COURSE_ID AND CS.SITE_ID IN (".$SqlSearchLang.
") ) "
451 return ($strSqlFrom);
static RecountAttempts($STUDENT_ID, $TEST_ID)
static LessonIdByGradeBookId($certId)
static CheckFields(&$arFields, $ID=false)
static GetExtraAttempts($STUDENT_ID, $TEST_ID)
static __getSqlFromClause($SqlSearchLang)
static AddExtraAttempts($STUDENT_ID, $TEST_ID, $COUNT=1)
static Update($ID, $arFields)
static GetFilter($arFilter)
static GetList($arOrder=array(), $arFilter=array(), $arNavParams=array())
static GetList($arOrder=array(), $arFilter=array(), $arSelect=array(), $arNavParams=array())
static FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
static MkOperationFilter($key)
</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."%"