%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/fileman/classes/general/
Upload File :
Create Path :
Current File : //home/bitrix/www/bitrix/modules/fileman/classes/general/component_params_manager.php

<?
/**
 * @global CMain $APPLICATION
 * @global CUser $USER
 */

IncludeModuleLangFile(__FILE__);
class CComponentParamsManager
{
	private static
		$fileDialogs = array();

	public static function Init($config = array())
	{
		global $APPLICATION;

		$APPLICATION->AddHeadScript('/bitrix/js/fileman/comp_params_manager/component_params_manager.js');
		$APPLICATION->SetAdditionalCss('/bitrix/js/fileman/comp_params_manager/component_params_manager.css');

		if (!isset($config['requestUrl']))
		{
			$config['requestUrl'] = '/bitrix/admin/fileman_component_params.php';
		}

		if (!isset($config['id']))
		{
			$config['id'] = 'bx_comp_params_manager_'.substr(uniqid(mt_rand(), true), 0, 4);
		}

		$mess_lang = self::GetLangMessages();
		?>
		<script type="text/javascript">
			BX.message(<?=CUtil::PhpToJSObject($mess_lang, false);?>);
			if (window.BXComponentParamsManager)
			{
				window.oBXComponentParamsManager = new BXComponentParamsManager(<?=CUtil::PhpToJSObject($config)?>);
			}
			else
			{
				window.oBXComponentParamsManager = new top.BXComponentParamsManager(<?=CUtil::PhpToJSObject($config)?>);
			}
			top.oBXComponentParamsManager = window.oBXComponentParamsManager;
		</script>
		<?

		// For colorpicker
		$APPLICATION->IncludeComponent(
			"bitrix:main.colorpicker",
			"",
			Array("SHOW_BUTTON" => "N"),
			false
		);
	}

	public static function ProcessRequest()
	{
		if (isset($_REQUEST['component_params_manager']))
		{
			$reqId = intVal($_REQUEST['component_params_manager']);
			$result = self::GetComponentProperties(
				$_REQUEST['component_name'],
				$_REQUEST['component_template'],
				$_REQUEST['site_template'],
				$_REQUEST['current_values']
			);

			$templateMatch = false;
			for ($i = 0, $l = count($result['templates']); $i < $l; $i++)
			{
				if ($result['templates'][$i]['NAME'] == $_REQUEST['component_template'] || ($_REQUEST['component_template'] == '' && $result['templates'][$i]['NAME'] == '.default'))
				{
					$templateMatch = true;
					break;
				}
			}
			if (!$templateMatch && $l > 0)
			{
				$result = self::GetComponentProperties(
					$_REQUEST['component_name'],
					$result['templates'][0]['NAME'],
					$_REQUEST['site_template'],
					$_REQUEST['current_values']
				);
			}

			$result['description'] = CComponentUtil::GetComponentDescr($_REQUEST['component_name']);
			?>
			<script>
				window.__bxResult['<?= $reqId?>'] = <?=CUtil::PhpToJSObject($result)?>;
			</script>
			<?
			self::DisplayFileDialogsScripts();
		}
	}

	public static function GetComponentProperties($name = '', $template = '', $siteTemplate = '', $currentValues = array())
	{
		$template = (!$template || $template == '.default') ? '' : $template;
		$arTemplates = CComponentUtil::GetTemplatesList($name, $siteTemplate);

		$result = array(
			'templates' => array()
		);

		$arSiteTemplates = array(".default" => GetMessage("PAR_MAN_DEFAULT"));
		if(!empty($siteTemplate))
		{
			$dbst = CSiteTemplate::GetList(array(), array("ID" => $siteTemplate), array());
			while($siteTempl = $dbst->Fetch())
				$arSiteTemplates[$siteTempl['ID']] = $siteTempl['NAME'];
 		}

 		foreach($arTemplates as $k => $templ)
		{
			$showTemplateName = ($templ["TEMPLATE"] !== '' && $arSiteTemplates[$templ["TEMPLATE"]] <> '') ? 				$arSiteTemplates[$templ["TEMPLATE"]] : GetMessage("PAR_MAN_DEF_TEMPLATE");
			$arTemplates[$k]['DISPLAY_NAME'] = $templ['NAME'].' ('.$showTemplateName.')';
		}

		$arTemplateProps = array();
		if (is_array($arTemplates))
		{
			foreach ($arTemplates as $arTemplate)
			{
				$result['templates'][] = $arTemplate;
				$tName = (!$arTemplate['NAME'] || $arTemplate['NAME'] == '.default') ? '' : $arTemplate['NAME'];

				if ($tName == $template)
				{
					$arTemplateProps = CComponentUtil::GetTemplateProps($name, $arTemplate['NAME'], $siteTemplate, $currentValues);
				}
			}
		}

		$result['parameters'] = array();
		$arProps = CComponentUtil::GetComponentProps($name, $currentValues, $arTemplateProps);
		$result['tooltips'] = self::FetchHelp($name);

		if (!isset($arProps['GROUPS']) || !is_array($arProps['GROUPS']))
		{
			$arProps['GROUPS'] = array();
		}
		if (!isset($arProps['PARAMETERS']) || !is_array($arProps['PARAMETERS']))
		{
			$arProps['PARAMETERS'] = array();
		}

		$result['groups'] = array();
		foreach ($arProps['GROUPS'] as $k => $arGroup)
		{
			$arGroup['ID'] = $k;
			$result['groups'][] = $arGroup;
		}

		foreach ($arProps['PARAMETERS'] as $k => $arParam)
		{
			$arParam['ID'] = preg_replace("/[^a-zA-Z0-9_-]/is", "_", $k);
			if (!isset($arParam['PARENT']))
			{
				$arParam['PARENT'] = 'ADDITIONAL_SETTINGS';
			}
			$result['parameters'][] = $arParam;

			if ($arParam['TYPE'] == 'FILE')
			{
				self::$fileDialogs[] = array(
					'NAME' => $arParam['ID'],
					'TARGET' => isset($arParam['FD_TARGET']) ? $arParam['FD_TARGET'] : 'F',
					'EXT' => isset($arParam['FD_EXT']) ? $arParam['FD_EXT'] : '',
					'UPLOAD' => isset($arParam['FD_UPLOAD']) && $arParam['FD_UPLOAD'] && $arParam['FD_TARGET'] == 'F',
					'USE_ML' => isset($arParam['FD_USE_MEDIALIB']) && $arParam['FD_USE_MEDIALIB'],
					'ONLY_ML' => isset($arParam['FD_USE_ONLY_MEDIALIB']) && $arParam['FD_USE_ONLY_MEDIALIB'],
					'ML_TYPES' => isset($arParam['FD_MEDIALIB_TYPES']) ? $arParam['FD_MEDIALIB_TYPES'] : false
				);
			}

			// TOOLTIPS FROM .parameters langs
			if (!isset($result['tooltips'][$arParam['ID'].'_TIP']))
			{
				$tip = GetMessage($arParam['ID'].'_TIP');
				if ($tip)
				{
					$result['tooltips'][$arParam['ID'].'_TIP'] = $tip;
				}
			}
		}

		return $result;
	}

