11 $arMsg[] =
array(
"id"=>
"NAME",
"text"=>
GetMessage(
"LEARNING_BAD_NAME"));
21 if(empty($this->LAST_ERROR))
29 $arMsg[] =
array(
"id"=>
"LESSON_ID",
"text"=>
GetMessage(
"LEARNING_BAD_LESSON_ID"));
38 $bAccessLessonModify =
42 if ( ! $bAccessLessonModify )
43 $arMsg[] =
array(
"id"=>
"LESSON_ID",
"text"=>
GetMessage(
"LEARNING_BAD_LESSON_ID_EX"));
47 $arMsg[] =
array(
"id"=>
"LESSON_ID",
"text"=>
GetMessage(
"LEARNING_BAD_LESSON_ID_EX"));
55 $GLOBALS[
"APPLICATION"]->ThrowException($e);
99 !array_key_exists(
"MODULE_ID",
$arFields[
"FILE_ID"])
100 ||
$arFields[
"FILE_ID"][
"MODULE_ID"] ==
''
103 $arFields[
"FILE_ID"][
"MODULE_ID"] =
"learning";
105 CFile::SaveForDB(
$arFields,
"FILE_ID",
"learning");
107 $ID =
$DB->Add(
"b_learn_question",
$arFields,
array(
"DESCRIPTION",
'COMMENT_TEXT',
'INCORRECT_MESSAGE'));
112 foreach(
GetModuleEvents(
'learning',
'OnAfterQuestionAdd',
true) as $arEvent)
127 if (
$ID < 1)
return false;
135 $pic_res =
$DB->Query(
"SELECT FILE_ID FROM b_learn_question WHERE ID=".
$ID);
136 if($pic_res = $pic_res->Fetch())
137 $arFields[
"FILE_ID"][
"old_file"]=$pic_res[
"FILE_ID"];
149 "DESCRIPTION" =>
$arFields[
"DESCRIPTION"] ??
'',
150 'COMMENT_TEXT' =>
$arFields[
'COMMENT_TEXT'] ??
'',
151 'INCORRECT_MESSAGE' =>
$arFields[
'INCORRECT_MESSAGE'] ??
''
158 !array_key_exists(
"MODULE_ID",
$arFields[
"FILE_ID"])
159 ||
$arFields[
"FILE_ID"][
"MODULE_ID"] ==
''
162 $arFields[
"FILE_ID"][
"MODULE_ID"] =
"learning";
164 CFile::SaveForDB(
$arFields,
"FILE_ID",
"learning");
167 $strUpdate =
$DB->PrepareUpdate(
"b_learn_question",
$arFields);
168 if ($strUpdate !==
'')
170 $strSql =
"UPDATE b_learn_question SET ".$strUpdate.
" WHERE ID=".
$ID;
171 $DB->QueryBind($strSql, $arBinds);
174 foreach(
GetModuleEvents(
'learning',
'OnAfterQuestionUpdate',
true) as $arEvent)
188 if (
$ID < 1)
return false;
190 $strSql =
"SELECT FILE_ID FROM b_learn_question WHERE ID = ".$ID;
191 $r =
$DB->Query($strSql);
192 if (!$arQuestion = $r->Fetch())
196 while($arAnswer = $answers->Fetch())
202 $arAttempts = Array();
203 $strSql =
"SELECT ATTEMPT_ID FROM b_learn_test_result WHERE QUESTION_ID = ".$ID;
206 $arAttempts[] =
$ar[
"ATTEMPT_ID"];
209 $strSql =
"DELETE FROM b_learn_test_result WHERE QUESTION_ID = ".$ID;
210 if (!
$DB->Query($strSql))
213 foreach($arAttempts as $ATTEMPT_ID)
219 $strSql =
"DELETE FROM b_learn_question WHERE ID = ".$ID;
221 if (!
$DB->Query($strSql))
226 CFile::Delete($arQuestion[
"FILE_ID"]);
228 CEventLog::add(
array(
229 'AUDIT_TYPE_ID' =>
'LEARNING_REMOVE_ITEM',
230 'MODULE_ID' =>
'learning',
231 'ITEM_ID' =>
'Q #' .
$ID,
232 'DESCRIPTION' =>
'question removed'
235 foreach(
GetModuleEvents(
'learning',
'OnAfterQuestionDelete',
true) as $arEvent)
253 $arSqlSearch = Array();
259 $cOperationType =
$res[
"OPERATION"];
276 if ($courseLessonId ===
false)
282 $sqlCourseLessonsIdsList =
'';
285 $arChildLessonForCourse = $oTree->GetLessonsIdListInTree();
288 $arChildLessonForCourse[] = $courseLessonId;
291 $arChildLessonForCourseEscaped = array_map(
'intval', $arChildLessonForCourse);
293 $sqlCourseLessonsIdsList = implode (
', ', $arChildLessonForCourseEscaped);
295 if ($sqlCourseLessonsIdsList <>
'')
296 $arSqlSearch[] =
'CQ.LESSON_ID IN (' . $sqlCourseLessonsIdsList .
')';
304 case "QUESTION_TYPE":
307 case "CORRECT_REQUIRED":
323 $obUserFieldsSql->SetEntity(
'LEARNING_QUESTIONS',
"CQ.ID");
324 $obUserFieldsSql->SetSelect($arSelect);
326 $obUserFieldsSql->SetOrder($arOrder);
330 $strSqlFrom =
"FROM b_learn_question CQ "
331 .
"INNER JOIN b_learn_lesson CL ON CQ.LESSON_ID = CL.ID "
332 . $obUserFieldsSql->GetJoin(
"CQ.ID")
335 $r = $obUserFieldsSql->GetFilter();
337 $arSqlSearch[] =
"(".$r.
")";
339 if ( ! empty($arSqlSearch) )
340 $strSqlFrom .= implode(
' AND ', $arSqlSearch);
342 $strSqlFrom .=
' 1=1 ';
344 $strSql =
"SELECT CQ.ID, CQ.ACTIVE, CQ.LESSON_ID, CQ.QUESTION_TYPE,
345 CQ.NAME, CQ.SORT, CQ.DESCRIPTION, CQ.DESCRIPTION_TYPE,
346 CQ.COMMENT_TEXT, CQ.FILE_ID, CQ.SELF, CQ.POINT, CQ.DIRECTION,
347 CQ.CORRECT_REQUIRED, CQ.EMAIL_ANSWER, CQ.INCORRECT_MESSAGE,"
348 .
$DB->DateToCharFunction(
"CQ.TIMESTAMP_X").
" as TIMESTAMP_X "
349 . $obUserFieldsSql->GetSelect()
353 if (!is_array($arOrder))
357 foreach($arOrder as $by=>
$order)
359 $by = mb_strtolower($by);
365 $arSqlOrder[] =
" CQ.ID ".$order.
" ";
367 $arSqlOrder[] =
" CQ.NAME ".$order.
" ";
369 $arSqlOrder[] =
" CQ.SORT ".$order.
" ";
371 $arSqlOrder[] =
" CQ.POINT ".$order.
" ";
373 $arSqlOrder[] =
" CQ.QUESTION_TYPE ".$order.
" ";
375 $arSqlOrder[] =
" CQ.SELF ".$order.
" ";
377 $arSqlOrder[] =
" CQ.ACTIVE ".$order.
" ";
378 elseif ($by ==
"correct_required")
379 $arSqlOrder[] =
" CQ.CORRECT_REQUIRED ".$order.
" ";
380 elseif ($s = $obUserFieldsSql->getOrder($by))
381 $arSqlOrder[] =
' ' . $s .
' ' .
$order .
' ';
383 $arSqlOrder[] =
" CQ.TIMESTAMP_X ".$order.
" ";
388 $cnt =
count($arSqlOrder);
392 $strSqlOrder =
" ORDER BY ";
396 $strSqlOrder .= $arSqlOrder[
$i];
399 $strSql .= $strSqlOrder;
401 if (is_array($arNavParams) && ( ! empty($arNavParams) ) )
403 if (isset($arNavParams[
'nTopCount']) && ((
int) $arNavParams[
'nTopCount'] > 0))
405 $strSql =
$DB->TopSql($strSql, (
int) $arNavParams[
'nTopCount']);
410 $res_cnt =
$DB->Query(
"SELECT COUNT(CQ.ID) as C " . $strSqlFrom);
411 $res_cnt = $res_cnt->fetch();
412 $res =
new CDBResult();
413 $res->NavQuery($strSql, $res_cnt[
'C'], $arNavParams);
432 $cnt =
count($arSqlSearch);
434 if($arSqlSearch[
$i] <>
'')
435 $strSqlSearch .=
" AND ".$arSqlSearch[
$i].
" ";
438 "SELECT COUNT(DISTINCT CQ.ID) as C ".
439 "FROM b_learn_question CQ ".
440 "INNER JOIN b_learn_lesson CL ON CQ.LESSON_ID = CL.ID ".
445 $res_cnt =
$res->Fetch();
447 return intval($res_cnt[
"C"]);
static RecountQuestions($ATTEMPT_ID)
static OnAttemptChange($ATTEMPT_ID, $bCOMPLETED=false)
static CourseGetLinkedLesson($courseId)
static GetList($arOrder=Array(), $arFilter=Array())
CheckFields(&$arFields, $ID=false)
static GetList($arOrder=array(), $arFilter=array(), $bHz=false, $arNavParams=array(), $arSelect=array())
static GetCount($arFilter=Array())
static GetFilter($arFilter)
static GetInstance($in_userId)
static FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
static MkOperationFilter($key)
static GetTree( $lessonId, $arOrder=array('EDGE_SORT'=> 'asc'), $arFilter=array(), $publishProhibitionMode=true, $arSelectFields=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
ExecuteModuleEventEx($arEvent, $arParams=[])
DelDuplicateSort(&$arSort)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
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."%"
$GLOBALS['_____370096793']