• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/clearnaccess.php
  • Класс: CLearnAccess
  • Вызов: CLearnAccess::GetSymbolsAccessibleToLesson
static function GetSymbolsAccessibleToLesson ($in_lessonId, $in_bitmaskOperations, $isUseCache = false)
{
	global $DB;
	static $cacheSymbols = array();

	if ( ! (is_int($in_bitmaskOperations) && ($in_bitmaskOperations > 0)) )
	{
		throw new LearnException ('bitmask must be an integer > 0', 
			LearnException::EXC_ERR_ALL_ACCESS_DENIED 
			| LearnException::EXC_ERR_ALL_PARAMS);
	}

	$lessonId = (int) $in_lessonId;

	$cacheKey = 'k' . $in_lessonId . '|' . $in_bitmaskOperations;

	if ( ! ($isUseCache && isset($cacheSymbols[$cacheKey])) )
	{
		$arSymbols = array();
		$sqlOperationsNames = self::ParseOperationsForSQL ($in_bitmaskOperations);

		$rc = $DB->Query(
			"SELECT TLR.SUBJECT_ID AS SYMBOLS
			FROM b_learn_rights TLR
			INNER JOIN b_task_operation TTO
				ON TTO.TASK_ID = TLR.TASK_ID
			INNER JOIN b_operation XTO
				ON XTO.ID = TTO.OPERATION_ID
			WHERE TLR.LESSON_ID = " . $lessonId . "
				AND XTO.MODULE_ID = 'learning'
				AND XTO.NAME IN (" . $sqlOperationsNames . ")

			UNION

			SELECT TLRA.SUBJECT_ID AS SYMBOLS
			FROM b_learn_rights_all TLRA
			INNER JOIN b_task_operation TTO
				ON TTO.TASK_ID = TLRA.TASK_ID
			INNER JOIN b_operation XTO
				ON XTO.ID = TTO.OPERATION_ID
			WHERE XTO.MODULE_ID = 'learning'
				AND XTO.NAME IN (" . $sqlOperationsNames . ")
			", true);

		if ($rc === false)
		{
			throw new LearnException ('EA_SQLERROR', 
				LearnException::EXC_ERR_ALL_ACCESS_DENIED 
				| LearnException::EXC_ERR_ALL_GIVEUP);
		}

		while ($row = $rc->Fetch())
			$arSymbols[] = $row['SYMBOLS'];

		$cacheSymbols[$cacheKey] = $arSymbols;
	}

	return ($cacheSymbols[$cacheKey]);
}