Пример #1
0
    function ShowHTMLEditControl($name, $content, $arParams = array())
    {
        global $USER;
        // We have to avoid of showing HTML-editor with probably unsecure content when loosing the session [mantis:#0007986]
        if ($_SERVER["REQUEST_METHOD"] == "POST" && !check_bitrix_sessid()) {
            return;
        }
        CUtil::InitJSCore(array('window', 'ajax'));
        $relPath = isset($arParams["path"]) ? $arParams["path"] : "/";
        $site = isset($arParams["site"]) ? $arParams["site"] : "";
        $__path = Rel2Abs("/", $relPath);
        $site = CFileMan::__CheckSite($site);
        $name = preg_replace("/[^a-zA-Z0-9_:\\.]/is", "", $name);
        if (!isset($arParams["limit_php_access"])) {
            $arParams["limit_php_access"] = false;
        }
        $arParams["light_mode"] = defined('BX_PUBLIC_MODE') && BX_PUBLIC_MODE == 1 || isset($arParams["light_mode"]) && $arParams["light_mode"] == 'Y';
        $io = CBXVirtualIo::GetInstance();
        $direction_rtl = false;
        if ($site) {
            $DOC_ROOT = CSite::GetSiteDocRoot($site);
            $abs_path = $DOC_ROOT . $__path;
            if ($io->FileExists($abs_path)) {
                $relPath = substr($relPath, 0, strrpos($relPath, "/"));
                if ($relPath == "") {
                    $relPath = "/";
                }
            }
        }
        static $bFirstUsed;
        $template = $arParams["templateID"];
        if (!isset($template) && defined('SITE_TEMPLATE_ID')) {
            $template = SITE_TEMPLATE_ID;
        }
        if (!isset($template) && isset($_GET['siteTemplateId'])) {
            $template = $_GET['siteTemplateId'];
        }
        if (!isset($template) && isset($site)) {
            $dbSiteRes = CSite::GetTemplateList($site);
            $SITE_TEMPLATE = array();
            while ($arSiteRes = $dbSiteRes->Fetch()) {
                if ($arSiteRes['CONDITION'] == "" || !isset($template)) {
                    $template = $arSiteRes['TEMPLATE'];
                }
            }
        }
        if (isset($arParams['use_editor_3'])) {
            $useEditor3 = $arParams['use_editor_3'] == "Y";
        } else {
            $useEditor3 = COption::GetOptionString('fileman', "use_editor_3", "Y") == "Y";
        }
        if ($useEditor3) {
            $Editor = new CHTMLEditor();
            $Editor->Show(array('name' => $name, 'id' => $name, 'siteId' => $arParams["site"], 'width' => $arParams["width"], 'height' => $arParams["height"], 'content' => $content, 'bAllowPhp' => !$arParams["bWithoutPHP"] && $USER->CanDoOperation('edit_php'), "limitPhpAccess" => $arParams["limit_php_access"], "display" => $arParams['bDisplay'], "componentFilter" => isset($arParams['componentFilter']) ? $arParams['componentFilter'] : false, "setFocusAfterShow" => isset($arParams['setFocusAfterShow']) ? $arParams['setFocusAfterShow'] : true, "relPath" => $relPath, "templateId" => $template));
            return;
        }
        //Taskbars
        $arTaskbars = isset($arParams["arTaskbars"]) ? $arParams["arTaskbars"] : array();
        //Toolbars
        $arToolbars = isset($arParams["arToolbars"]) ? $arParams["arToolbars"] : false;
        // Toolbar config
        $arParams["toolbarConfig"] = is_array($arParams["toolbarConfig"]) ? $arParams["toolbarConfig"] : false;
        $arParams["use_advanced_php_parser"] = COption::GetOptionString("fileman", "use_advanced_php_parser", "Y");
        $arParams["ar_entities"] = COption::GetOptionString("fileman", "ar_entities", 'umlya,greek,other');
        if ($arParams["ar_entities"] == 'none') {
            $arParams["ar_entities"] = '';
        }
        if (!isset($arParams["usePspell"])) {
            $arParams["usePspell"] = COption::GetOptionString("fileman", "use_pspell", "N");
        }
        if (!isset($arParams["useCustomSpell"])) {
            $arParams["useCustomSpell"] = COption::GetOptionString("fileman", "use_custom_spell", "Y");
        }
        $arParams['allowRenderComp2'] = COption::GetOptionString('fileman', "allow_render_components", "N") == 'Y';
        $arParams['renderComponents'] = $arParams['allowRenderComp2'] && CUserOptions::GetOption('fileman', "render_components", "Y") == 'Y';
        $lca = COption::GetOptionString("fileman", "use_lca", "N");
        $styleList_render_style = COption::GetOptionString("fileman", "render_styles_in_classlist", "Y") == 'Y' ? 'true' : 'false';
        $arAdditionalParams = isset($arParams["arAdditionalParams"]) ? $arParams["arAdditionalParams"] : array();
        $arResult = CFileman::GetAllTemplateParams($template, $site, $arParams["bWithoutPHP"] != true, $arAdditionalParams);
        $arParams["TEMPLATE"] = $arResult;
        if ($bUseOnlyDefinedStyles && !is_set($arResult, "STYLES_TITLE")) {
            $bUseOnlyDefinedStyles = false;
        }
        $arParams["body_class"] = COption::GetOptionString("fileman", "editor_body_class", "");
        $arParams["body_id"] = COption::GetOptionString("fileman", "editor_body_id", "");
        ?>
		<script bxrunfirst="true">
			var relPath = "<?php 
        echo CUtil::JSEscape($relPath);
        ?>
";
			var <?php 
        echo 'ar_' . $name . '_taskbars';
        ?>
 = {};
			<?php 
        for ($k = 0, $l = count($arTaskbars); $k < $l; $k++) {
            echo 'ar_' . $name . '_taskbars["' . $arTaskbars[$k] . '"] = true;';
        }
        if ($arToolbars !== false) {
            echo 'var  ar_' . $name . '_toolbars = {};';
            for ($k = 0, $l = count($arToolbars); $k < $l; $k++) {
                echo 'ar_' . $name . '_toolbars["' . $arToolbars[$k] . '"] = true;';
            }
        } else {
            echo 'var  ar_' . $name . '_toolbars = false;';
        }
        ?>

			window.ar_<?php 
        echo $name;
        ?>
_config = <?php 
        echo CUtil::PhpToJSObject($arParams);
        ?>
; // editor-config
		</script>
		<?php 
        $str_taskbars = "";
        CFileman::GetHTMLEditorSettings($name, $arParams["light_mode"], $arTaskbars, $str_taskbars);
        $str_taskbars .= '_' . CFileman::GetVersion();
        if (!$bFirstUsed) {
            $arTemplates = array(array('value' => '.default', 'name' => GetMessage("FILEMAN_DEFTEMPL")));
            $db_site_templates = CSiteTemplate::GetList(array(), array(), array());
            while ($ar_site_templates = $db_site_templates->Fetch()) {
                $arTemplates[] = array('value' => $ar_site_templates['ID'], 'name' => $ar_site_templates['NAME']);
            }
            ?>
			<script bxrunfirst="true">
				var
					arBXTemplates = <?php 
            echo CUtil::PhpToJSObject($arTemplates);
            ?>
,
					BXSite = "<?php 
            echo CUtil::JSEscape($site);
            ?>
",
					BXLang = "<?php 
            echo CUtil::JSEscape(LANGUAGE_ID);
            ?>
",
					styleList_render_style = <?php 
            echo $styleList_render_style;
            ?>
,
					limit_php_access = <?php 
            echo $arParams["limit_php_access"] ? 'true' : 'false';
            ?>
,
					lca = <?php 
            echo $lca == 'Y' ? 'true' : 'false';
            ?>
,
					lightMode = <?php 
            echo $arParams["light_mode"] ? 'true' : 'false';
            ?>
,
					BX_PERSONAL_ROOT = "<?php 
            echo BX_PERSONAL_ROOT;
            ?>
";

				window.limit_php_access = top.limit_php_access = limit_php_access;
				window.lightMode = top.lightMode = lightMode;
				window.lca = top.lca = lca;
				window.BXLang = top.BXLang = BXLang;
				window.BXSite = top.BXSite = BXSite;
				window.BX_PERSONAL_ROOT = top.BX_PERSONAL_ROOT = BX_PERSONAL_ROOT;
			</script>
			<?php 
            $arJS = array();
            $arCSS = array();
            $events = GetModuleEvents("fileman", "OnBeforeHTMLEditorScriptsGet");
            while ($arEvent = $events->Fetch()) {
                $tmp = ExecuteModuleEventEx($arEvent, array($name, $arParams));
                if (!is_array($tmp)) {
                    continue;
                }
                if (is_array($tmp['JS'])) {
                    $arJS = array_merge($arJS, $tmp['JS']);
                }
                if (is_array($tmp['CSS'])) {
                    $arCSS = array_merge($arCSS, $tmp['CSS']);
                }
            }
            $arr = array();
            // Additional JS files from event OnBeforeHtmlEditorScriptGet
            for ($i = 0, $c = count($arJS); $i < $c; $i++) {
                $arJS[$i] = preg_replace("/[^a-zA-Z0-9_:\\.]/is", "", $arJS[$i]);
                if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/admin/htmleditor2/' . $arJS[$i])) {
                    $arr[] = $arJS[$i];
                }
            }
            ?>
			<script type="text/javascript" src="/bitrix/admin/fileman_js.php?lang=<?php 
            echo LANGUAGE_ID;
            ?>
&v=<?php 
            echo @filemtime($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/fileman/lang/' . LANGUAGE_ID . '/admin/fileman_js.php');
            ?>
"></script>
			<script type="text/javascript" src="/bitrix/admin/fileman_common_js.php?s=<?php 
            echo $str_taskbars;
            ?>
"></script>
			<?php 
            for ($i = 0, $l = count($arr); $i < $l; $i++) {
                $script_filename = $arr[$i];
                ?>
<script type="text/javascript" src="/bitrix/admin/htmleditor2/<?php 
                echo $script_filename;
                ?>
?v=<?php 
                echo @filemtime($_SERVER['DOCUMENT_ROOT'] . '/bitrix/admin/htmleditor2/' . $script_filename);
                ?>
"></script><?php 
            }
            ?>
			<script type="text/javascript" src="/bitrix/js/main/popup_menu.js?v=<?php 
            echo @filemtime($_SERVER['DOCUMENT_ROOT'] . '/bitrix/js/main/popup_menu.js');
            ?>
"></script>
			<?php 
            for ($i = 0, $l = count($arCSS); $i < $l; $i++) {
                $arCSS[$i] = preg_replace("/[^a-zA-Z0-9_:\\.]/is", "", $arCSS[$i]);
                if (!file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/admin/htmleditor2/' . $arCSS[$i])) {
                    continue;
                }
                ?>
<link rel="stylesheet" type="text/css" href="/bitrix/admin/htmleditor2/<?php 
                echo $arCSS[$i];
                ?>
?v=<?php 
                echo @filemtime($_SERVER['DOCUMENT_ROOT'] . '/bitrix/admin/htmleditor2/' . $arCSS[$i]);
                ?>
"/><?php 
            }
            $db_events = GetModuleEvents("fileman", "OnIncludeHTMLEditorScript");
            while ($arEvent = $db_events->Fetch()) {
                ExecuteModuleEventEx($arEvent);
            }
            $bFirstUsed = true;
        }
        ?>
		<div class="bxedmain-cont" id="<?php 
        echo $name . '_object';
        ?>
"><table id="<?php 
        echo $name;
        ?>
_pFrame" class="bxedmainframe dim100x100" style="display:none;">
				<tr style="height: 1%;"><td id="<?php 
        echo $name;
        ?>
_toolBarSet0" colspan="2" style="width: 100%; display: none; border-bottom: 1px solid #808080 !important;"></td></tr>
				<tr>
					<td id="<?php 
        echo $name;
        ?>
_toolBarSet1" style="width:0%; display: none; border-right: 1px solid #808080 !important;"></td>
					<td vAlign="top" style="width: 4000px; padding: 0!important;">
						<table class="dim100x100">
							<tr>
								<td class="bx-ceditor" id="<?php 
        echo $name;
        ?>
_cEditor"></td>
								<td id="<?php 
        echo $name;
        ?>
_taskBarSet2" class="bxedtaskbarset" style="width:0%; display: none;">
									<table>
										<tr><td class="bx-move-col-v" rowSpan="3"><img src="/bitrix/images/1.gif" /></td><td style="height:26px;"></td></tr>
										<tr><td style="vertical-align: top;"></td></tr>
										<tr><td class="bx-taskbar-tabs"></td></tr>
									</table>
								</td>
							</tr>
							<tr style="height:0%; display: none;">
								<td id="<?php 
        echo $name;
        ?>
_taskBarSet3" colspan="2">
									<table>
										<tr><td class="bx-move-col-h"><img src="/bitrix/images/1.gif" /></td></tr>
										<tr><td style="height:26px;"></td></tr>
										<tr><td style="vertical-align: top; background: #F4F4F4 none !important;"></td></tr>
										<tr><td class="bx-taskbar-tabs"></td></tr>
									</table>
								</td>
							</tr>
						</table>
					</td>
				</tr>
				<tr id="bx-css-tt"><td id="<?php 
        echo $name;
        ?>
_taskBarTabs" colspan="2" class="tasktabcell"></td></tr>
			</table>
		</div>
		<script>
			BX.loadCSS('/bitrix/admin/htmleditor2/editor.css');
			var bEd = BX("bxed_<?php 
        echo $name;
        ?>
_editor");
			if (bEd && !bEd.checked)
				BX("<?php 
        echo $name;
        ?>
_object").style.display = "none";
		</script>
		<?php 
        if (!$arParams["bFromTextarea"]) {
            echo '<input type="hidden" name="' . $name . '" id="bxed_' . $name . '" value="' . htmlspecialcharsbx($content) . '">';
        }
        if ($arParams["bDisplay"] !== false) {
            setEditorEventHandlers($name);
            ?>
			<script>
				BX.ready(function(){
					BX.showWait();
					BX("bxed_<?php 
            echo $name;
            ?>
").pMainObj  = new BXHTMLEditor("<?php 
            echo $name;
            ?>
");
				});
			</script>
		<?php 
        }
    }