} } if ($bTestCreate) { $sessIncorrectMessage = null; //If old attempt exists? if ($arAttempt = _AttemptExists($arParams["TEST_ID"])) { $sessAttemptID = $arAttempt["ID"]; if ($arAttempt["STATUS"] == "N") { $arFields = array("~DATE_START" => CDatabase::CurrentTimeFunction(), "DATE_END" => false, "STATUS" => "B"); $ta = new CTestAttempt(); $res = $ta->Update($arAttempt["ID"], $arFields); } LocalRedirect($arResult["REDIRECT_PAGE"]); } //Check attempt limit if ($arTest["ATTEMPT_LIMIT"] > 0 && $arTest["ATTEMPT_LIMIT"] <= CTestAttempt::GetCount($arParams["TEST_ID"], $USER->GetID())) { $sessAttemptError = GetMessage("LEARNING_LIMIT_ERROR"); LocalRedirect($arResult["REDIRECT_PAGE"]); } //Check min time between attempts if ($arTest["MIN_TIME_BETWEEN_ATTEMPTS"] > 0) { CTimeZone::Disable(); $rsPrevAttempt = CTestAttempt::GetList(array("DATE_END" => "DESC"), array("TEST_ID" => $arParams["TEST_ID"], "STUDENT_ID" => $USER->GetID())); CTimeZone::Enable(); if ($arPrevAttempt = $rsPrevAttempt->GetNext()) { $prevTime = strtotime($arPrevAttempt["DATE_END"]); $timeDiff = floor((time() - strtotime($arPrevAttempt["DATE_END"])) / 60); //time difference in minutes if ($timeDiff < $arTest["MIN_TIME_BETWEEN_ATTEMPTS"]) { $nextAttemptAfter = $arTest["MIN_TIME_BETWEEN_ATTEMPTS"] - $timeDiff; $nextAttemptAfterD = floor($nextAttemptAfter / (60 * 24));