• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/ilearngraphnode.php
  • Класс: CLearnGraphNode
  • Вызов: CLearnGraphNode::_CheckAndCanonizeFields
static function _CheckAndCanonizeFields ($arFieldsMap, $arFields, $access_level, $forUpdate = false)
{
	if ( ! (is_int($access_level) && ($access_level >= 0)) )
	{
		throw new LearnException ('EA_LOGIC: wrong access level',
			LearnException::EXC_ERR_GN_CHECK_PARAMS);
	}

	// Check params
	$arFieldsNames = array_keys($arFields);
	foreach ($arFieldsNames as $fieldName)
	{
		// Skip checking user fields
		if (mb_substr($fieldName, 0, 3) === 'UF_')
			continue;

		// Is field exists in DB?
		if ( ! array_key_exists ($fieldName, $arFieldsMap) )
		{
			throw new LearnException ('EA_PARAMS: ' . $fieldName,
				LearnException::EXC_ERR_GN_CHECK_PARAMS);
		}

		// Is access_level allowed by logic?
		if (($arFieldsMap[$fieldName]['access'] & $access_level) !== $access_level)
		{
			throw new LearnException ('EA_LOGIC: ACCESS TO FIELD "' . $fieldName . '" logically prohibited.',
				LearnException::EXC_ERR_GN_CHECK_PARAMS);
		}
	}

	// PREVIEW_TEXT_TYPE
	if ( ( ! $forUpdate ) && ( ! array_key_exists('PREVIEW_TEXT_TYPE', $arFields) ) )
		$arFields['PREVIEW_TEXT_TYPE'] = 'text';	// by default, for backward compatibility

	if ( ( ! $forUpdate ) || array_key_exists('PREVIEW_TEXT_TYPE', $arFields) )
	{
		if ( ! in_array ($arFields['PREVIEW_TEXT_TYPE'], array('text', 'html'), true) )
			throw new LearnException ('EA_PARAMS: PREVIEW_TEXT_TYPE', LearnException::EXC_ERR_GN_CHECK_PARAMS);
	}

	// DETAIL_TEXT_TYPE
	if ( ( ! $forUpdate ) && ( ! array_key_exists('DETAIL_TEXT_TYPE', $arFields) ) )
		$arFields['DETAIL_TEXT_TYPE'] = 'text';		// by default, for backward compatibility

	if ( ( ! $forUpdate ) || array_key_exists('DETAIL_TEXT_TYPE', $arFields) )
	{
		if ( ! in_array ($arFields['DETAIL_TEXT_TYPE'], array('text', 'html', 'file'), true) )
			throw new LearnException ('EA_PARAMS: DETAIL_TEXT_TYPE', LearnException::EXC_ERR_GN_CHECK_PARAMS);
	}

	// KEYWORDS
	if ( ! $forUpdate )
	{
		if (
			( ! array_key_exists('KEYWORDS', $arFields) )
			|| ($arFields['KEYWORDS'] === NULL)
		)
		{
			$arFields['KEYWORDS'] = '';
		}
	}
	else	// for update
	{
		if (
			array_key_exists('KEYWORDS', $arFields) 
			&& ($arFields['KEYWORDS'] === NULL)
		)
		{
			$arFields['KEYWORDS'] = '';
		}
	}

	// ACTIVE
	if (array_key_exists('ACTIVE', $arFields))
	{
		// canonize
		if ( in_array($arFields['ACTIVE'], array(true, false), true) )
		{
			if ($arFields['ACTIVE'])
				$arFields['ACTIVE'] = 'Y';
			else
				$arFields['ACTIVE'] = 'N';
		}
	}
	else
	{
		if ( ! $forUpdate )
			$arFields['ACTIVE'] = 'Y';	// by default, for backward compatibility
	}

	// ACTIVE - check admitted region
	if ( ( ! $forUpdate ) || array_key_exists('ACTIVE', $arFields) )
	{
		if ( ! in_array($arFields['ACTIVE'], array('Y', 'N'), true) )
		{
			throw new LearnException ('EA_PARAMS: ACTIVE is out of range',
				LearnException::EXC_ERR_GN_CHECK_PARAMS);
		}
	}

	// PREVIEW_PICTURE
	if (array_key_exists('PREVIEW_PICTURE', $arFields))
	{
		// remove this field, if nothing to do
		if (!is_array($arFields['PREVIEW_PICTURE']))
		{
			unset($arFields['PREVIEW_PICTURE']);
		}
		else if (
			(!array_key_exists('name', $arFields['PREVIEW_PICTURE']) || $arFields['PREVIEW_PICTURE']['name'] == '')
			&&
			(!array_key_exists('del', $arFields['PREVIEW_PICTURE']) || $arFields['PREVIEW_PICTURE']['del'] == '')
			&&
			(!isset($arFields['PREVIEW_PICTURE']['description']) || $arFields['PREVIEW_PICTURE']['description'] == '')
		)
		{
			unset($arFields['PREVIEW_PICTURE']);
		}
		else
		{
			// check structure
			$check = array_key_exists('name', $arFields['PREVIEW_PICTURE'])
				&& array_key_exists('size', $arFields['PREVIEW_PICTURE'])
				&& array_key_exists('tmp_name', $arFields['PREVIEW_PICTURE'])
				&& array_key_exists('type', $arFields['PREVIEW_PICTURE'])
				&& ( ( ! array_key_exists('del', $arFields['PREVIEW_PICTURE']) )
					|| in_array($arFields['PREVIEW_PICTURE']['del'], array('Y', 'N', NULL), true)
					);

			if ( ! $check )
			{
				throw new LearnException ('EA_PARAMS: 
' . var_export($arFields['PREVIEW_PICTURE'], true) 
					. '
', LearnException::EXC_ERR_GN_CHECK_PARAMS); } $arFields['PREVIEW_PICTURE']['MODULE_ID'] = CLearnHelper::MODULE_ID; // learning if ($arFields['PREVIEW_PICTURE']['del'] === NULL) $arFields['PREVIEW_PICTURE']['del'] = 'N'; } } // DETAIL_PICTURE if (array_key_exists('DETAIL_PICTURE', $arFields)) { // remove this field, if nothing to do if (!is_array($arFields['DETAIL_PICTURE'])) { unset($arFields['DETAIL_PICTURE']); } elseif ( (!array_key_exists('name', $arFields['DETAIL_PICTURE']) || $arFields['DETAIL_PICTURE']['name'] == '') && (!array_key_exists('del', $arFields['DETAIL_PICTURE']) || $arFields['DETAIL_PICTURE']['del'] == '') && (!isset($arFields['DETAIL_PICTURE']['description']) || $arFields['DETAIL_PICTURE']['description'] == '') ) { unset($arFields['DETAIL_PICTURE']); } else { // check structure $check = array_key_exists('name', $arFields['DETAIL_PICTURE']) && array_key_exists('size', $arFields['DETAIL_PICTURE']) && array_key_exists('tmp_name', $arFields['DETAIL_PICTURE']) && array_key_exists('type', $arFields['DETAIL_PICTURE']) && ( ( ! array_key_exists('del', $arFields['DETAIL_PICTURE']) ) || in_array($arFields['DETAIL_PICTURE']['del'], array('Y', 'N', NULL), true) ); if ( ! $check ) { throw new LearnException ('EA_PARAMS:
' . var_export($arFields['DETAIL_PICTURE'], true) 
					. '
', LearnException::EXC_ERR_GN_CHECK_PARAMS); } $arFields['DETAIL_PICTURE']['MODULE_ID'] = CLearnHelper::MODULE_ID; // learning if ($arFields['DETAIL_PICTURE']['del'] === NULL) $arFields['DETAIL_PICTURE']['del'] = 'N'; } } return ($arFields); }