public function SQLForAccessibleLessons() { // SQL exists only if check permissions must be done if ($this->bCheckPerm === false) { throw new LearnException('', LearnException::EXC_ERR_ALL_LOGIC | LearnException::EXC_ERR_ALL_GIVEUP); } // Is not cached yet? if ($this->cachedSQL === false) { $this->cachedSQL = $this->oAccess->SQLClauseForAccessibleLessons($this->requestedOperations); global $USER; if (is_object($USER) && method_exists($USER, "GetID") && intval($USER->GetID()) > 0) { $rs = CLearningGroup::getList(array(), array("MEMBER_ID" => intval($USER->GetID()), "ACTIVE" => "Y", "ACTIVE_DATE" => "Y")); $availableCourses = array(); while ($group = $rs->fetch()) { $availableCourses[] = $group["COURSE_LESSON_ID"]; } if (count($availableCourses) > 0) { $this->cachedSQL .= " UNION SELECT ID as LESSON_ID\n\t\t\t\t\t\tFROM b_learn_lesson\n\t\t\t\t\t\tWHERE ID IN (" . join(",", $availableCourses) . ")"; } } } return $this->cachedSQL; }
if (strlen($ID) <= 0) { continue; } $ID = intval($ID); switch ($_REQUEST['action']) { case "delete": @set_time_limit(0); if (!CLearningGroup::delete($ID)) { $lAdmin->AddGroupError(GetMessage("LEARNING_DELETE_ERROR"), $ID); } break; } } } // fetch data $rsData = CLearningGroup::GetList(array($by => $order), $arFilter); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); // navigation string setup $lAdmin->NavText($rsData->GetNavPrint(GetMessage("LEARNING_ADMIN_RESULTS"))); // list header $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "id", "default" => true), array("id" => "ACTIVE", "content" => GetMessage('LEARNING_ADMIN_GROUPS_ACTIVE'), "sort" => "active", "default" => true), array("id" => "TITLE", "content" => GetMessage('LEARNING_ADMIN_GROUPS_TITLE'), "sort" => "title", "default" => true), array("id" => "CODE", "content" => GetMessage('LEARNING_ADMIN_GROUPS_CODE'), "sort" => "code", "default" => true), array("id" => "SORT", "content" => GetMessage('LEARNING_ADMIN_GROUPS_SORT'), "sort" => "sort", "default" => true), array("id" => "ACTIVE_FROM", "content" => GetMessage('LEARNING_ADMIN_GROUPS_ACTIVE_FROM'), "sort" => "active_from", "default" => true), array("id" => "ACTIVE_TO", "content" => GetMessage('LEARNING_ADMIN_GROUPS_ACTIVE_TO'), "sort" => "active_to", "default" => true), array("id" => "COURSE_LESSON_ID", "content" => GetMessage('LEARNING_ADMIN_GROUPS_COURSE_LESSON_ID'), "sort" => "course_lesson_id", "default" => true), array("id" => "COURSE_TITLE", "content" => GetMessage('LEARNING_ADMIN_GROUPS_COURSE_TITLE'), "sort" => "course_title", "default" => true))); // building list while ($arRes = $rsData->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arRes); $row->AddViewField("COURSE_TITLE", '<a href="learn_unilesson_admin.php?lang=' . LANG . '&PARENT_LESSON_ID=' . (int) $arRes['COURSE_LESSON_ID'] . '&LESSON_PATH=' . (int) $arRes['COURSE_LESSON_ID'] . '">' . $arRes['COURSE_TITLE'] . ' [' . $arRes['COURSE_LESSON_ID'] . ']' . '</a>'); $row->AddField("ID", '<a href="/bitrix/admin/learn_group_edit.php?ID=' . $f_ID . '&lang=' . LANGUAGE_ID . '" title="' . GetMessage("MAIN_ADMIN_MENU_EDIT") . '">' . $f_ID . '</a>'); $row->AddCheckField("ACTIVE"); $row->AddInputField("TITLE", array("size" => "20")); $row->AddInputField("CODE", array("size" => "10")); $row->AddInputField("SORT", array("size" => "3"));
private static function checkFields($arFields) { global $DB; IncludeModuleLangFile(__FILE__); $arMsg = array(); if (!array_key_exists('LEARNING_GROUP_ID', $arFields)) { $arMsg[] = array("id" => "LEARNING_GROUP_ID", "text" => GetMessage("LEARNING_BAD_LEARNING_GROUP_ID")); } else { $rs = CLearningGroup::getList(array(), array('ID' => (int) $arFields['LEARNING_GROUP_ID']), array('ID')); if (!($rs && $rs->fetch())) { $arMsg[] = array("text" => GetMessage("LEARNING_BAD_LEARNING_GROUP_ID_EX"), "id" => "BAD_GROUP_ID"); } } if (!array_key_exists('LESSON_ID', $arFields)) { $arMsg[] = array("id" => "LESSON_ID", "text" => GetMessage("LEARNING_BAD_LESSON_ID")); } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } return true; }
$arNewMembers[] = $value; } } $arNewMembers = array_unique($arNewMembers); $arAddedMembers = array_diff($arNewMembers, $arMembers); $arRemovedMembers = array_diff($arMembers, $arNewMembers); } if ($USER_FIELD_MANAGER->getRights('LEARNING_LGROUPS') >= 'W') { $USER_FIELD_MANAGER->EditFormAddFields('LEARNING_LGROUPS', $arFields); } $res = false; $oAccess = CLearnAccess::GetInstance($USER->GetID()); $isAccessible = $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_MANAGE_RIGHTS); $DB->StartTransaction(); if ($isAccessible) { $tr = new CLearningGroup(); if ($ID == 0) { $res = $tr->add($arFields); if ($res > 0) { $ID = (int) $res; } } else { $res = $tr->update($ID, $arFields); } if ($res) { foreach ($arAddedMembers as $memberId) { CLearningGroupMember::add(array('USER_ID' => $memberId, 'LEARNING_GROUP_ID' => $ID)); } foreach ($arRemovedMembers as $memberId) { CLearningGroupMember::delete($memberId, $ID); }
} global $USER; $bTzWasDisabled = !CTimeZone::enabled(); if ($bTzWasDisabled) { CTimeZone::enable(); } if ($userId === false) { $tzOffset = CTimeZone::getOffset(); } else { $tzOffset = CTimeZone::getOffset($userId); } if ($bTzWasDisabled) { CTimeZone::disable(); } $nowDateStr = ConvertTimeStamp(time() + $tzOffset, 'FULL'); $rs = CLearningGroup::getList(array(), array('MEMBER_ID' => $USER->getId(), 'ACTIVE' => 'Y', '<ACTIVE_FROM' => $nowDateStr, '>ACTIVE_TO' => $nowDateStr)); while ($ar = $rs->fetch()) { CLearnParsePermissionsFromFilter::registerAvailableCourse($ar['COURSE_LESSON_ID']); } $arParams["SORBY"] = isset($arParams["~SORBY"]) ? trim($arParams["~SORBY"]) : "SORT"; $arParams["SORORDER"] = isset($arParams["~SORORDER"]) ? trim($arParams["~SORORDER"]) : "ASC"; $arParams["CHECK_PERMISSIONS"] = isset($arParams["CHECK_PERMISSIONS"]) && $arParams["CHECK_PERMISSIONS"] == "N" ? "N" : "Y"; $arParams["COURSE_DETAIL_TEMPLATE"] = isset($arParams["COURSE_DETAIL_TEMPLATE"]) ? htmlspecialcharsbx($arParams["COURSE_DETAIL_TEMPLATE"]) : "course/index.php?COURSE_ID=#COURSE_ID#"; $arParams["COURSES_PER_PAGE"] = intval($arParams["COURSES_PER_PAGE"]) > 0 ? intval($arParams["COURSES_PER_PAGE"]) : 20; //Set Title $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("LEARNING_COURSE_LIST")); } //arResult $arResult = array("COURSES" => array(), "NAV_SRTING" => "", "NAV_RESULT" => null);
public static function getActiveLearningGroupsPeriod($courseLessonId, $userId) { static $arCache = array(); $userId = intval($userId); $courseLessonId = intval($courseLessonId); $cacheKey = $courseLessonId . "|" . $userId; if (!array_key_exists($cacheKey, $arCache)) { $rs = CLearningGroup::getList(array(), array('ACTIVE' => 'Y', 'MEMBER_ID' => $userId, 'COURSE_LESSON_ID' => $courseLessonId, 'ACTIVE_DATE' => 'Y'), array('ID', 'MEMBER_ID', 'ACTIVE_FROM', 'ACTIVE_TO')); $minActiveFrom = null; $minActiveFromFound = false; $minActiveFromTs = PHP_INT_MAX; $maxActiveTo = null; $maxActiveToFound = false; $maxActiveToTs = 0; $exists = false; $arGroupsActiveFrom = array(); while ($ar = $rs->fetch()) { $exists = true; $arGroupsActiveFrom[$ar['ID']] = $ar['ACTIVE_FROM']; if ($ar['ACTIVE_FROM'] === null) { $minActiveFrom = null; $minActiveFromFound = true; } elseif (!$minActiveFromFound) { $activeFromTs = MakeTimeStamp($ar['ACTIVE_FROM']); if ($activeFromTs < $minActiveFromTs) { $minActiveFrom = $ar['ACTIVE_FROM']; $minActiveFromTs = $activeFromTs; } } if ($ar['ACTIVE_TO'] === null) { $maxActiveTo = null; $maxActiveToFound = true; } elseif (!$maxActiveToFound) { $activeToTs = MakeTimeStamp($ar['ACTIVE_TO']); if ($activeToTs > $maxActiveToTs) { $maxActiveTo = $ar['ACTIVE_TO']; $maxActiveToTs = $activeToTs; } } } $arPeriod = array('IS_EXISTS' => $exists, 'ACTIVE_FROM' => $minActiveFrom, 'ACTIVE_TO' => $maxActiveTo, 'GROUPS_ACTIVE_FROM' => $arGroupsActiveFrom); $arCache[$cacheKey] = $arPeriod; } else { $arPeriod = $arCache[$cacheKey]; } return $arPeriod; }
public static function getActiveLearningGroupsPeriod($courseLessonId, $userId) { static $arCache = array(); $cacheKey = (int) $courseLessonId . '|' . (int) $userId; if (!array_key_exists($cacheKey, $arCache)) { $rs = CLearningGroup::getList(array(), array('ACTIVE' => 'Y', 'MEMBER_ID' => $userId, 'COURSE_LESSON_ID' => $courseLessonId, '<=ACTIVE_FROM' => ConvertTimeStamp(false, 'FULL'), '>=ACTIVE_TO' => ConvertTimeStamp(false, 'FULL')), array('ID', 'MEMBER_ID', 'ACTIVE_FROM', 'ACTIVE_TO')); $minActiveFromTs = PHP_INT_MAX; $maxActiveToTs = 0; $minActiveFrom = null; $maxActiveTo = null; $arGroupsActiveFrom = array(); while ($ar = $rs->fetch()) { $activeToTs = MakeTimeStamp($ar['ACTIVE_TO']); $activeFromTs = MakeTimeStamp($ar['ACTIVE_FROM']); if ($activeFromTs < $minActiveFromTs) { $minActiveFrom = $ar['ACTIVE_FROM']; $minActiveFromTs = $activeFromTs; } if ($activeToTs > $maxActiveToTs) { $maxActiveTo = $ar['ACTIVE_TO']; $maxActiveToTs = $activeToTs; } $arGroupsActiveFrom[$ar['ID']] = $ar['ACTIVE_FROM']; } $bExists = false; if ($minActiveFrom !== null && $maxActiveTo !== null) { $bExists = true; } $arPeriod = array('IS_EXISTS' => $bExists, 'ACTIVE_FROM' => $minActiveFrom, 'ACTIVE_TO' => $maxActiveTo, 'GROUPS_ACTIVE_FROM' => $arGroupsActiveFrom); $arCache[$cacheKey] = $arPeriod; } else { $arPeriod = $arCache[$cacheKey]; } return $arPeriod; }