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