Your IP : 18.222.104.211


Current Path : /home/bitrix/ext_www/dev.shuft.com.ua/bitrix/components/bitrix/learning.course.tree/
Upload File :
Current File : /home/bitrix/ext_www/dev.shuft.com.ua/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')
{
	$isAccessible = false;
	$linkedLessonId = CCourse::CourseGetLinkedLesson ($arParams["COURSE_ID"]);
	if ($linkedLessonId !== false)
	{
		try
		{
			$isAccessible = CLearnAccessMacroses::CanUserViewLessonContent (array('lesson_id' => $linkedLessonId));
		}
		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') . '&nbsp;(' . $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();