• Модуль: 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) == "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;
}