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