$arContent["SELECTED"] = _IsItemSelected(array($itemURL, $selftestURL)); $lessonCount++; } if ($arContent["SELECTED"]) { $lessonCurrent = $lessonCount; } $arResult["ITEMS"][] = $arContent; } //Page Properties $APPLICATION->SetPageProperty("learning_course_name", $arResult["COURSE"]["NAME"]); $APPLICATION->SetPageProperty("learning_lesson_count", $lessonCount); $APPLICATION->SetPageProperty("learning_lesson_current", $lessonCurrent); //Test list item $url = CComponentEngine::MakePathFromTemplate($arParams["TESTS_LIST_TEMPLATE"], array("COURSE_ID" => $arParams["COURSE_ID"])); $arSelectedItems = array($url); $rsTest = CTest::GetList(array(), array("COURSE_ID" => $arParams["COURSE_ID"], "ACTIVE" => "Y")); $rsTest->NavStart(100); while ($arTest = $rsTest->Fetch()) { $arSelectedItems[] = CComponentEngine::MakePathFromTemplate($arParams["TEST_DETAIL_TEMPLATE"], array("TEST_ID" => $arTest["ID"], "COURSE_ID" => $arParams["COURSE_ID"])); } $arResult["ITEMS"][] = array("NAME" => GetMessage('LEARNING_TEST_LIST') . " (" . $rsTest->SelectedRowsCount() . ")", "URL" => $url, "TYPE" => "TL", "SELECTED" => _IsItemSelected($arSelectedItems), "DEPTH_LEVEL" => 1); unset($arContent); unset($rsContent); //Open chapters from Cookies $arOpenChapters = array(); if (array_key_exists("LEARN_MENU_" . $arParams["COURSE_ID"], $_COOKIE)) { $arOpenChapters = split(",", $_COOKIE["LEARN_MENU_" . $arParams["COURSE_ID"]]); } //Chapter open if child selected for ($itemIndex = 0, $size = count($arResult["ITEMS"]); $itemIndex < $size; $itemIndex++) { if ($arResult["ITEMS"][$itemIndex]["TYPE"] != "CH" || $arResult["ITEMS"][$itemIndex]["SELECTED"] === true) {
if (!CModule::IncludeModule("learning")) { ShowError(GetMessage("LEARNING_MODULE_NOT_FOUND")); return; } $arParams["COURSE_ID"] = isset($arParams["COURSE_ID"]) && intval($arParams["COURSE_ID"]) > 0 ? intval($arParams["COURSE_ID"]) : intval($_REQUEST["COURSE_ID"]); $arParams["TEST_DETAIL_TEMPLATE"] = strlen($arParams["TEST_DETAIL_TEMPLATE"]) > 0 ? htmlspecialchars($arParams["TEST_DETAIL_TEMPLATE"]) : 'test.php?TEST_ID=#TEST#'; $arParams["CHECK_PERMISSIONS"] = isset($arParams["CHECK_PERMISSIONS"]) && $arParams["CHECK_PERMISSIONS"] == "N" ? "N" : "Y"; $arParams["TESTS_PER_PAGE"] = intval($arParams["TESTS_PER_PAGE"]) > 0 ? intval($arParams["TESTS_PER_PAGE"]) : 20; //Title $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("LEARNING_TESTS_LIST")); } //arResult $arResult = array("TESTS" => array(), "TESTS_COUNT" => 0, "ERROR_MESSAGE" => "", "NAV_SRTING" => "", "NAV_RESULT" => null); $rsTest = CTest::GetList(array("SORT" => "ASC"), array("COURSE_ID" => $arParams["COURSE_ID"], "ACTIVE" => "Y", "CHECK_PERMISSIONS" => $arParams["CHECK_PERMISSIONS"])); CPageOption::SetOptionString("main", "nav_page_in_session", "N"); $rsTest->NavStart($arParams["TESTS_PER_PAGE"]); $arResult["NAV_STRING"] = $rsTest->GetPageNavString(GetMessage("LEARNING_TESTS_NAV")); $arResult["NAV_RESULT"] = $rsTest; while ($arTest = $rsTest->GetNext()) { //Test URL $arTest["TEST_DETAIL_URL"] = CComponentEngine::MakePathFromTemplate($arParams["TEST_DETAIL_TEMPLATE"], array("TEST_ID" => $arTest["ID"], "COURSE_ID" => $arTest["COURSE_ID"])); if ($_SERVER['REDIRECT_STATUS'] == '404' || isset($_REQUEST["SEF_APPLICATION_CUR_PAGE_URL"])) { $arTest["TEST_DETAIL_URL"] = "/bitrix/urlrewrite.php?SEF_APPLICATION_CUR_PAGE_URL=" . urlencode($arTest["TEST_DETAIL_URL"]); } //Unfinished attempt exists? $arTest["ATTEMPT"] = false; if ($USER->IsAuthorized()) { $rsAttempt = CTestAttempt::GetList(array(), array("TEST_ID" => $arTest["ID"], "STATUS" => "B", "STUDENT_ID" => intval($USER->GetID()))); $arTest["ATTEMPT"] = $rsAttempt->GetNext();
/** * WARNING: don't use this method, it's for internal use only * * Convert course to non-course lesson (course will be removed, * but lesson will stay exists) * * WARNING: this method terminates (by die()/exit()) current execution flow * when SQL server error occured. It's due to bug in CDatabase::Update() in main * module (version info: * define("SM_VERSION","11.0.12"); * define("SM_VERSION_DATE","2012-02-21 17:00:00"); // YYYY-MM-DD HH:MI:SS * ) * * @param int $courseId (returned by GetLinkedCourse($lessonId) ) * * @access private */ protected static function CourseBecomeLesson($courseId) { global $DB; self::_EnsureArgsStrictlyCastableToIntegers($courseId); $linkedLessonId = CCourse::CourseGetLinkedLesson($courseId); if ($linkedLessonId === false) { return false; } // Check certificates (if exists => forbid removing course) $certificate = CCertification::GetList(array(), array("COURSE_ID" => $courseId, 'CHECK_PERMISSIONS' => 'N')); if ($certificate === false || $certificate->GetNext()) { return false; } // Remove tests $tests = CTest::GetList(array(), array("COURSE_ID" => $courseId)); if ($tests === false) { return false; } while ($arTest = $tests->Fetch()) { if (!CTest::Delete($arTest["ID"])) { return false; } } // Remove all prohibitions for lessons in context of course to be removed // and remove prohibitions for course to be removed in context of all other courses self::PublishProhibitionPurge($linkedLessonId, self::PUBLISH_PROHIBITION_PURGE_ALL_LESSONS_IN_COURSE_CONTEXT | self::PUBLISH_PROHIBITION_PURGE_LESSON_IN_ALL_COURSE_CONTEXT); $rc = $DB->Query("DELETE FROM b_learn_course\n\t\t\tWHERE ID=" . (string) (int) $courseId, true); // reload cache of LINKED_LESSON_ID -> COURSE_ID self::GetCourseToLessonMap_ReloadCache(); CLearnCacheOfLessonTreeComponent::MarkAsDirty(); /** * This code will be useful after bug in CDatabase::Update() * and CDatabase::Insert() will be solved and $ignore_errors setted * to true in Insert()/Update() call above. */ if ($rc === false) { throw new LearnException('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP); } // If data not updated if ($rc === 0) { throw new LearnException('EA_OTHER: data not updated', LearnException::EXC_ERR_ALL_GIVEUP); } }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule("learning")) { return; } $arCourses = array(); $courses = CCourse::GetList(array("SORT" => "ASC")); while ($arRes = $courses->Fetch()) { $arCourses[$arRes["ID"]] = $arRes["NAME"]; } $arTests = array(); if ($arCurrentValues["COURSE_ID"] && intval($arCurrentValues["COURSE_ID"]) > 0) { $rsTest = CTest::GetList(array("SORT" => "ASC"), array("ACTIVE" => "Y", "COURSE_ID" => $arCurrentValues["COURSE_ID"])); while ($arTest = $rsTest->GetNext()) { $arTests[$arTest["ID"]] = "[" . $arTest["ID"] . "] " . $arTest["NAME"]; } } $arComponentParameters = array("PARAMETERS" => array("COURSE_ID" => array("NAME" => GetMessage("LEARNING_COURSE_ID"), "TYPE" => "LIST", "VALUES" => $arCourses, "PARENT" => "BASE", "ADDITIONAL_VALUES" => "Y", "REFRESH" => "Y", "DEFAULT" => '={$_REQUEST["COURSE_ID"]}'), "TEST_ID" => array("NAME" => GetMessage("T_LEARNING_DETAIL_ID"), "TYPE" => "LIST", "VALUES" => $arTests, "ADDITIONAL_VALUES" => "Y", "PARENT" => "BASE", "DEFAULT" => '={$_REQUEST["TEST_ID"]}'), "PAGE_NUMBER_VARIABLE" => array("NAME" => GetMessage("T_LEARNING_PAGE_NUMBER_VARIABLE"), "TYPE" => "STRING", "PARENT" => "ADDITIONAL_SETTINGS", "DEFAULT" => 'PAGE'), "GRADEBOOK_TEMPLATE" => array("NAME" => GetMessage("LEARNING_GRADEBOOK_TEMPLATE_NAME"), "TYPE" => "STRING", "PARENT" => "URL_TEMPLATES", "DEFAULT" => '../gradebook.php?TEST_ID=#TEST_ID#', "COLS" => 45), "PAGE_WINDOW" => array("NAME" => GetMessage("LEARNING_PAGE_WINDOW_NAME"), "TYPE" => "STRING", "PARENT" => "ADDITIONAL_SETTINGS", "DEFAULT" => '10'), "SHOW_TIME_LIMIT" => array("NAME" => GetMessage("LEARNING_SHOW_TIME_LIMIT"), "TYPE" => "CHECKBOX", "PARENT" => "ADDITIONAL_SETTINGS", "DEFAULT" => "Y"), "SET_TITLE" => array()));
$itemURL .= 'LESSON_PATH=' . $arContent['~#LESSON_PATH']; } $arContent["URL"] = htmlspecialcharsbx($itemURL); if ($arContent["SELECTED"]) { $lessonCurrent = $lessonCount; } $arResult["ITEMS"][] = $arContent; } //Page Properties $APPLICATION->SetPageProperty("learning_course_name", $arResult["COURSE"]["NAME"]); $APPLICATION->SetPageProperty("learning_lesson_count", $lessonCount); $APPLICATION->SetPageProperty("learning_lesson_current", $lessonCurrent); //Test list item $url = CComponentEngine::MakePathFromTemplate($arParams["TESTS_LIST_TEMPLATE"], array("COURSE_ID" => $arParams["COURSE_ID"])); $arSelectedItems = array($url); $rsTest = CTest::GetList(array(), array("COURSE_ID" => $arParams["COURSE_ID"], "ACTIVE" => "Y", 'CHECK_PERMISSIONS' => 'N')); $rsTest->NavStart(100); while ($arTest = $rsTest->Fetch()) { $arSelectedItems[] = CComponentEngine::MakePathFromTemplate($arParams["TEST_DETAIL_TEMPLATE"], array("TEST_ID" => $arTest["ID"], "COURSE_ID" => $arParams["COURSE_ID"])); } if ($rsTest->SelectedRowsCount() > 0) { $arResult["ITEMS"][] = array("NAME" => GetMessage('LEARNING_TEST_LIST') . " (" . $rsTest->SelectedRowsCount() . ")", "URL" => $url, "TYPE" => "TL", "SELECTED" => $parent->arResult["VARIABLES"]["TEST_LIST"] == "Y", "DEPTH_LEVEL" => 1); } unset($arContent); unset($rsContent); //Open chapters from Cookies $arOpenChapters = array(); if (array_key_exists("LEARN_MENU_" . $arParams["COURSE_ID"], $_COOKIE)) { $arOpenChapters = explode(",", $_COOKIE["LEARN_MENU_" . $arParams["COURSE_ID"]]); } //Chapter open if child selected
$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(); // navigation string setup $lAdmin->NavText($rsData->GetNavPrint(GetMessage("LEARNING_TESTS"))); // list header $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "id", "default" => true), array("id" => "TIMESTAMP_X", "content" => GetMessage('LEARNING_COURSE_ADM_DATECH'), "sort" => "timestamp_x", "default" => true), array("id" => "NAME", "content" => GetMessage('LEARNING_NAME'), "sort" => "name", "default" => true), array("id" => "SORT", "content" => GetMessage('LEARNING_COURSE_ADM_SORT'), "sort" => "sort", "default" => true), array("id" => "ACTIVE", "content" => GetMessage('LEARNING_COURSE_ADM_ACT'), "sort" => "active", "default" => true), array("id" => "TESTS_STATS", "content" => GetMessage('LEARNING_TEST_ADM_STATS'), "default" => true))); // building list while ($arRes = $rsData->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arRes); $arStat = CTest::GetStats($f_ID); $row->AddCheckField("ACTIVE"); $row->AddInputField("NAME", array("size" => "35")); $row->AddInputField("SORT", array("size" => "3")); $index = '-'; if ($arStat["ALL_CNT"] > 0.1) {
" size="47"></td> </tr> <tr> <td><?php echo GetMessage("LEARNING_ADMIN_TEST"); ?> :</td> <td> <select name="filter_test_id"> <option value=""><?php echo GetMessage("LEARNING_ALL"); ?> </option> <?php $l = CTest::GetList(array(), array()); while ($l->ExtractFields("l_")) { ?> <option value="<?php echo $l_ID; ?> "<?php if ($filter_test_id == $l_ID) { echo " selected"; } ?> ><?php echo $l_NAME; ?> </option><?php }
echo $f_ID; ?> " <?php if (IntVal($f_ID) == $PREVIOUS_TEST_COURSE_ID || !isset($PREVIOUS_TEST_COURSE_ID) && IntVal($f_ID) == $COURSE_ID) { echo "selected"; } ?> ><?php echo $f_NAME; ?> </option><?php } ?> </select> <?php $t = CTest::GetList(array(), array("ACTIVE" => "Y")); ?> <select name="PREVIOUS_TEST_ID" id="PREVIOUS_TEST_ID" onchange="OnChangePreviousTest();"> <option value="0"><<?php echo GetMessage("LEARNING_TEST_NO_DEPENDS"); ?> ></option> <?php while ($t->ExtractFields("t_")) { if (!isset($ID) || $ID != $t_ID) { ?> <option data-course="<?php echo intval($t_COURSE_ID); ?> " value="<?php echo $t_ID;
$arTest["CURRENT_INDICATION_PERCENT"] = $arTest["CURRENT_INDICATION"] & 1 ? "Y" : "N"; $arTest["CURRENT_INDICATION_MARK"] = ($arTest["CURRENT_INDICATION"] & 2) >> 1 ? "Y" : "N"; $arTest["FINAL_INDICATION_CORRECT_COUNT"] = $arTest["FINAL_INDICATION"] & 1 ? "Y" : "N"; $arTest["FINAL_INDICATION_SCORE"] = ($arTest["FINAL_INDICATION"] & 2) >> 1 ? "Y" : "N"; $arTest["FINAL_INDICATION_MARK"] = ($arTest["FINAL_INDICATION"] & 4) >> 2 ? "Y" : "N"; $arTest["FINAL_INDICATION_MESSAGE"] = ($arTest["FINAL_INDICATION"] & 8) >> 3 ? "Y" : "N"; } else { $arTest["CURRENT_INDICATION_PERCENT"] = "N"; $arTest["CURRENT_INDICATION_MARK"] = "N"; $arTest["FINAL_INDICATION_CORRECT_COUNT"] = "N"; $arTest["FINAL_INDICATION_SCORE"] = "N"; $arTest["FINAL_INDICATION_MARK"] = "N"; $arTest["FINAL_INDICATION_MESSAGE"] = "N"; } if ($arTest["PREVIOUS_TEST_ID"] > 0 && $arTest["PREVIOUS_TEST_SCORE"] > 0) { $rsPrevTest = CTest::GetList(array(), array("ID" => $arTest["PREVIOUS_TEST_ID"], 'CHECK_PERMISSIONS' => 'N')); if ($arPrevTest = $rsPrevTest->GetNext()) { if ($parent = $this->GetParent()) { $testUrlTemplate = CComponentEngine::MakePathFromTemplate($parent->arResult["URL_TEMPLATES"]["test"], array("TEST_ID" => $arPrevTest["ID"], "COURSE_ID" => $arPrevTest["COURSE_ID"])); $arTest["PREVIOUS_TEST_LINK"] = "<a href=\"" . $testUrlTemplate . "\">" . $arPrevTest["NAME"] . "</a>"; } } } } if ($USER->GetID()) { $arTest["ATTEMPT_LIMIT"] += CGradeBook::GetExtraAttempts($USER->GetID(), $arParams["TEST_ID"]); } $oAccess = CLearnAccess::GetInstance($USER->GetID()); $isRelativelyHighAccessLevel = $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_CREATE | CLearnAccess::OP_LESSON_READ | CLearnAccess::OP_LESSON_WRITE | CLearnAccess::OP_LESSON_REMOVE); $bCheckPerm = !$isRelativelyHighAccessLevel && !$USER->IsAdmin(); if ($bCheckPerm && $arTest["PREVIOUS_TEST_ID"] > 0 && $arTest["PREVIOUS_TEST_SCORE"] > 0 && !CTest::isPrevPassed($arTest["PREVIOUS_TEST_ID"], $arTest["PREVIOUS_TEST_SCORE"])) {
function GetByID($ID) { return CTest::GetList($arOrder = array(), $arFilter = array("ID" => $ID)); }