$this->IncludeComponentTemplate(); } //Set Title $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle($arResult["CHAPTER"]["NAME"]); } $bCanEdit = CLearnAccessMacroses::CanUserEditLesson(array('lesson_id' => $arParams['CHAPTER_ID'])) || $USER->IsAdmin(); if ($bCanEdit) { $deleteReturnUrl = ""; if ($parent = $this->GetParent()) { $parentLessonId = 0; $lessonPath = ""; if (strlen($arParams["LESSON_PATH"]) > 0) { $path = new CLearnPath(); $path->ImportUrlencoded($arParams["LESSON_PATH"]); $path->PopBottom(); $lessonPath = $path->ExportUrlencoded(); $lessonId = $path->PopBottom(); $edgesToParents = CLearnLesson::ListImmediateParents($arParams['CHAPTER_ID']); foreach ($edgesToParents as $arEdgeToParent) { if ((int) $arEdgeToParent['PARENT_LESSON'] === (int) $lessonId) { $parentLessonId = $lessonId; break; } } } if ($parentLessonId) { $deleteReturnUrl = CComponentEngine::MakePathFromTemplate($parent->arResult["FOLDER"] . $parent->arResult["URL_TEMPLATES"]["chapter.detail"], array("CHAPTER_ID" => "0" . $parentLessonId, "COURSE_ID" => $arParams["COURSE_ID"])); $deleteReturnUrl .= strpos($deleteReturnUrl, "?") !== false ? "&" : "?"; $deleteReturnUrl .= "LESSON_PATH=" . $lessonPath;
if ($arSearchURL["query"]) { foreach (explode("&", $arSearchURL["query"]) as $param) { list($name, $value) = explode("=", $param); $searchParams .= "<input type=\"hidden\" name=\"" . htmlspecialcharsEx($name) . "\" value=\"" . htmlspecialcharsEx($value) . "\" />"; } } $APPLICATION->SetPageProperty("learning_search_params", $searchParams); $lessonID = 0; if ($arVariables["LESSON_ID"] > 0) { $lessonID = intval($arVariables["LESSON_ID"]); } else { // Lesson is not given, so try get chapter_id if (isset($_REQUEST['CHAPTER_ID'])) { if (CLearnPath::IsUrlencodedPath($_REQUEST['CHAPTER_ID'])) { $LESSON_PATH = new CLearnPath(); $LESSON_PATH->ImportUrlencoded($_REQUEST['CHAPTER_ID']); $lessonID = (int) $LESSON_PATH->GetBottom(); } elseif (substr($_REQUEST['CHAPTER_ID'], 0, 1) === '0') { $lessonID = (int) substr($_REQUEST['CHAPTER_ID'], 1); } else { $lessonID = (int) CLearnLesson::LessonIdByChapterId($_REQUEST['CHAPTER_ID']); } } } $linkedLessonId = false; if ($arParams["COURSE_ID"] > 0) { $linkedLessonId = CCourse::CourseGetLinkedLesson($arParams["COURSE_ID"]); } if ($arParams["CHECK_PERMISSIONS"] !== 'N') { $isAccessible = false; try {
$bVarsFromForm = false; $ID = intval($ID); $filter_lesson_id = intval($filter_lesson_id); $lessonPath = ''; if (isset($_POST['LESSON_PATH'])) { $lessonPath = $_POST['LESSON_PATH']; } elseif (isset($_GET['LESSON_PATH'])) { $lessonPath = $_GET['LESSON_PATH']; } else { $result = CLQuestion::GetByID($ID); $arData = $result->Fetch(); $oPath = new CLearnPath($arData['LESSON_ID']); $lessonPath = $oPath->ExportUrlencoded(); } $oPath = new CLearnPath(); $oPath->ImportUrlencoded($lessonPath); $uriLessonPath = $oPath->ExportUrlencoded(); $NEW_LESSON_ID = false; $LESSON_ID = false; if ($ID == 0) { $LESSON_ID = $oPath->PopBottom(); } else { // Get lesson id from item data $result = CLQuestion::GetByID($ID); $arQuestionData = $result->ExtractFields("str_"); if ($arQuestionData) { $LESSON_ID = $arQuestionData['LESSON_ID']; if (isset($_POST['LESSON_ID']) && $_POST['LESSON_ID'] >= 1 && $_POST['LESSON_ID'] != $LESSON_ID) { $NEW_LESSON_ID = (int) $_POST['LESSON_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']); foreach ($arContents as $arContent) { if ($arContent["TYPE"] == "CH") {
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('learning')) { return false; } //Params $arParams["COURSE_ID"] = isset($arParams["COURSE_ID"]) && intval($arParams["COURSE_ID"]) > 0 ? intval($arParams["COURSE_ID"]) : intval($_REQUEST["COURSE_ID"]); $arParams["SELF_TEST_TEMPLATE"] = strlen($arParams["SELF_TEST_TEMPLATE"]) > 0 ? htmlspecialcharsbx($arParams["SELF_TEST_TEMPLATE"]) : "self.php?SELF_TEST_ID=#SELF_TEST_ID#"; $CHAPTER_ID = isset($arParams["CHAPTER_ID"]) && intval($arParams["CHAPTER_ID"]) > 0 ? $arParams["CHAPTER_ID"] : $_REQUEST["CHAPTER_ID"]; if (CLearnPath::IsUrlencodedPath($CHAPTER_ID)) { $path = new CLearnPath(); $path->ImportUrlencoded($CHAPTER_ID); $arParams['CHAPTER_ID'] = (int) $path->GetBottom(); } elseif (substr($CHAPTER_ID, 0, 1) === '0') { $arParams['CHAPTER_ID'] = (int) substr($CHAPTER_ID, 1); } else { $arParams['CHAPTER_ID'] = (int) CLearnLesson::LessonIdByChapterId($CHAPTER_ID); } if (!(isset($arParams['LESSON_PATH']) && strlen($arParams['LESSON_PATH']))) { $arParams['LESSON_PATH'] = ''; if (isset($_REQUEST['LESSON_PATH']) && strlen($_REQUEST['LESSON_PATH'])) { $arParams['LESSON_PATH'] = $_REQUEST['LESSON_PATH']; } } $strUrlencodedLessonPath = ''; if (strlen($arParams['LESSON_PATH']) > 0) { $strUrlencodedLessonPath = 'LESSON_PATH=' . $arParams['LESSON_PATH']; }
throw new LearnException('EA_LOGIC: PROPOSE_RETURN_LESSON_PATH and ' . 'LESSON_PATH are mutually exclusive arguments.', LearnException::EXC_ERR_ALL_LOGIC); } $g_learn_parentLessonPath = $_GET['PROPOSE_RETURN_LESSON_PATH']; $oPath = new CLearnPath(); $oPath->ImportUrlencoded($g_learn_parentLessonPath); $g_learn_parentLessonId = $oPath->GetBottom(); if ($g_learn_parentLessonId === false) { throw new LearnException('EA_LOGIC: PROPOSE_RETURN_LESSON_PATH given, ' . 'but there is no parent lesson in path', LearnException::EXC_ERR_ALL_LOGIC); } } // Place to $topCourseLessonId lesson id of top course, if top lesson is course. $topCourseLessonId = false; if (isset($g_learn_parentLessonPath) && strlen($g_learn_parentLessonPath)) { try { $oPath = new CLearnPath(); $oPath->ImportUrlencoded($g_learn_parentLessonPath); $topLessonId = $oPath->GetTop(); // Is lesson the course? if (CLearnLesson::GetLinkedCourse($topLessonId) !== false) { $topCourseLessonId = $topLessonId; } } catch (Exception $e) { $topCourseLessonId = false; } unset($oPath, $topLessonId); } // This argument can be transmitted on POST submit of form when creating new lesson if (isset($_GET['PARENT_LESSON_ID'])) { $_POST['PARENT_LESSON_ID'] = $_GET['PARENT_LESSON_ID']; } if (isset($_POST['PARENT_LESSON_ID'])) {
$searchParams = ""; if ($arSearchURL["query"]) { foreach (explode("&", $arSearchURL["query"]) as $param) { list($name, $value) = explode("=", $param); $searchParams .= "<input type=\"hidden\" name=\"" . htmlspecialcharsEx($name) . "\" value=\"" . htmlspecialcharsEx($value) . "\" />"; } } $APPLICATION->SetPageProperty("learning_search_params", $searchParams); $lessonID = 0; if ($arVariables["LESSON_ID"] > 0) { $lessonID = intval($arVariables["LESSON_ID"]); } elseif (isset($arVariables['CHAPTER_ID'])) { // Lesson is not given, so try get chapter_id if (CLearnPath::IsUrlencodedPath($arVariables['CHAPTER_ID'])) { $LESSON_PATH = new CLearnPath(); $LESSON_PATH->ImportUrlencoded($arVariables['CHAPTER_ID']); $lessonID = (int) $LESSON_PATH->GetBottom(); } elseif (substr($arVariables['CHAPTER_ID'], 0, 1) === '0') { $lessonID = (int) substr($arVariables['CHAPTER_ID'], 1); } else { $lessonID = (int) CLearnLesson::LessonIdByChapterId($arVariables['CHAPTER_ID']); } } $linkedLessonId = false; if ($arParams["COURSE_ID"] > 0) { $linkedLessonId = CCourse::CourseGetLinkedLesson($arParams["COURSE_ID"]); } if ($arParams["CHECK_PERMISSIONS"] !== 'N') { $isAccessible = false; try { if ($lessonID > 0) {
public function BuildListContextMenu() { $aContext = array(); $parentLessonId = false; // Button "level up" available only if LESSON_PATH available and parent exists in it if (isset($_GET['LESSON_PATH']) && strlen($_GET['LESSON_PATH']) > 0) { $PROPOSE_RETURN_LESSON_PATH = '&PROPOSE_RETURN_LESSON_PATH=' . urlencode($_GET['LESSON_PATH']); $oPath = new CLearnPath(); $oPath->ImportUrlencoded($_GET['LESSON_PATH']); $arPath = $oPath->GetPathAsArray(); $arUpPath = $arPath; $count_arUpPath = count($arUpPath); if (isset($arUpPath[$count_arUpPath - 1])) { $parentLessonId = $arUpPath[$count_arUpPath - 1]; } // Is parent node exists if ($count_arUpPath >= 2) { // "Level up" array_pop($arUpPath); $oUpPath = new CLearnPath(); $oUpPath->SetPathFromArray($arUpPath); $aContext[] = array('ICON' => 'btn_up', 'TEXT' => GetMessage('LEARNING_A_UP'), 'LINK' => 'learn_unilesson_admin.php?lang=' . LANG . '&set_filter=Y' . '&PARENT_LESSON_ID=' . htmlspecialcharsbx($arUpPath[count($arUpPath) - 1]) . '&LESSON_PATH=' . $oUpPath->ExportUrlencoded() . '&' . $this->hrefSearchRetPoint, 'TITLE' => GetMessage('LEARNING_A_UP')); } else { // To all lessons list $aContext[] = array('ICON' => 'btn_up', 'TEXT' => GetMessage('LEARNING_ALL_LESSONS'), 'LINK' => 'learn_unilesson_admin.php?lang=' . LANG . '&set_filter=Y' . '&PARENT_LESSON_ID=-2' . '&' . $this->hrefSearchRetPoint, 'TITLE' => GetMessage('LEARNING_ALL_LESSONS')); } unset($arPath, $oPath, $arUpPath, $oUpPath); } else { $PROPOSE_RETURN_LESSON_PATH = ''; } if (!$this->IsSearchMode()) { /** * User can create lesson if he has base access for creating AND: * 1) no parent lesson * OR * 2) if user creating lesson linked to some parent on which user has access * to link childs, and user has access to link his created lesson to parent */ $isAccessCreate = false; try { if ($this->oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_CREATE)) { if ($parentLessonId === false) { $isAccessCreate = true; } elseif ($this->oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_DESCENDANTS | CLearnAccess::OP_LESSON_LINK_TO_PARENTS) || $this->oAccess->IsLessonAccessible($parentLessonId, CLearnAccess::OP_LESSON_LINK_DESCENDANTS) && $this->oAccess->IsBaseAccessForCR(CLearnAccess::OP_LESSON_LINK_TO_PARENTS)) { $isAccessCreate = true; } } } catch (Exception $e) { } if ($isAccessCreate) { // btn add new course $aContext[] = array('ICON' => 'btn_new', 'TEXT' => GetMessage('LEARNING_ADD_COURSE'), 'LINK' => 'learn_course_edit.php?lang=' . LANG . $PROPOSE_RETURN_LESSON_PATH, 'TITLE' => GetMessage('LEARNING_ADD_COURSE_ALT')); // btn add new unilesson (non-course) $aContext[] = array('ICON' => 'btn_new', 'TEXT' => GetMessage('LEARNING_UNILESSON_ADD'), 'LINK' => 'learn_unilesson_edit.php?lang=' . LANG . $PROPOSE_RETURN_LESSON_PATH, 'TITLE' => GetMessage('LEARNING_UNILESSON_ADD')); } } $this->oList->AddAdminContextMenu($aContext); return $this; }
$arRatingData = CRatings::GetRatingVoteResult('LEARN_LESSON', $arParams['LESSON_ID']); $ratingTransistor = serialize($arRatingData); } $delayed = false; $courseLessonId = CCourse::CourseGetLinkedLesson($arParams['COURSE_ID']); if (CLearnParsePermissionsFromFilter::isRegisteredAsAvailableCourse($courseLessonId)) { $arGroupsPeriods = CLearnAccessMacroses::getActiveLearningGroupsPeriod($courseLessonId, $USER->getId()); if ($arGroupsPeriods['IS_EXISTS']) { $arResult['LEARNING_GROUP_ACTIVE_FROM'] = $arGroupsPeriods['ACTIVE_FROM']; $arResult['LEARNING_GROUP_ACTIVE_TO'] = $arGroupsPeriods['ACTIVE_TO']; $activeFromMap = CLearnAccessMacroses::getActiveLearningChaptersPeriod($courseLessonId, $USER->getId()); if ($activeFromMap !== false) { $arResult['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM'] = $activeFromMap; } $oPath = new CLearnPath(); $oPath->ImportUrlencoded($arParams['LESSON_PATH']); $arPath = $oPath->GetPathAsArray(); if (count($arPath) >= 2) { $secondLevelLesson = $arPath[1]; if (isset($arResult['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM'][$secondLevelLesson])) { $activeFrom = $arResult['LEARNING_GROUP_CHAPTERS_ACTIVE_FROM'][$secondLevelLesson]; $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;
} unset($oSubItemPath); $arSubImmediateChildsIds = false; } $arMenu[] = $arItem; unset($oCurItemPath, $arCurItemPath, $urlCurItemPath, $arItem); } return $arMenu; } $oAccess = CLearnAccess::GetInstance($USER->GetID()); $module_id = "learning"; if (\CLearnAccessMacroses::CanViewAdminMenu()) { // Try to determine current path $oPath = new CLearnPath(); if (isset($_GET['LESSON_PATH'])) { $oPath->ImportUrlencoded($_GET['LESSON_PATH']); } elseif (isset($_GET['admin_mnu_module_id']) && isset($_GET['admin_mnu_menu_id']) && $_GET['admin_mnu_module_id'] === 'learning') { $strLessonIds = substr($_GET['admin_mnu_menu_id'], strlen('menu_learning_courses_new_')); if (strlen($strLessonIds) > 0) { $arLessonIds = explode('_', $strLessonIds); if (is_array($arLessonIds) && count($arLessonIds) > 0) { $oPath->SetPathFromArray($arLessonIds); } } } $arPath = $oPath->GetPathAsArray(); $urlPath = $oPath->ExportUrlencoded(); $arSubImmediateChildsIds = null; $aMenu = array("parent_menu" => "global_menu_services", "section" => "learning", "sort" => 600, "text" => GetMessage("LEARNING_MENU_LEARNING"), "title" => GetMessage("LEARNING_MENU_LEARNING_TITLE"), "icon" => "learning_menu_icon", "page_icon" => "learning_page_icon", "items_id" => "menu_learning", "items" => array(array("text" => GetMessage("LEARNING_MENU_COURSES"), "url" => "learn_unilesson_admin.php?lang=" . LANG . '&PARENT_LESSON_ID=-1', "title" => GetMessage("LEARNING_MENU_COURSES_ALT"), "items_id" => "menu_learning_courses_new", "icon" => "learning_icon_courses", "dynamic" => true, "module_id" => "learning", "more_url" => array("learn_course_edit.php"), "items" => __learning_admin_get_menu($this, $arPath, $deep = 0, $arSubImmediateChildsIds)), array("text" => GetMessage("LEARNING_LESSONS_LIST"), "url" => "learn_unilesson_admin.php?lang=" . LANG . '&set_filter=Y' . '&PARENT_LESSON_ID=-2', "title" => GetMessage("LEARNING_LESSONS_LIST"), "items_id" => "menu_learning_any_lessons36", "icon" => "learning_icon_lessons", "module_id" => "learning", "more_url" => array("learn_unilesson_admin.php", "learn_unilesson_edit.php"), "dynamic" => false, "items" => array()), array("text" => GetMessage("LEARNING_MENU_CERTIFICATION"), "url" => "learn_certification_admin.php?lang=" . LANG, "title" => GetMessage("LEARNING_MENU_CERTIFICATION_ALT"), "items_id" => "menu_learning_certification", "icon" => "learning_icon_certification", "page_icon" => "learning_page_icon_certification", "more_url" => array("learn_certification_edit.php")), array("text" => GetMessage("LEARNING_MENU_GRADEBOOK"), "url" => "learn_gradebook_admin.php?lang=" . LANG, "title" => GetMessage("LEARNING_MENU_GRADEBOOK_ALT"), "items_id" => "menu_learning_gradebook", "icon" => "learning_icon_gradebook", "page_icon" => "learning_page_icon_gradebook", "more_url" => array("learn_gradebook_edit.php")), array("text" => GetMessage("LEARNING_MENU_ATTEMPT"), "url" => "learn_attempt_admin.php?lang=" . LANG, "title" => GetMessage("LEARNING_MENU_ATTEMPT_ALT"), "items_id" => "menu_learning_attempt", "icon" => "learning_icon_attempts", "page_icon" => "learning_page_icon_attempts", "more_url" => array("learn_attempt_edit.php", "learn_test_result_edit.php", "learn_test_result_admin.php")))); if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_MANAGE_RIGHTS)) { $aMenu['items'][] = array('text' => GetMessage('LEARNING_MENU_GROUPS'), 'url' => 'learn_group_admin.php?lang=' . LANG, 'title' => GetMessage('LEARNING_MENU_GROUPS_ALT'), 'items_id' => 'menu_learning_groups', 'icon' => 'learning_icon_groups', 'more_url' => array('learn_group_edit.php'));