• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/clearnlesson.php
  • Класс: CLearnLesson
  • Вызов: CLearnLesson::GetFilter
static function GetFilter($arFilter = array(), $mode)
{
	global $DB;

	if ( ! is_array($arFilter) )
		throw new LearnException ('EA_PARAMS', LearnException::EXC_ERR_ALL_PARAMS);

	$arSqlSearch = array();

	foreach ($arFilter as $key => $val)
	{
		$res = CLearnHelper::MkOperationFilter($key);
		$key = $res["FIELD"];
		$cOperationType = $res["OPERATION"];

		$key = mb_strtoupper($key);

		switch ($key)
		{
			// for courses only
			case 'COURSE_ID':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TC.ID', $val, 'number', $bFullJoin, $cOperationType);
				break;

			case 'COURSE_SORT':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TC.SORT', $val, 'number', $bFullJoin, $cOperationType);
				break;

			case 'EDGE_SORT':
				// edges table (TLE) available only if requested immediate childs of some parent lesson
				if ($mode & self::GET_LIST_IMMEDIATE_CHILDS_OF)
					$arSqlSearch[] = CLearnHelper::FilterCreate('TLE.SORT', $val, 'number', $bFullJoin, $cOperationType);
				else
					throw new LearnException ('EA_PARAMS: unknown field ' . $key, LearnException::EXC_ERR_ALL_PARAMS);
				break;

			case 'SORT':
				if ($mode & self::GET_LIST_IMMEDIATE_CHILDS_OF)
				{
					// edges table (TLE) available only if requested immediate childs of some parent lesson
					$arSqlSearch[] = CLearnHelper::FilterCreate('TLE.SORT', $val, 'number', $bFullJoin, $cOperationType);
				}
				else
				{
					// so, by default sort by b_learn_course.SORT (for partially backward compatibility)
					$arSqlSearch[] = CLearnHelper::FilterCreate('TC.SORT', $val, 'number', $bFullJoin, $cOperationType);
				}
				break;

			case 'LINKED_LESSON_ID':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TC.' . $key, $val, 'number', $bFullJoin, $cOperationType, false);
				break;

			case 'CHILDS_CNT':
				$arSqlSearch[] = CLearnHelper::FilterCreate('(SELECT COUNT(*) FROM b_learn_lesson_edges TLES WHERE TLES.SOURCE_NODE = TL.ID)', $val, 'number', $bFullJoin, $cOperationType);
				break;

			case 'ACTIVE_FROM':
			case 'ACTIVE_TO':
				if ($val <> '')
				{
					$arSqlSearch[] = "(TC." . $key . " " . ($cOperationType == "N" ? "<" : ">=")
						. $DB->CharToDateFunction($DB->ForSql($val), "FULL")
						. ($cOperationType == "N" ? "" : " OR TC.ACTIVE_FROM IS NULL")
						. ")";
				}
				break;

			case "ACTIVE_DATE":
				if($val <> '')
				{
					$arSqlSearch[] = ($cOperationType == "N" ? " NOT" : "")
						. "((TC.ACTIVE_TO >= " . $DB->GetNowFunction()
						." OR TC.ACTIVE_TO IS NULL) AND (TC.ACTIVE_FROM <= " . $DB->GetNowFunction()
						. " OR TC.ACTIVE_FROM IS NULL))";
				}
				break;

			case "DATE_ACTIVE_TO":
			case "DATE_ACTIVE_FROM":
				$arSqlSearch[] = CLearnHelper::FilterCreate("TC." . $key, $val, 'date', $bFullJoin, $cOperationType);
				break;

			case 'RATING_TYPE':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TC.' . $key, $val, 'string', $bFullJoin, $cOperationType);
				break;

			case 'RATING':
			case 'SCORM':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TC.' . $key, $val, 'string_equal', $bFullJoin, $cOperationType);
				break;

			// for all lessons
			case 'WAS_CHAPTER_ID':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.WAS_CHAPTER_ID', $val, 'number', $bFullJoin, $cOperationType);
				break;

			case 'LESSON_ID':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.ID', $val, 'number', $bFullJoin, $cOperationType);
				break;

			case 'CREATED_BY':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.' . $key, $val, 'number', $bFullJoin, $cOperationType);
				break;

			case 'NAME':
			case 'CODE':
			case 'LAUNCH':
			case 'DETAIL_TEXT':
			case 'DETAIL_TEXT_TYPE':
			case 'PREVIEW_TEXT':
			case 'PREVIEW_TEXT_TYPE':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.' . $key, $val, 'string', $bFullJoin, $cOperationType);
				break;

			case 'CREATED_USER_NAME':
				$arSqlSearch[] = CLearnHelper::FilterCreate($DB->Concat("'('", 'TU.LOGIN', "') '", 'TU.NAME', "' '", 'TU.LAST_NAME'),
					$val, 'string', $bFullJoin, $cOperationType);
				break;

			case 'KEYWORDS':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.' . $key, $val, 'string', $bFullJoin, $cOperationType);
				break;

			case 'ACTIVE':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.' . $key, $val, 'string_equal', $bFullJoin, $cOperationType);
				break;

			case 'TIMESTAMP_X':
			case 'DATE_CREATE':
				$arSqlSearch[] = CLearnHelper::FilterCreate('TL.' . $key, $val, 'date', $bFullJoin, $cOperationType);
				break;

			case 'SITE_ID':
				break;

			case 'CHECK_PERMISSIONS':
			case 'CHECK_PERMISSIONS_FOR_USER_ID':
			case 'ACCESS_OPERATIONS':
				// this is meta-fields, nothing to do with them here
			break;

			default:
				if (mb_substr($key, 0, 3) !== 'UF_')
					throw new LearnException ('EA_PARAMS: unknown field ' . $key, LearnException::EXC_ERR_ALL_PARAMS);
			break;
		}
	}

	return $arSqlSearch;
}