//add new foreach ($arNewIDs as $i) { if (strlen(${"N_MARK_" . $i}) <= 0 && strlen(${"N_SCORE_" . $i}) <= 0) { continue; } if (in_array(${"N_SCORE_" . $i}, $arScores)) { $message = new CAdminMessage(array("MESSAGE" => str_replace("##SCORE##", ${"N_SCORE_" . $i}, GetMessage("LEARNING_SCORE_EXISTS_ERROR")))); $bVarsFromForm = true; } elseif (in_array(${"N_MARK_" . $i}, $arMarks)) { $message = new CAdminMessage(array("MESSAGE" => str_replace("##MARK##", ${"N_MARK_" . $i}, GetMessage("LEARNING_MARK_EXISTS_ERROR")))); $bVarsFromForm = true; } else { $arMarks[] = ${"N_MARK_" . $i}; $arScores[] = ${"N_SCORE_" . $i}; $arFields = array("SCORE" => ${"N_SCORE_" . $i}, "MARK" => ${"N_MARK_" . $i}, "DESCRIPTION" => ${"N_DESCRIPTION_" . $i}, "TEST_ID" => $ID); $mark = new CLTestMark(); $MarkID = $mark->Add($arFields); if (intval($MarkID) <= 0) { if ($e = $APPLICATION->GetException()) { $message = new CAdminMessage(GetMessage("LEARNING_ERROR"), $e); } $bVarsFromForm = true; } } } if (sizeof($arScores) && !in_array(100, $arScores)) { $message = new CAdminMessage(array("MESSAGE" => GetMessage("LEARNING_MAX_MARK_ERROR"))); $bVarsFromForm = true; } } //Redirect
function GetList($arOrder = array(), $arFilter = array()) { global $DB, $USER; $arSqlSearch = CLTestMark::GetFilter($arFilter); $strSqlSearch = ""; for ($i = 0; $i < count($arSqlSearch); $i++) { if (strlen($arSqlSearch[$i]) > 0) { $strSqlSearch .= " AND " . $arSqlSearch[$i] . " "; } } $strSql = "SELECT TM.* " . "FROM b_learn_test_mark TM " . "WHERE 1=1 " . $strSqlSearch; if (!is_array($arOrder)) { $arOrder = array(); } foreach ($arOrder as $by => $order) { $by = strtolower($by); $order = strtolower($order); if ($order != "asc") { $order = "desc"; } if ($by == "id") { $arSqlOrder[] = " TM.ID " . $order . " "; } elseif ($by == "mark") { $arSqlOrder[] = " TM.MARK " . $order . " "; } elseif ($by == "score") { $arSqlOrder[] = " TM.SCORE " . $order . " "; } elseif ($by == "rand") { $arSqlOrder[] = CTest::GetRandFunction(); } else { $arSqlOrder[] = " TM.ID " . $order . " "; $by = "id"; } } $strSqlOrder = ""; DelDuplicateSort($arSqlOrder); for ($i = 0; $i < count($arSqlOrder); $i++) { if ($i == 0) { $strSqlOrder = " ORDER BY "; } else { $strSqlOrder .= ","; } $strSqlOrder .= $arSqlOrder[$i]; } $strSql .= $strSqlOrder; //echo $strSql; return $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); }
function Delete($ID) { global $DB; $ID = intval($ID); if ($ID < 1) { return false; } CLearnHelper::FireEvent('OnBeforeTestDelete', $ID); //Gradebook $records = CGradeBook::GetList(array(), array("TEST_ID" => $ID)); while ($arRecord = $records->Fetch()) { if (!CGradeBook::Delete($arRecord["ID"])) { return false; } } //Attempts $attempts = CTestAttempt::GetList(array(), array("TEST_ID" => $ID)); while ($arAttempt = $attempts->Fetch()) { if (!CTestAttempt::Delete($arAttempt["ID"])) { return false; } } //Marks $marks = CLTestMark::GetList(array(), array("TEST_ID" => $ID)); while ($arMark = $marks->Fetch()) { if (!CLTestMark::Delete($arMark["ID"])) { return false; } } $strSql = "DELETE FROM b_learn_test WHERE ID = " . $ID; if (!$DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__)) { return false; } CEventLog::add(array('AUDIT_TYPE_ID' => 'LEARNING_REMOVE_ITEM', 'MODULE_ID' => 'learning', 'ITEM_ID' => 'T #' . $ID, 'DESCRIPTION' => 'test removed')); CLearnHelper::FireEvent('OnAfterTestDelete', $ID); return true; }
$sessAttemptFinished = null; $sessAttempt = null; //Title $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle($arResult["TEST"]["NAME"]); } //Actions $bTestCreate = $_SERVER["REQUEST_METHOD"] == "POST" && !isset($sessAttemptID); $bPostAnswer = $_SERVER["REQUEST_METHOD"] == "POST" && isset($sessAttemptID) && $_POST["ANSWERED"] == "Y"; $arResult["COMPLETE_PERCENT"] = 0; $arResult["CURRENT_MARK"] = ""; if (isset($sessAttemptID) && intval($sessAttemptID) > 0) { $arResult["COMPLETE_PERCENT"] = CTestResult::GetPercent(@$sessAttemptID); if ($arResult["COMPLETE_PERCENT"]) { $arResult["CURRENT_MARK"] = CLTestMark::GetByPercent($arTest["ID"], $arResult["COMPLETE_PERCENT"]); } } 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
/** * <p>Метод удаляет тест с идентификатором ID.</p> * * * * * @param int $ID Идентификатор теста. * * * * @return bool <p>Метод возвращает <i>true</i> в случае успешного удаления теста, в * противном случае возвращает <i>false</i>.</p><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * if (CModule::IncludeModule("learning")) * { * * $TEST_ID = 99; * $COURSE_ID = 97; * * if (CCourse::GetPermission($COURSE_ID) >= 'W') * { * @set_time_limit(0); * $DB->StartTransaction(); * if (!CTest::Delete($TEST_ID)) * { * echo "Error!"; * $DB->Rollback(); * } * else * $DB->Commit(); * } * } * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/learning/classes/ctest/delete.php * @author Bitrix */ public static function Delete($ID) { global $DB; $ID = intval($ID); if ($ID < 1) return false; CLearnHelper::FireEvent('OnBeforeTestDelete', $ID); //Gradebook $records = CGradeBook::GetList(Array(), Array("TEST_ID" => $ID)); while($arRecord = $records->Fetch()) { if(!CGradeBook::Delete($arRecord["ID"])) return false; } //Attempts $attempts = CTestAttempt::GetList(Array(), Array("TEST_ID" => $ID)); while($arAttempt = $attempts->Fetch()) { if(!CTestAttempt::Delete($arAttempt["ID"])) return false; } //Marks $marks = CLTestMark::GetList(Array(), Array("TEST_ID" => $ID)); while($arMark = $marks->Fetch()) { if(!CLTestMark::Delete($arMark["ID"])) return false; } $strSql = "DELETE FROM b_learn_test WHERE ID = ".$ID; if (!$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__)) return false; CLearnHelper::FireEvent('OnAfterTestDelete', $ID); return true; }