	public static function FetchHelp($componentName, $lang = false)
	{
		$cName = str_replace("..", "", $componentName);
		$cName = str_replace(":", "/", $cName);
		$lang = $lang ? preg_replace("/[^a-zA-Z0-9_]/is", "", $lang) : LANGUAGE_ID;
		$filePath = "/bitrix/components/".$cName;
		$fileName = "help/.tooltips.php";
		$arTooltips = array();

		$fname = $_SERVER["DOCUMENT_ROOT"].$filePath."/lang/".LangSubst($lang)."/".$fileName;
		if ($lang != "en" && $lang != "ru" && file_exists($fname))
		{
			$arTooltips = __IncludeLang($fname, true, true);
		}

		$fname = $_SERVER["DOCUMENT_ROOT"].$filePath."/lang/".$lang."/".$fileName;
		if (file_exists($fname))
		{
			$arTooltips = __IncludeLang($fname, true, true);
		}

		return $arTooltips;
	}

	public static function GetLangMessages()
	{
		$messages = array(
			'CompParManSelectOther' => GetMessage('PAR_MAN_SELECT_OTHER'),
			'CompParManNoValue' => GetMessage('PAR_MAN_SELECT_NO_VALUE'),
			'CompParManSearch' => GetMessage('PAR_MAN_SEARCH'),
			'NoSearchResults' => GetMessage('PAR_MAN_NO_SEARCH_RESULTS'),
			'TemplateGroup' => GetMessage('PAR_MAN_TEMPLATE_GROUP'),
			'DefTemplate' => GetMessage('PAR_MAN_DEF_TEMPLATE')
		);
		return $messages;
	}

	public static function DisplayFileDialogsScripts()
	{
		for($i = 0, $l = count(self::$fileDialogs); $i < $l; $i++)
		{
			$fd = self::$fileDialogs[$i];
			if ($fd['USE_ML'])
			{
				$MLRes = CMedialib::ShowBrowseButton(
					array(
						'mode' => $fd['ONLY_ML'] ? 'medialib' : 'select',
						'value' => '...',
						'event' => "BX_FD_".$fd['NAME'],
						'id' => "bx_fd_input_".strtolower($fd['NAME']),
						'MedialibConfig' => array(
							"event" => "bx_ml_event_".$fd['NAME'],
							"arResultDest" => Array("FUNCTION_NAME" => "BX_FD_ONRESULT_".$fd['NAME']),
							"types" => $fd['ML_TYPES']
						),
						'bReturnResult' => true
					)
				);
				?><script>window._bxMlBrowseButton_<?= strtolower($fd['NAME'])?> = '<?= CUtil::JSEscape($MLRes)?>';</script><?
			}

			CAdminFileDialog::ShowScript(Array
			(
				"event" => "BX_FD_".$fd['NAME'],
				"arResultDest" => Array("FUNCTION_NAME" => "BX_FD_ONRESULT_".$fd['NAME']),
				"arPath" => Array(),
				"select" => $fd['TARGET'], // F - file only, D - folder only, DF - files & dirs
				"operation" => 'O',
				"showUploadTab" => $fd['UPLOAD'],
				"showAddToMenuTab" => false,
				"fileFilter" => $fd['EXT'],
				"allowAllFiles" => true,
				"SaveConfig" => true
			));
		}
	}
}
?>

Zerion Mini Shell 1.0