- Модуль: fileman
- Путь к файлу: ~/bitrix/modules/fileman/classes/general/editor_utils.php
- Класс: CEditorUtils
- Вызов: CEditorUtils::_RenderAllComponents
static function _RenderAllComponents($arParams, $bLPA)
{
global $APPLICATION, $USER;
$s = '';
$arPHP = PHPParser::ParseFile($arParams['source']);
$l = count($arPHP);
if ($l > 0)
{
$new_source = '';
$end = 0;
$comp_count = 0;
ob_start();
for ($n = 0; $n<$l; $n++)
{
//Trim php tags
$src = $arPHP[$n][2];
if (mb_substr($src, 0, 5) == ""."php")
$src = mb_substr($src, 5);
else
$src = mb_substr($src, 2);
$src = mb_substr($src, 0, -2);
$comp2_begin = '$APPLICATION->INCLUDECOMPONENT(';
if (mb_strtoupper(mb_substr($src, 0, mb_strlen($comp2_begin))) != $comp2_begin)
continue;
$arRes = PHPParser::CheckForComponent2($arPHP[$n][2]);
if ($arRes)
{
$comp_name = CMain::_ReplaceNonLatin($arRes['COMPONENT_NAME']);
$template_name = CMain::_ReplaceNonLatin($arRes['TEMPLATE_NAME']);
$arParams = $arRes['PARAMS'];
$arParams['BX_EDITOR_RENDER_MODE'] = 'Y';
if ($bLPA)
{
$arPHPparams = Array();
CMain::LPAComponentChecker($arParams, $arPHPparams);
$len = count($arPHPparams);
}
$br = "rn";
$code = '$APPLICATION->IncludeComponent('.$br.
"t".'"'.$comp_name.'",'.$br.
"t".'"'.$template_name.'",'.$br;
// If exist at least one parameter with php code inside
if (count($arParams) > 0)
{
// Get array with description of component params
$arCompParams = CComponentUtil::GetComponentProps($comp_name);
$arTemplParams = CComponentUtil::GetTemplateProps($comp_name,$template_name,$template);
$arParameters = array();
if (isset($arCompParams["PARAMETERS"]) && is_array($arCompParams["PARAMETERS"]))
$arParameters = $arParameters + $arCompParams["PARAMETERS"];
if (is_array($arTemplParams))
$arParameters = $arParameters + $arTemplParams;
if ($bLPA)
{
// Replace values from 'DEFAULT'
for ($e = 0; $e < $len; $e++)
{
$par_name = $arPHPparams[$e];
$arParams[$par_name] = isset($arParameters[$par_name]['DEFAULT']) ? $arParameters[$par_name]['DEFAULT'] : '';
}
}
foreach($arParams as $key => $val)
{
if ($key != addslashes($key))
unset($arParams[$key]);
else
$arParams[$key] = addslashes($val);
}
//ReturnPHPStr
$params = PHPParser::ReturnPHPStr2($arParams, $arParameters);
$code .= "t".'Array('.$br."t".$params.$br."t".')';
}
else
{
$code .= "t".'Array()';
}
$parent_comp = CMain::_ReplaceNonLatin($arRes['PARENT_COMP']);
$arExParams_ = $arRes['FUNCTION_PARAMS'];
$bEx = isset($arExParams_) && is_array($arExParams_) && count($arExParams_) > 0;
if (!$parent_comp || mb_strtolower($parent_comp) == 'false')
$parent_comp = false;
if ($parent_comp)
{
if ($parent_comp == 'true' || intval($parent_comp) == $parent_comp)
$code .= ','.$br."t".$parent_comp;
else
$code .= ','.$br."t"".$parent_comp.'"';
}
if ($bEx)
{
if (!$parent_comp)
$code .= ','.$br."tfalse";
$arExParams = array();
foreach ($arExParams_ as $k => $v)
{
$k = CMain::_ReplaceNonLatin($k);
$v = CMain::_ReplaceNonLatin($v);
if ($k <> '' && $v <> '')
$arExParams[$k] = $v;
}
$exParams = PHPParser::ReturnPHPStr2($arExParams);
$code .= ','.$br."tArray(".$exParams.')';
}
$code .= $br.');';
echo '#BX_RENDERED_COMPONENT_'.$comp_count.'#';
eval($code);
echo '#BX_RENDERED_COMPONENT_'.$comp_count.'#';
}
$comp_count++;
}
$s = ob_get_contents();
ob_end_clean();
}
return $s;
}