function CheckFields(&$arFields, $ID = false) { global $DB; $arMsg = array(); if ((is_set($arFields, "ANSWER") || $ID === false) && strlen(trim($arFields["ANSWER"])) <= 0) { $arMsg[] = array("id" => "NAME", "text" => GetMessage("LEARNING_BAD_NAME")); } if ($ID === false && !is_set($arFields, "QUESTION_ID") || is_set($arFields, "QUESTION_ID") && intval($arFields["QUESTION_ID"]) < 1) { $arMsg[] = array("id" => "QUESTION_ID", "text" => GetMessage("LEARNING_BAD_QUESTION_ID")); } elseif (is_set($arFields, "QUESTION_ID")) { $res = CLQuestion::GetByID($arFields["QUESTION_ID"]); if (!($arRes = $res->Fetch())) { $arMsg[] = array("id" => "QUESTION_ID", "text" => GetMessage("LEARNING_BAD_QUESTION_ID")); } } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } if (is_set($arFields, "CORRECT") && $arFields["CORRECT"] != "Y") { $arFields["CORRECT"] = "N"; } return true; }
public static function CheckFields(&$arFields, $ID = false) { global $DB, $APPLICATION; if ($ID === false) { if (is_set($arFields, "ATTEMPT_ID")) { $r = CTestAttempt::GetByID($arFields["ATTEMPT_ID"]); if (!$r->Fetch()) { $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_ATTEMPT_ID_EX"), "ERROR_NO_ATTEMPT_ID"); return false; } } else { $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_ATTEMPT_ID"), "EMPTY_ATTEMPT_ID"); return false; } if (is_set($arFields, "QUESTION_ID")) { $r = CLQuestion::GetByID($arFields["QUESTION_ID"]); if (!$r->Fetch()) { $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_QUESTION_ID"), "EMPTY_QUESTION_ID"); return false; } } else { $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_QUESTION_ID"), "EMPTY_QUESTION_ID"); return false; } } if (is_set($arFields, "RESPONSE") && is_array($arFields["RESPONSE"])) { $s = ""; foreach ($arFields["RESPONSE"] as $val) { $s .= $val . ","; } $arFields["RESPONSE"] = substr($s, 0, -1); } /* if (is_set($arFields, "ANSWERED") && is_set($arFields, "RESPONSE")) { if ($arFields["ANSWERED"]=="Y" && strlen($arFields["RESPONSE"]) <= 0) { $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_NO_ANSWERS"), "EMPTY_ANSWERS"); return false; } } */ if (is_set($arFields, "CORRECT") && $arFields["CORRECT"] != "Y") { $arFields["CORRECT"] = "N"; } return true; }
LocalRedirect("/bitrix/admin/learn_question_edit.php?lang=" . LANG . '&LESSON_PATH=' . $uriLessonPath . "&ID=" . $ID . "&" . $tabControl->ActiveTabParam() . GetFilterParams("filter_", false) . ($from == "learn_admin" ? "&from=learn_admin" : "")); } } } //Defaults $str_SELF = "N"; $str_ACTIVE = "Y"; $str_CORRECT_REQUIRED = "N"; $str_COMMENT_TEXT = ''; $str_DIRECTION = "V"; $str_DESCRIPTION_TYPE = "text"; $str_SORT = "500"; $str_QUESTION_TYPE = "S"; $str_POINT = 10; $str_EMAIL_ANSWER = "N"; $result = CLQuestion::GetByID($ID); if (!$result->ExtractFields("str_")) { $ID = 0; } if ($bVarsFromForm) { $ACTIVE = $ACTIVE != "Y" ? "N" : "Y"; $DB->InitTableVarsForEdit("b_learn_question", "", "str_"); $str_FILE_ID = 0; } if (isset($QUESTION_TYPE) && strlen($QUESTION_TYPE) === 1) { $str_QUESTION_TYPE = $QUESTION_TYPE; } if ($ID > 0) { $APPLICATION->SetTitle(GetMessage("LEARNING_QUESTION") . ": " . GetMessage("LEARNING_EDIT_TITLE")); } else { $APPLICATION->SetTitle(GetMessage('LEARNING_QUESTION') . ": " . GetMessage("LEARNING_NEW_TITLE"));
$ID = intval($ID); switch ($_REQUEST['action']) { case "delete": @set_time_limit(0); $DB->StartTransaction(); $cl = new CLQuestion(); if (!$cl->Delete($ID)) { $DB->Rollback(); $lAdmin->AddGroupError(GetMessage("LEARNING_DELETE_ERROR"), $ID); } $DB->Commit(); break; case "self": case "deself": // We shouldn't do this for text lessons $rs = CLQuestion::GetByID($ID); $arQuestionData = $rs->Fetch(); if ($arQuestionData) { if ($arQuestionData['QUESTION_TYPE'] !== 'T') { $cl = new CLQuestion(); $arFields = array("SELF" => $_REQUEST['action'] == "self" ? "Y" : "N"); if (!$cl->Update($ID, $arFields)) { if ($e = $APPLICATION->GetException()) { $lAdmin->AddGroupError(GetMessage("SAVE_ERROR") . $ID . ": " . $e->GetString(), $ID); } } } else { $lAdmin->AddGroupError(GetMessage('LEARNING_QUESTION_OF_TEXT_TYPE_IGNORED'), $ID); } } break;
$rsTestResult = CTestResult::GetList(array(), $arFields); if (!($arTestResult = $rsTestResult->GetNext())) { $sessAttemptID = null; $sessAttemptError = GetMessage("LEARNING_RESPONSE_SAVE_ERROR"); LocalRedirect($arResult["REDIRECT_PAGE"]); } //Save User answer if ($arTest["TIME_LIMIT"] == 0 || $arTest["TIME_LIMIT"] * 60 >= time() - MakeTimeStamp($arAttempt["DATE_START"])) { if ($arTest["PASSAGE_TYPE"] == 0 || array_key_exists("answer", $_REQUEST)) { $result = CTestResult::AddResponse($testResultID, $_REQUEST["answer"]); if (!$result) { $sessAttemptID = null; $sessAttemptError = ($ex = $APPLICATION->GetException()) ? $ex->GetString() : GetMessage("LEARNING_RESPONSE_SAVE_ERROR"); LocalRedirect($arResult["REDIRECT_PAGE"]); } else { $rsQuestion = CLQuestion::GetByID($arTestResult["QUESTION_ID"]); if ($arQuestion = $rsQuestion->GetNext()) { // Resolve links "?COURSE_ID={SELF}". Don't relay on it, this behaviour // can be changed in future without any notifications. if (isset($arQuestion['DESCRIPTION'])) { $arQuestion['DESCRIPTION'] = CLearnHelper::PatchLessonContentLinks($arQuestion['DESCRIPTION'], $arParams['COURSE_ID']); } if ($arQuestion["QUESTION_TYPE"] != "T") { if ($arTest["SHOW_ERRORS"] == "Y" && $result["CORRECT"] == "N" && $result["ANSWERED"] == "Y" && $arQuestion["INCORRECT_MESSAGE"]) { $sessIncorrectMessage = $arQuestion; if ($arTest["NEXT_QUESTION_ON_ERROR"] == "N" && $arTest["PASSAGE_TYPE"] == 2) { $arResult["REDIRECT_PAGE"] = str_replace("#PAGE_ID#", array_key_exists($arParams["PAGE_NUMBER_VARIABLE"], $_REQUEST) ? $arResult["NAV"]["PAGE_NUMBER"] - 1 : 1, $arResult["PAGE_TEMPLATE"]); } } } elseif ($arQuestion["EMAIL_ANSWER"] == "Y") { $rsLesson = CLearnLesson::GetList(array(), array("LESSON_ID" => $arQuestion['LESSON_ID'], "CHECK_PERMISSIONS" => "N"));
break; } } } // fetch data $rsData = CTestResult::GetList(array($by => $order), $arFilter); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); // navigation string setup $lAdmin->NavText($rsData->GetNavPrint(GetMessage("LEARNING_ADMIN_RESULTS"))); // list header $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "id", "default" => true), array("id" => "QUESTION_NAME", "content" => GetMessage('LEARNING_ADMIN_QUESTION_NAME'), "sort" => "question_name", "default" => true), array("id" => "ANSWERED", "content" => GetMessage('LEARNING_ADMIN_ANSWERED'), "sort" => "answered", "default" => true), array("id" => "CORRECT", "content" => GetMessage('LEARNING_ADMIN_CORRECT'), "sort" => "correct", "default" => true), array("id" => "POINT", "content" => GetMessage('LEARNING_ADMIN_POINT'), "sort" => "point", "default" => true), array("id" => "RESPONSE_TEXT", "content" => GetMessage('LEARNING_ADMIN_USER_RESPONSE_TEXT'), "sort" => "point", "default" => true))); // building list while ($arRes = $rsData->NavNext(true, "f_")) { $arRes['RESPONSE_TEXT'] = ''; $result = CLQuestion::GetByID($arRes['QUESTION_ID']); $arData = $result->Fetch(); if ($arData['QUESTION_TYPE'] === 'T') { $arRes['RESPONSE_TEXT'] = $arRes['RESPONSE']; } elseif (!empty($arRes['RESPONSE'])) { $arResponseIDs = explode(',', $arRes['RESPONSE']); foreach ($arResponseIDs as $responseID) { $rsResponse = CLAnswer::GetByID((int) $responseID); $arResponseData = $rsResponse->GetNext(); if (strlen($arRes['RESPONSE_TEXT']) > 0) { $arRes['RESPONSE_TEXT'] .= '<hr>'; } $arRes['RESPONSE_TEXT'] .= $arResponseData['ANSWER']; } } $row =& $lAdmin->AddRow($f_ID, $arRes);