switch ($_REQUEST['action']) {
            case "delete":
                @set_time_limit(0);
                $DB->StartTransaction();
                $ch = new CTest();
                if (!$ch->Delete($ID)) {
                    $DB->Rollback();
                    $lAdmin->AddGroupError(GetMessage("LEARNING_DELETE_ERROR"), $ID);
                }
                $DB->Commit();
                break;
            case "activate":
            case "deactivate":
                $ch = new CTest();
                $arFields = array("ACTIVE" => $_REQUEST['action'] == "activate" ? "Y" : "N");
                if (!$ch->Update($ID, $arFields)) {
                    if ($e = $APPLICATION->GetException()) {
                        $lAdmin->AddGroupError(GetMessage("SAVE_ERROR") . $ID . ": " . $e->GetString(), $ID);
                    }
                }
                break;
        }
    }
    if (isset($return_url) && strlen($return_url) > 0 && check_bitrix_sessid()) {
        LocalRedirect($return_url);
    }
}
// fetch data
$rsData = CTest::GetList(array($by => $order), $arFilter);
$rsData = new CAdminResult($rsData, $sTableID);
$rsData->NavStart();
 $NEXT_QUESTION_ON_ERROR = $SHOW_ERRORS == "Y" && $NEXT_QUESTION_ON_ERROR == "N" && $PASSAGE_TYPE == "2" ? "N" : "Y";
 $arFields = array("ACTIVE" => $ACTIVE, "COURSE_ID" => $COURSE_ID, "NAME" => $NAME, "CODE" => $CODE, "SORT" => $SORT, "DESCRIPTION" => $DESCRIPTION, "DESCRIPTION_TYPE" => $DESCRIPTION_TYPE, "TIME_LIMIT" => $TIME_LIMIT, "ATTEMPT_LIMIT" => $ATTEMPT_LIMIT, "COMPLETED_SCORE" => $COMPLETED_SCORE, "QUESTIONS_FROM" => $QUESTIONS_FROM, "QUESTIONS_AMOUNT" => $QUESTIONS_AMOUNT, "QUESTIONS_FROM_ID" => $QUESTIONS_FROM_ID, "RANDOM_QUESTIONS" => $RANDOM_QUESTIONS, "RANDOM_ANSWERS" => $RANDOM_ANSWERS, "APPROVED" => $APPROVED, "INCLUDE_SELF_TEST" => $INCLUDE_SELF_TEST, "PASSAGE_TYPE" => $PASSAGE_TYPE, "PREVIOUS_TEST_ID" => $PREVIOUS_TEST_ID, "PREVIOUS_TEST_SCORE" => $PREVIOUS_TEST_SCORE, "INCORRECT_CONTROL" => $INCORRECT_CONTROL, "CURRENT_INDICATION" => $CURRENT_INDICATION, "FINAL_INDICATION" => $FINAL_INDICATION, "SHOW_ERRORS" => $SHOW_ERRORS, "NEXT_QUESTION_ON_ERROR" => $NEXT_QUESTION_ON_ERROR, "MIN_TIME_BETWEEN_ATTEMPTS" => $MIN_TIME_BETWEEN_ATTEMPTS);
 if (strlen($arFields["COMPLETED_SCORE"]) <= 0) {
     unset($arFields["COMPLETED_SCORE"]);
     $arFields["APPROVED"] = "N";
 }
 if (intval($arFields["PREVIOUS_TEST_ID"]) <= 0) {
     $arFields["PREVIOUS_TEST_ID"] = false;
 }
 if (strlen($arFields["PREVIOUS_TEST_SCORE"]) <= 0) {
     $arFields["PREVIOUS_TEST_SCORE"] = 0;
 }
 $DB->StartTransaction();
 if ($ID > 0) {
     $actionType = "update";
     $res = $test->Update($ID, $arFields);
 } else {
     $actionType = "add";
     $ID = $test->Add($arFields);
     $res = $ID > 0;
 }
 if (!$res) {
     if ($e = $APPLICATION->GetException()) {
         $message = new CAdminMessage(GetMessage("LEARNING_ERROR"), $e);
     }
     $bVarsFromForm = true;
 } else {
     //Marks
     $marks = CLTestMark::GetList(array(), array("TEST_ID" => $ID));
     $arMarks = $arScores = array();
     while ($m = $marks->GetNext()) {