• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/clearnaccessmacroses.php
  • Класс: CLearnAccessMacroses
  • Вызов: CLearnAccessMacroses::getActiveLearningGroupsPeriod
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')	// $arSelect
		);

		$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);
}