%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/learning.course.tree/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/learning.course.tree/component.php |
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); require_once($_SERVER["DOCUMENT_ROOT"].$componentPath."/functions.php"); if (!CModule::IncludeModule("learning")) { ShowError(GetMessage("LEARNING_MODULE_NOT_FOUND")); return; } //Params $arParams["CHAPTER_DETAIL_TEMPLATE"] = (strlen($arParams["CHAPTER_DETAIL_TEMPLATE"]) > 0 ? $arParams["CHAPTER_DETAIL_TEMPLATE"]: "chapter.php?CHAPTER_ID=#CHAPTER_ID#"); $arParams["LESSON_DETAIL_TEMPLATE"] = (strlen($arParams["LESSON_DETAIL_TEMPLATE"]) > 0 ? $arParams["LESSON_DETAIL_TEMPLATE"] : "lesson.php?LESSON_ID=#LESSON_ID#"); $arParams["SELF_TEST_TEMPLATE"] = (strlen($arParams["SELF_TEST_TEMPLATE"]) > 0 ? $arParams["SELF_TEST_TEMPLATE"] : "self.php?LESSON_ID=#LESSON_ID#"); $arParams["TESTS_LIST_TEMPLATE"] = (strlen($arParams["TESTS_LIST_TEMPLATE"]) > 0 ? $arParams["TESTS_LIST_TEMPLATE"] :"course/test_list.php?COURSE_ID=#COURSE_ID#"); $arParams["TEST_DETAIL_TEMPLATE"] = (strlen($arParams["TEST_DETAIL_TEMPLATE"]) > 0 ? $arParams["TEST_DETAIL_TEMPLATE"] :"course/test.php?COURSE_ID=#COURSE_ID#&TEST_ID=#TEST_ID#"); $arParams["COURSE_DETAIL_TEMPLATE"] = (strlen($arParams["COURSE_DETAIL_TEMPLATE"]) > 0 ? $arParams["COURSE_DETAIL_TEMPLATE"] :"course/index.php?COURSE_ID=#COURSE_ID#"); //Check permissions $arParams["CHECK_PERMISSIONS"] = (isset($arParams["CHECK_PERMISSIONS"]) && $arParams["CHECK_PERMISSIONS"]=="N" ? "N" : "Y"); $arParams["COURSE_ID"] = (isset($arParams["COURSE_ID"]) && intval($arParams["COURSE_ID"]) > 0 ? intval($arParams["COURSE_ID"]) : intval($_REQUEST["COURSE_ID"])); if ($arParams['CHECK_PERMISSIONS'] !== 'N') { $linkedLessonId = CCourse::CourseGetLinkedLesson ($arParams["COURSE_ID"]); try { $arPermissionsParams = array( 'lesson_id' => $linkedLessonId ); $isAccessible = CLearnAccessMacroses::CanUserViewLessonContent ($arPermissionsParams); } catch (Exception $e) { $isAccessible = false; // access denied } if ( ! $isAccessible ) { ShowError(GetMessage('LEARNING_COURSE_DENIED')); return; exit(); } } $rsCourse = CCourse::GetList( Array(), Array( "ID" => $arParams["COURSE_ID"], "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "SITE_ID" => LANG, "CHECK_PERMISSIONS" => 'N' ) ); if (!$arCourse = $rsCourse->GetNext()) { ShowError(GetMessage("LEARNING_COURSE_DENIED")); return; } // Resolve links "?COURSE_ID={SELF}". Don't relay on it, this behaviour // can be changed in future without any nitifications. if (isset($arCourse['DETAIL_TEXT'])) { $arCourse['DETAIL_TEXT'] = CLearnHelper::PatchLessonContentLinks( $arCourse['DETAIL_TEXT'], $arParams["COURSE_ID"] ); } if (isset($arCourse['PREVIEW_TEXT'])) { $arCourse['PREVIEW_TEXT'] = CLearnHelper::PatchLessonContentLinks( $arCourse['PREVIEW_TEXT'], $arParams["COURSE_ID"] ); } //arResult $arResult = Array( "ITEMS" => Array(), "COURSE" => $arCourse, ); //Set Title $arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y" ); if ($arParams["SET_TITLE"] == "Y") $APPLICATION->SetTitle($arResult["COURSE"]["NAME"]); $parent = &$this->GetParent(); //Course description item $url = CComponentEngine::MakePathFromTemplate($arParams["COURSE_DETAIL_TEMPLATE"], Array("COURSE_ID" => $arParams["COURSE_ID"])); $arResult["ITEMS"][] = Array( "NAME" => GetMessage("LEARNING_COURSE_DESCRIPTION"), "URL" => $url, "TYPE" => "CD", "SELECTED" => $parent->arResult["VARIABLES"]["INDEX"] == "Y", "DEPTH_LEVEL" => 1 ); $CHAPTER_ID = $parent->arResult["VARIABLES"]["CHAPTER_ID"]; if ($CHAPTER_ID > 0) { if (CLearnPath::IsUrlencodedPath($CHAPTER_ID)) { $oTmp = new CLearnPath(); $oTmp->ImportUrlencoded($CHAPTER_ID); $CHAPTER_ID = (int) $oTmp->GetBottom(); } elseif (substr($CHAPTER_ID, 0, 1) === '0') $CHAPTER_ID = (int) substr($CHAPTER_ID, 1); else $CHAPTER_ID = (int) CLearnLesson::LessonIdByChapterId ($CHAPTER_ID); } else $CHAPTER_ID = false; $lessonCount = 0; $lessonCurrent = 0; // Get Course Content $arContents = CLearnCacheOfLessonTreeComponent::GetData($arParams['COURSE_ID']); $bDelayChapters = false; if ( isset($arParams['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM']) && is_array($arParams['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM']) ) { $bDelayChapters = true; $bTzWasDisabled = ! CTimeZone::enabled(); if ($bTzWasDisabled) CTimeZone::enable(); $tzOffset = CTimeZone::getOffset(); if ($bTzWasDisabled) CTimeZone::disable(); // Adjust unix timestamp to bitrix-timestamp for correct comparision below $nowTimestamp = time() + $tzOffset; } $skipSubLessons = false; foreach ($arContents as $arContent) { $arContent['DELAYED'] = false; if ($skipSubLessons) { if ($arContent['DEPTH_LEVEL'] > 1) continue; $skipSubLessons = false; } if ( $bDelayChapters && ($arContent['DEPTH_LEVEL'] == 1) ) { if (isset($arParams['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM'][$arContent['LESSON_ID']])) { $activeFrom = $arParams['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM'][$arContent['LESSON_ID']]; if ($nowTimestamp < MakeTimeStamp($activeFrom)) { $arContent['DELAYED'] = $activeFrom; $skipSubLessons = true; } } } if($arContent["TYPE"]=="CH") { $itemURL = CComponentEngine::MakePathFromTemplate($arParams["CHAPTER_DETAIL_TEMPLATE"], Array("CHAPTER_ID" => '0' . $arContent["ID"],"COURSE_ID" => $arParams["COURSE_ID"]) ); if ($CHAPTER_ID == $arContent["ID"]) $arContent["SELECTED"] = true; else $arContent["SELECTED"] = false; $arContent["CHAPTER_OPEN"] = $arContent["SELECTED"]; } elseif (($CHAPTER_ID > 0) && ($CHAPTER_ID == $arContent["ID"])) { $itemURL = CComponentEngine::MakePathFromTemplate($arParams["LESSON_DETAIL_TEMPLATE"], array( "LESSON_ID" => $arContent["ID"], "COURSE_ID" => $arParams["COURSE_ID"] ) ); $arContent["SELECTED"] = true; } else { $itemURL = CComponentEngine::MakePathFromTemplate($arParams["LESSON_DETAIL_TEMPLATE"], array( "LESSON_ID" => $arContent["ID"], "COURSE_ID" => $arParams["COURSE_ID"] ) ); /*$selftestURL = CComponentEngine::MakePathFromTemplate($arParams["SELF_TEST_TEMPLATE"], Array("LESSON_ID" => $arContent["ID"], "SELF_TEST_ID" => $arContent["ID"], "COURSE_ID" => $arParams["COURSE_ID"]) );*/ $arContent["SELECTED"] = $parent->arResult["VARIABLES"]["LESSON_ID"] == $arContent["ID"];//_IsItemSelected(Array($itemURL, $selftestURL)); } $lessonCount++; // quick hack due to low time if (strlen($arContent['~#LESSON_PATH'])) { if ( ! strpos($itemURL, '?') ) $itemURL .= '?'; else $itemURL .= '&'; $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"])); $testsCount = CTest::GetCount(array("COURSE_ID"=>$arParams["COURSE_ID"], "ACTIVE" => "Y", 'CHECK_PERMISSIONS' => 'N')); if ($testsCount > 0) { $arResult['ITEMS'][] = Array( 'NAME' => GetMessage('LEARNING_TEST_LIST') . ' (' . $testsCount . ')', '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 for ($itemIndex = 0, $size = count($arResult["ITEMS"]); $itemIndex < $size; $itemIndex++) { if ($arResult["ITEMS"][$itemIndex]["TYPE"] != "CH" || $arResult["ITEMS"][$itemIndex]["SELECTED"] === true) continue; $arResult["ITEMS"][$itemIndex]["CHAPTER_OPEN"] = ( in_array($arResult["ITEMS"][$itemIndex]["ID"], $arOpenChapters) || _IsInsideSelect($arResult["ITEMS"], ($itemIndex+1), $arResult["ITEMS"][$itemIndex]["DEPTH_LEVEL"]) ); } $this->IncludeComponentTemplate();