<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('learning')) { return false; } //Params $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"]); // was: if($this->StartResultCache(false, $USER->GetGroups())) if ($this->StartResultCache(false, CLearnAccess::GetAccessSymbolsHashForSiteUser())) { //Module if (!CModule::IncludeModule("learning")) { $this->AbortResultCache(); ShowError(GetMessage("LEARNING_MODULE_NOT_FOUND")); return; } 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) {
// access denied } if (!$isAccessible) { ShowError(GetMessage('LEARNING_COURSE_DENIED')); return; exit; } } $ratingTransistor = ''; if ($arParams['CHAPTER_ID'] > 0) { $arRatingData = CRatings::GetRatingVoteResult('LEARN_LESSON', $arParams['CHAPTER_ID']); $ratingTransistor = serialize($arRatingData); } $lastDirtyCacheTS = COption::GetOptionString('learning', CLearnCacheOfLessonTreeComponent::OPTION_TS, time()); // was: if($this->StartResultCache(false, $USER->GetGroups())) $additionalCacheID = CLearnAccess::GetAccessSymbolsHashForSiteUser() . '|' . $ratingTransistor . '|' . $lastDirtyCacheTS; if ($this->StartResultCache(false, $additionalCacheID)) { //Module if (!CModule::IncludeModule("learning")) { $this->AbortResultCache(); ShowError(GetMessage("LEARNING_MODULE_NOT_FOUND")); return; } //Course $rsCourse = CCourse::GetList(array(), array("ID" => $arParams["COURSE_ID"], "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "SITE_ID" => LANG, "CHECK_PERMISSIONS" => 'N')); if (!($arCourse = $rsCourse->GetNext())) { $this->AbortResultCache(); ShowError(GetMessage("LEARNING_COURSE_DENIED")); return; } // Resolve links "?COURSE_ID={SELF}". Don't relay on it, this behaviour
$tzOffset = CTimeZone::getOffset(); if ($bTzWasDisabled) { CTimeZone::disable(); } // Adjust unix timestamp to bitrix-timestamp for correct comparision below $nowTimestamp = time() + $tzOffset; if ($nowTimestamp < MakeTimeStamp($activeFrom)) { $delayed = $activeFrom; } } } } } $lastDirtyCacheTS = COption::GetOptionString('learning', CLearnCacheOfLessonTreeComponent::OPTION_TS, time()); // was: if($this->StartResultCache(false, $USER->GetGroups())) $additionalCacheID = CLearnAccess::GetAccessSymbolsHashForSiteUser() . '|' . $ratingTransistor . '|' . $lastDirtyCacheTS . '|' . ($delayed === false ? 'ND' : 'D'); if ($this->StartResultCache(false, $additionalCacheID)) { // Module if (!CModule::IncludeModule("learning")) { $this->AbortResultCache(); ShowError(GetMessage("LEARNING_MODULE_NOT_FOUND")); return; } if ($arParams["CHECK_PERMISSIONS"] !== 'N') { try { $arPermissionsParams = array('COURSE_ID' => $arParams['COURSE_ID'], 'LESSON_ID' => $arParams['LESSON_ID']); $isAccessible = CLearnAccessMacroses::CanUserViewLessonAsPublic($arPermissionsParams); } catch (Exception $e) { $isAccessible = false; // access denied }