1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
fileman.php
См. документацию.
1<?php
2
3/*
4##############################################
5# Bitrix: SiteManager #
6# Copyright (c) 2002-2005 Bitrix #
7# https://www.bitrixsoft.com #
8# mailto:admin@bitrixsoft.com #
9##############################################
10*/
11IncludeModuleLangFile(__FILE__);
12define("DEBUG_FILE_MAN", false);
13if(!defined("CACHED_stickers_count")) define("CACHED_stickers_count", 36000000);
14
15$GLOBALS['arFilemanPredifinedFileTypesR'] = array();
16$GLOBALS['arFilemanPredifinedFileTypes'] = array(
17 "css" => array(
18 "exts" => array("css"),
19 "gtype" => "text",
20 "name" => GetMessage("MAIN_BFSD_FTYPE_CSS")
21 ),
22 "htaccess" => array(
23 "exts" => array("htaccess"),
24 "gtype" => "text",
25 "name" => GetMessage("MAIN_BFSD_FTYPE_SYS")
26 ),
27 "html" => array(
28 "exts" => array("html", "htm", "shtml", "shtm"),
29 "gtype" => "text",
30 "name" => GetMessage("MAIN_BFSD_FTYPE_HTML")
31 ),
32 "png" => array(
33 "exts" => array("png"),
34 "gtype" => "image",
35 "name" => GetMessage("MAIN_BFSD_FTYPE_PNG")
36 ),
37 "gif" => array(
38 "exts" => array("gif"),
39 "gtype" => "image",
40 "name" => GetMessage("MAIN_BFSD_FTYPE_GIF")
41 ),
42 "jpeg" => array(
43 "exts" => array("jpeg", "jpg", "jpe"),
44 "gtype" => "image",
45 "name" => GetMessage("MAIN_BFSD_FTYPE_JPG")
46 ),
47 "js" => array(
48 "exts" => array("js"),
49 "gtype" => "text",
50 "name" => "JavaScript"
51 ),
52 "php" => array(
53 "exts" => array("php", "php3", "php4", "php5", "php6", "phtml"),
54 "gtype" => "text",
55 "name" => GetMessage("MAIN_BFSD_FTYPE_PHP")
56 ),
57 "txt" => array(
58 "exts" => array("txt", "sql"),
59 "gtype" => "text",
60 "name" => GetMessage("MAIN_BFSD_FTYPE_TXT")
61 ),
62 "xml" => array(
63 "exts" => array("xml", "xsl"),
64 "gtype" => "text",
65 "name" => GetMessage("MAIN_BFSD_FTYPE_XML")
66 ),
67 "csv" => array(
68 "exts" => array("csv"),
69 "gtype" => "text",
70 "name" => GetMessage("MAIN_BFSD_FTYPE_CSV")
71 ),
72 "flash" => array(
73 "exts" => array("fla", "swf"),
74 "gtype" => "file",
75 "name" => GetMessage("MAIN_BFSD_FTYPE_SWF")
76 ),
77 "archive" => array(
79 "gtype" => "file",
80 "name" => GetMessage("MAIN_BFSD_FTYPE_ARC")
81 ),
82 "file" => array(
83 "exts" => array(),
84 "gtype" => "file",
85 "name" => GetMessage("MAIN_BFSD_FTYPE_NA")
86 )
87);
88
89// AddEventHandler("fileman", "OnBeforeHTMLEditorScriptsGet", "bitrix_tabs");
90// function bitrix_tabs($editorName, $arEditorParams){return array("JS" => array('bitrix_tabs.js'));}
91
93{
94 public static function OnPanelCreate()
95 {
96 global $APPLICATION;
97
98 if($APPLICATION->GetGroupRight("fileman")<="D")
99 return;
100
101 $requestUri = $_SERVER['REQUEST_URI'];
102
103 $cur_page = $APPLICATION->GetCurPage(true);
104 $cur_dir = $APPLICATION->GetCurDir();
105
106 //access to curent page
107 $page_permission = $APPLICATION->GetFileAccessPermission($cur_page);
108
109 // access to current directory
110 $sect_permission = $APPLICATION->GetFileAccessPermission($cur_dir);
111
112 $main_sort = 100;
113
114 $full_src = "";
115 $default_edit = COption::GetOptionString("fileman", "default_edit");
116 if($default_edit == "php")
117 {
118 $editor_type = "file";
119 $full_src = "&full_src=Y";
120 }
121 elseif($default_edit == "text")
122 $editor_type = "file";
123 else
124 $editor_type = "html";
125
126
127 $aMenuItems = array(
128 'create' => array(),
129 'create_section' => array(),
130 'edit' => array(),
131 'edit_section' => array()
132 );
133
134 if ($sect_permission>="W")
135 {
136 // New page
137 $href = "/bitrix/admin/fileman_".$editor_type."_edit.php?lang=".LANGUAGE_ID."&site=".SITE_ID."&path=".UrlEncode($APPLICATION->GetCurDir())."&new=Y&templateID=".urlencode(SITE_TEMPLATE_ID)."&back_url=".UrlEncode($requestUri);
138 $APPLICATION->AddPanelButtonMenu('create', array("SEPARATOR"=>true, "SORT"=>99));
139 $APPLICATION->AddPanelButtonMenu('create', array(
140 "TEXT" => GetMessage("fileman_panel_admin"),
141 "TITLE"=> GetMessage("fileman_panel_new_page_title"),
142 "ACTION" => "jsUtils.Redirect([], '".CUtil::JSEscape($href)."')",
143 "SORT" => 100
144 ));
145
146 //New folder
147 $href = "/bitrix/admin/fileman_newfolder.php?lang=".LANGUAGE_ID."&site=".SITE_ID."&path=". UrlEncode($APPLICATION->GetCurDir())."&back_url=".UrlEncode($requestUri);
148 $APPLICATION->AddPanelButtonMenu('create_section', array("SEPARATOR"=>true, "SORT"=>99));
149 $APPLICATION->AddPanelButtonMenu('create_section', array(
150 "TEXT" => GetMessage("fileman_panel_admin"),
151 "TITLE"=> GetMessage("fileman_panel_new_folder_title"),
152 "ACTION" => "jsUtils.Redirect([], '".CUtil::JSEscape($href)."')",
153 ));
154 }
155
156 // Edit page
157 if ($page_permission>="W")
158 {
159 $href = "/bitrix/admin/fileman_".$editor_type."_edit.php?lang=".LANGUAGE_ID."&site=".SITE_ID."&templateID=".urlencode(SITE_TEMPLATE_ID).$full_src."&path=".UrlEncode(isset($_SERVER["REAL_FILE_PATH"]) && $_SERVER["REAL_FILE_PATH"]<>""? $_SERVER["REAL_FILE_PATH"] : $cur_page)."&back_url=".UrlEncode($requestUri);
160 $APPLICATION->AddPanelButtonMenu('edit', array("SEPARATOR"=>true, "SORT"=>99));
161 $APPLICATION->AddPanelButtonMenu('edit', array(
162 "TEXT" => GetMessage("fileman_panel_admin"),
163 "TITLE"=> GetMessage("fileman_panel_edit_title"),
164 "ACTION" => "jsUtils.Redirect([], '".CUtil::JSEscape($href)."')",
165 "SORT" => 100
166 ));
167 }
168
169 // Folder properties
170 $alt = GetMessage("FILEMAN_FOLDER_PROPS");
171 if ($sect_permission>="W")
172 {
173 $href = "/bitrix/admin/fileman_folder.php?lang=".LANGUAGE_ID."&site=".SITE_ID."&path=".UrlEncode($APPLICATION->GetCurDir())."&back_url=".UrlEncode($requestUri);
174 $APPLICATION->AddPanelButtonMenu('edit_section', array("SEPARATOR"=>true, "SORT"=>99));
175 $APPLICATION->AddPanelButtonMenu('edit_section', array(
176 "TEXT" => GetMessage("fileman_panel_admin"),
177 "TITLE"=> GetMessage("fileman_panel_folder_prop_title"),
178 "ACTION" => "jsUtils.Redirect([], '".CUtil::JSEscape($href)."')",
179 "SORT"=>100,
180 ));
181 }
182
183 //Sticker buttons
184 require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/classes/general/sticker.php");
185 if (CSticker::CanDoOperation('sticker_view'))
186 {
187 $useHotKeys = COption::GetOptionString('fileman', "stickers_use_hotkeys", "Y") == "Y";
188 $arMenu = array();
189
190 if (CSticker::CanDoOperation('sticker_new'))
191 {
192 $arMenu[] = [
193 "TEXT" => GetMessage("FMST_PANEL_STICKER_ADD").($useHotKeys ? ' (Ctrl+Shift+S)' : ''),
194 "TITLE" => GetMessage("FMST_PANEL_STICKER_ADD_TITLE"),
195 "ICON" => "",
196 "ACTION" => CSticker::GetScriptStr('add'),
197 "DEFAULT" => true,
198 "HK_ID" => "FMST_PANEL_STICKER_ADD",
199 ];
200 $arMenu[] = ["SEPARATOR" => true];
201 }
202
203 $curPageCount = CSticker::GetCurPageCount();
204 $arMenu[] = array(
205 "ID" => "bxst-show-sticker-icon",
206 "TEXT" => GetMessage("FMST_PANEL_STICKERS_SHOW", array("#COUNT#" => $curPageCount)).($useHotKeys ? ' (Ctrl+Shift+X)' : ''),
207 "TITLE" => GetMessage("FMST_PANEL_STICKERS_SHOW_TITLE"),
208 "ICON" => CSticker::GetBShowStickers() ? " checked" : "",
209 "ACTION" => CSticker::GetScriptStr('show'),
210 "HK_ID"=>"FMST_PANEL_STICKERS_SHOW",
211 );
212 $arMenu[] = array(
213 "TEXT" => GetMessage("FMST_PANEL_CUR_STICKER_LIST").($useHotKeys ? ' (Ctrl+Shift+L)' : ''),
214 "TITLE" => GetMessage("FMST_PANEL_CUR_STICKER_LIST_TITLE"),
215 "ICON" => "",
216 "ACTION" => CSticker::GetScriptStr('list_cur'),
217 "HK_ID"=>"FMST_PANEL_CUR_STICKER_LIST",
218 );
219 $arMenu[] = array(
220 "TEXT" => GetMessage("FMST_PANEL_ALL_STICKER_LIST"),
221 "TITLE" => GetMessage("FMST_PANEL_ALL_STICKER_LIST_TITLE"),
222 "ICON" => "",
223 "ACTION" => CSticker::GetScriptStr('list_all'),
224 "HK_ID"=>"FMST_PANEL_ALL_STICKER_LIST",
225 );
226
227 $APPLICATION->AddPanelButton(array(
228 "HREF" => 'javascript:'.(CSticker::CanDoOperation('sticker_edit') ? CSticker::GetScriptStr('add') : CSticker::GetScriptStr('show')),
229 "TYPE" => "SMALL",
230 "ICON" => "bx-panel-small-stickers-icon",
231 "TEXT" => GetMessage("FMST_PANEL_STICKERS_TOOLTIP_TITLE"),
232 "MAIN_SORT" => "1000",
233 "SORT" => 100,
234 "MENU" => $arMenu,
235 "HK_ID"=>"FMST_PANEL_STICKERS",
236 "HINT" => array(
237 "TITLE" => CSticker::CanDoOperation('sticker_edit') ? GetMessage("FMST_PANEL_STICKERS_TOOLTIP_TITLE") : GetMessage("FMST_PANEL_STICKERS_SHOW_1"),
238 "TEXT" => CSticker::CanDoOperation('sticker_edit') ? GetMessage("FMST_PANEL_STICKERS_TOOLTIP").($useHotKeys ? " (Ctrl+Shift+S)" : "") : GetMessage("FMST_PANEL_STICKERS_ALT").($useHotKeys ? " (Ctrl+Shift+X)" : "")
239 )
240 ));
241 CSticker::Init(array('curPageCount' => $curPageCount));
242 }
243 }
244
245 public static function OnGroupDelete($group_id)
246 {
247 return "";
248 }
249
250 public static function GetVersion()
251 {
252 @include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/install/version.php");
253 if (!isset($arModuleVersion['VERSION']))
254 return false;
255 return $arModuleVersion['VERSION'];
256 }
257
258 public static function SaveMenu($path, $aMenuLinksTmp, $sMenuTemplateTmp = "")
259 {
260 global $APPLICATION;
261 CMain::InitPathVars($site, $path);
262 $DOC_ROOT = CSite::GetSiteDocRoot($site);
263
264 $strMenuLinks = "";
265 if($sMenuTemplateTmp <> '')
266 $strMenuLinks .= "\$sMenuTemplate = \"".CFileMan::EscapePHPString($sMenuTemplateTmp)."\";\n";
267
268 $strMenuLinks .= "\$aMenuLinks = Array(";
269 $i=0;
270 foreach($aMenuLinksTmp as $arMenuItem)
271 {
272 $i++;
273 $strMenuLinksTmp = "";
274
275 if($i>1)
276 $strMenuLinksTmp .= ",";
277
278 $strMenuLinkHref = $arMenuItem[1] ?? '';
279
280 $strMenuLinksTmp .= "\n".
281 " Array(\n".
282 " \"".CFileMan::EscapePHPString(($arMenuItem[0] ?? null))."\", \n".
283 " \"".CFileMan::EscapePHPString($strMenuLinkHref)."\", \n".
284 " Array(";
285
286 if(is_array(($arMenuItem[2] ?? null)))
287 {
288 for($j = 0, $l = count(($arMenuItem[2] ?? [])); $j < $l; $j++)
289 {
290 if($j>0)
291 $strMenuLinksTmp .= ", ";
292 $strMenuLinksTmp .= "\"".CFileMan::EscapePHPString($arMenuItem[2][$j] ?? null)."\"";
293 }
294 }
295 $strMenuLinksTmp .= "), \n";
296
297 $strMenuLinksTmp .= " Array(";
298 if(is_array($arMenuItem[3] ?? null))
299 {
300 $arParams = array_keys($arMenuItem[3]);
301 for($j = 0, $l = count($arParams); $j < $l; $j++)
302 {
303 if($j>0)
304 $strMenuLinksTmp .= ", ";
305 $strMenuLinksTmp .= "\"".CFileMan::EscapePHPString($arParams[$j])."\"=>"."\"".CFileMan::EscapePHPString($arMenuItem[3][$arParams[$j]])."\"";
306 }
307 }
308
309 $strMenuLinksTmp .= "), \n".
310 " \"".CFileMan::EscapePHPString($arMenuItem[4] ?? null)."\" \n".
311 " )";
312
313 $strMenuLinks .= $strMenuLinksTmp;
314 }
315 $strMenuLinks .= "\n);";
316 $APPLICATION->SaveFileContent($DOC_ROOT.$path, "<"."?\n".$strMenuLinks."\n?".">");
317 $GLOBALS["CACHE_MANAGER"]->CleanDir("menu");
318 CBitrixComponent::clearComponentCache("bitrix:menu");
319 }
320
321 public static function GetMenuArray($abs_path)
322 {
323 $aMenuLinks = Array();
324 $sMenuTemplate = '';
325
327 if ($io->FileExists($abs_path))
328 {
329 global $APPLICATION;
330 $arrMenuContent = $APPLICATION->GetFileContent($io->GetPhysicalName($abs_path));
331 $arrMenuContent = str_replace(['<?php', '<?', '?>'], '', $arrMenuContent);
332 if (SITE_DIR === '')
333 {
334 $arrMenuContent = str_replace('SITE_DIR."', '"/', $arrMenuContent);
335 }
336
337 eval($arrMenuContent);
338 }
339
340 return Array("aMenuLinks"=>$aMenuLinks, "sMenuTemplate" => $sMenuTemplate);
341 }
342
343 public static function GetFileName($path)
344 {
345 return GetFileName($path);
346 }
347
348 public static function CreateDir($path)
349 {
350 CMain::InitPathVars($site, $path);
351 $DOC_ROOT = CSite::GetSiteDocRoot($site);
352
353 if (DEBUG_FILE_MAN) echo "CreateDir($path);<br>";
354 global $APPLICATION, $USER;
355
356 $badDirs=Array();
357
359
360 $path = $io->CombinePath($path);
361
362 $p = mb_strrpos($path ?? '', "/");
363
364 while($p!==false)
365 {
366 $dir = $io->GetDirectory($DOC_ROOT.$path);
367 if($dir->IsExists())
368 {
369 $dir->MarkWritable();
370 break;
371 }
372 $badDirs[] = mb_substr($path, $p + 1);
373 $path = mb_substr($path, 0, $p);
374 $p = mb_strrpos($path, "/");
375 }
376
377 for($i = count($badDirs) - 1; $i >= 0; $i--)
378 {
379 $path = $path."/".$badDirs[$i];
380 if(!$USER->CanDoFileOperation('fm_create_new_folder', Array($site,$path)))
381 return GetMessage("FILEMAN_FILEMAN_CREATE_FOLDER_DENY")." \"".$path."\".\n";
382
383 if (($mess = CFileMan::CheckFileName($badDirs[$i])) !== true)
384 return $mess;
385
386 if (!$io->CreateDirectory($DOC_ROOT.$path))
387 return GetMessage("FILEMAN_CREATE_FOLDER_ERROR", array('#PATH#' => htmlspecialcharsex($path)));
388 }
389 }
390
391 //Function check if there are anything exept .access.php and if folder is empty - delete it
392 public static function DeleteDir($path)
393 {
394 if(DEBUG_FILE_MAN)echo "DeleteDir(".$path.");<br>";
395
396 CMain::InitPathVars($site, $path);
397 $DOC_ROOT = CSite::GetSiteDocRoot($site);
398
400
401 global $APPLICATION, $USER;
402 if(trim($path) == '')
403 return GetMessage("FILEMAN_FILEMAN_TRYING_ROOT_DELETE")."\n";
404 if(!$io->DirectoryExists($DOC_ROOT.$path))
405 return GetMessage("FILEMAN_FILEMAN_FOLDER")." \"$path\" ".GetMessage("FILEMAN_FILEMAN_NOT_EXISTS")."\n";
406
407 //check rights to write for this subfolder
408 if(!$USER->CanDoFileOperation('fm_delete_folder', Array($site,$path)))
409 return GetMessage("FILEMAN_FILEMAN_FOLDER_DEL_DENY")."\" ".$path."\".\n";
410
411 $d = $io->GetDirectory($DOC_ROOT.$path);
412 $arChildren = $d->GetChildren();
413 foreach ($arChildren as $child)
414 {
415 if (!$child->IsDirectory() && $child->GetName() != ".access.php")
416 return GetMessage("FILEMAN_FILEMAN_FOLDER_DEL_ERROR")." \"".$path."\" ".GetMessage("FILEMAN_FILEMAN_FOLDER_NOT_EMPTY").".\n";
417 }
418
419 //it's ok ... BUMP OFF!!!
420 if ($io->FileExists($DOC_ROOT.$path."/.access.php"))
421 {
422 $f = $io->GetFile($DOC_ROOT.$path."/.access.php");
423 $f->MarkWritable();
424 $io->Delete($DOC_ROOT.$path."/.access.php");
425 }
426
427 $d->MarkWritable();
428 if(DEBUG_FILE_MAN)echo "rmdir(".$path.");";
429 if(!$io->Delete($DOC_ROOT.$path))
430 return GetMessage("FILEMAN_FILEMAN_FOLDER_DEL_ERROR")." \"".$path."\".\n";
431
432 $APPLICATION->RemoveFileAccessPermission(Array($site, $path));
433 }
434
435 public static function DeleteFile($path)
436 {
437 global $APPLICATION, $USER;
438 CMain::InitPathVars($site, $path);
439 $DOC_ROOT = CSite::GetSiteDocRoot($site);
440
442
443 if(!$io->FileExists($DOC_ROOT.$path))
444 return GetMessage("FILEMAN_FILEMAN_FILE")." \"$path\" ".GetMessage("FILEMAN_FILEMAN_NOT_EXISTS")."\n";
445
446 if(mb_strlen($path) >= 12 && mb_substr($path, mb_strlen($path) - 12) == "/.access.php")
447 return;
448
449 //check: can we delete this file
450 if(!$USER->CanDoFileOperation('fm_delete_file', Array($site,$path)))
451 return GetMessage("FILEMAN_FILEMAN_FILE_DEL_DENY")." \"".$path."\".\n";
452
453 $f = $io->GetFile($DOC_ROOT.$path);
454 $f->MarkWritable();
455
456 //deleting file
457 if(DEBUG_FILE_MAN)echo "unlink(".$DOC_ROOT.$path.");<br>";
458 $file_size = $f->GetFileSize();
459 if($io->Delete($DOC_ROOT.$path))
460 {
461 $APPLICATION->RemoveFileAccessPermission(Array($site, $path));
462 if(CModule::IncludeModule("search"))
463 CSearch::DeleteIndex("main", $site."|".$path);
464
465 //************************** Quota **************************//
466 if(COption::GetOptionInt("main", "disk_space") > 0)
467 {
468 $quota = new CDiskQuota();
469 $quota->updateDiskQuota("file", $file_size, "delete");
470 }
471 //************************** Quota **************************//
472 }
473 }
474
475 public static function DeleteEx($path)
476 {
477 global $APPLICATION, $USER;
478
479 CMain::InitPathVars($site, $path);
480
481 if($path == '')
482 return false;
483
484 $src = $_SERVER["DOCUMENT_ROOT"].$path;
485 $src = str_replace("//","/",$src);
486 if($src == $_SERVER["DOCUMENT_ROOT"])
487 return false;
488
489 $DOC_ROOT = CSite::GetSiteDocRoot($site);
490
491 @set_time_limit(600);
492
494
495 if(is_link($linkPath = CBXVirtualIoFileSystem::ConvertCharset($DOC_ROOT.$path))) //if delete symb. link todo: windows, can't delete links on dirs
496 {
497 if(@unlink($linkPath))
498 return;
499 else
500 return GetMessage("FILEMAN_FILEMAN_SYMLINK_DEL_ERROR")." \"".$path."\".\n";
501 }
502 elseif($io->DirectoryExists($DOC_ROOT.$path))//if delete folder
503 {
504 //check rights
505 if(!$USER->CanDoFileOperation('fm_delete_folder', Array($site,$path)))
506 return GetMessage("FILEMAN_FILEMAN_FOLDER_DEL_DENY")." \"".$path."\".\n";
507 }
508 else //if delete file
509 {
510 return CFileman::DeleteFile(Array($site, $path));
511 }
512
513 $strWarning = "";
514 //get folder content
515 $d = $io->GetDirectory($DOC_ROOT.$path);
516 $arChildren = $d->GetChildren();
517 foreach ($arChildren as $child)
518 {
519 $fn = $child->GetName();
520 if ($child->IsDirectory())
521 {
522 $strWarning .= CFileman::DeleteEx(Array($site, $path."/".$fn));
523 }
524 else
525 {
526 if($fn == ".access.php") continue;
527 $strWarning .= CFileman::DeleteFile(Array($site, $path."/".$fn));
528 }
529 }
530
531 //delete first folder
533
534 return $strWarning;
535 }
536
537
538 public static function NormalizePath($path)
539 {
541 return $io->CombinePath("/", $path);
542 }
543
544 public static function CopyEx($path_from, $path_to, $bDeleteAfterCopy = false, $bOverride = false)
545 {
546 global $APPLICATION, $USER;
547 CMain::InitPathVars($site_from, $path_from);
548 $DOC_ROOT_FROM = CSite::GetSiteDocRoot($site_from);
549
550 CMain::InitPathVars($site_to, $path_to);
551 $DOC_ROOT_TO = CSite::GetSiteDocRoot($site_to);
552 $strWarning = '';
553
554 $path_from = Rel2Abs('/', $path_from);
555 $path_to = Rel2Abs('/', $path_to);
556
557 //check: if we copy to the same directory
558 if(mb_strpos($DOC_ROOT_TO.$path_to."/", $DOC_ROOT_FROM.$path_from."/") === 0)
559 return GetMessage("FILEMAN_LIB_BAD_FOLDER").": \"".$path_from."\".\n";
560
562
563 if($io->DirectoryExists($DOC_ROOT_FROM.$path_from))// Copy folder
564 {
565 // Minimal access - read/listing for copying files
566 if(!$USER->CanDoFileOperation('fm_view_listing', Array($site_from, $path_from)))
567 return GetMessage("FILEMAN_FILEMAN_FOLDER_READ_DENY")." \"".$path_from."\".\n";
568
569 if ($bDeleteAfterCopy && !$USER->CanDoFileOperation('fm_delete_folder', Array($site_from, $path_from)))
570 return GetMessage("FILEMAN_FILEMAN_FOLDER_DEL_DENY")." \"".$path_from."\".\n";
571
572 //Check: folder exist or not
573 $strWarTmp = CFileMan::CreateDir(Array($site_to, $path_to));
574
575 if($strWarTmp <> '')
576 return $strWarTmp;
577
578 $APPLICATION->CopyFileAccessPermission(Array($site_from, $path_from), Array($site_to, $path_to));
579 }
580 else // Copy file
581 {
582 // If we can write this file
583 if (!$USER->CanDoFileOperation('fm_create_new_file', Array($site_to, $path_to)))
584 return GetMessage("FILEMAN_FILEMAN_FILE_WRITE_DENY")." \"".$path_to."\".\n";
585
586 // If we can't read source-file
587 if(!$USER->CanDoFileOperation('fm_view_file', Array($site_from, $path_from)))
588 return GetMessage("FILEMAN_FILEMAN_FILE_READ_DENY")." \"".$path_from."\".\n";
589
590 // Copying php or system file without PHP or LPA access
591 if (!($USER->CanDoOperation('edit_php') || $USER->CanDoFileOperation('fm_lpa', [$site_from, $path_from]) || !(HasScriptExtension($path_from) || mb_substr($path_from, 0, 1) == ".")))
592 {
593 return GetMessage("FILEMAN_FILEMAN_FILE_READ_DENY")." \"".$path_from."\".\n";
594 }
595
596 // If we can't move source-file
597 if($bDeleteAfterCopy && !$USER->CanDoFileOperation('fm_delete_file', Array($site_from, $path_from)))
598 return GetMessage("FILEMAN_FILEMAN_FILE_DEL_DENY")." \"".$path_from."\".\n";
599
600 //Check if folder already exist and trying to create if not
601 $p = mb_strrpos($path_to, "/");
602 $path_to_dir = mb_substr($path_to, 0, $p);
603 $strWarTmp = CFileMan::CreateDir(Array($site_to, $path_to_dir));
604 if($strWarTmp <> '')
605 return $strWarTmp;
606
607 if($io->FileExists($DOC_ROOT_TO.$path_to) || $io->DirectoryExists($DOC_ROOT_TO.$path_to))
608 {
609 if ($bOverride)
610 {
611 $strWarn = CFileMan::DeleteEx(Array($site_to, $path_to));
612 if ($strWarn != "")
613 return $strWarn;
614 }
615 else
616 {
617 return GetMessage("FILEMAN_FILEMAN_FILE_WITH_NAME")." \"".$path_to."\" ".GetMessage("FILEMAN_FILEMAN_ALREADY_EXISTS")."!\n";
618 }
619 }
620
621 $APPLICATION->CopyFileAccessPermission(Array($site_from, $path_from), Array($site_to, $path_to));
622
623 //************************** Quota **************************//
624 if(COption::GetOptionInt("main", "disk_space") > 0)
625 {
626 $f = $io->GetFile($DOC_ROOT_FROM.$path_from);
627 $size = $f->GetFileSize();
628 $quota = new CDiskQuota();
629 if (!$quota->checkDiskQuota(array("FILE_SIZE"=>$size)))
630 return $quota->LAST_ERROR;
631 }
632 //************************** Quota **************************//
633
634 // Copy file
636 echo "copy(".$DOC_ROOT_FROM.$path_from.",".$DOC_ROOT_TO.$path_to.");<br>";
637
638 if (!$io->Copy($DOC_ROOT_FROM.$path_from, $DOC_ROOT_TO.$path_to))
639 $strWarning .= GetMessage('FILEMAN_COPY_ERROR', array('#PATH_FROM#' => htmlspecialcharsex($path_from), '#PATH_TO#' => htmlspecialcharsex($path_to)));
640
641 //************************** Quota **************************//
642 if(COption::GetOptionInt("main", "disk_space") > 0)
643 $quota->updateDiskQuota("file", $size, "copy");
644 //************************** Quota **************************//
645
646 if(CModule::IncludeModule("search"))
647 {
648 $site = CSite::GetSiteByFullPath($DOC_ROOT_TO.$path_to);
649 CSearch::ReIndexFile(Array($site_to, $path_to), $site);
650 }
651
652 if($bDeleteAfterCopy && $strWarning == '') // If was command "delete after copy"?
653 $strWarning .= CFileMan::DeleteFile(Array($site_from, $path_from));
654
655 return $strWarning;
656 }
657
658 // Recursive
659 $d = $io->GetDirectory($DOC_ROOT_FROM.$path_from);
660 $arChildren = $d->GetChildren();
661 foreach ($arChildren as $child)
662 {
663 $fn = $child->GetName();
664
665 if($child->IsDirectory()) //if this is subfolder
666 {
667 //go to recursion
668 $strWarning .= CFileMan::CopyEx(Array($site_from, $path_from."/".$fn), Array($site_to, $path_to."/".$fn), $bDeleteAfterCopy, $bOverride);
669 //back from recursion, in this subfolder all right
670 //if($bDeleteAfterCopy) //necessary delete this subfolder
671 // $strWarning .= CFileMan::DeleteDir($path_from."/".$file);
672 }
673 else //this is "subfile" :-)
674 {
675 if($fn == ".access.php")
676 continue;
677 //let's check, if we can to write there
678 if(!$USER->CanDoFileOperation('fm_create_new_file', Array($site_to, $path_to."/".$fn)))
679 $strWarning .= GetMessage("FILEMAN_FILEMAN_FILE_WRITE_DENY")." \"".$path_to."/".$fn."\".\n";
680 //let's check, if we can read from there
681 elseif(!$USER->CanDoFileOperation('fm_view_file', Array($site_from, $path_from."/".$fn)))
682 $strWarning .= GetMessage("FILEMAN_FILEMAN_FILE_READ_DENY")." \"".$path_from."/".$fn."\".\n";
683 elseif (!($USER->CanDoOperation('edit_php') || $USER->CanDoFileOperation('fm_lpa', Array($site_from, $path_from."/".$fn)) || !(HasScriptExtension($fn) || mb_substr($fn, 0, 1) == ".")))
684 $strWarning .= GetMessage("FILEMAN_FILEMAN_FILE_READ_DENY")." \"".$path_from."/".$fn."\".\n";
685 else
686 {
687 if($io->FileExists($DOC_ROOT_TO.$path_to."/".$fn))
688 {
689 if ($bOverride)
690 {
691 $strWarn = CFileMan::DeleteEx(Array($site_to, $path_to."/".$fn));
692 if ($strWarn != "")
693 $strWarning .= $strWarn."\n";
694 }
695 else
696 {
697 $strWarning .= GetMessage("FILEMAN_FILEMAN_FILE_WITH_NAME")." \"".$path_to."/".$fn."\" ".GetMessage("FILEMAN_FILEMAN_ALREADY_EXISTS")."!\n";
698 }
699 }
700
701 if ($strWarning == "")
702 {
703 //it means we can copy, if we found here
704 $APPLICATION->CopyFileAccessPermission(Array($site_from, $path_from."/".$fn), Array($site_to, $path_to."/".$fn));
705
707 echo "copy(".$DOC_ROOT_FROM.$path_from."/".$fn.",".$DOC_ROOT_TO.$path_to."/".$fn.");<br>";
708
709 if (!$io->Copy($DOC_ROOT_FROM.$path_from."/".$fn, $DOC_ROOT_TO.$path_to."/".$fn))
710 $strWarning .= GetMessage('FILEMAN_COPY_ERROR', array('#PATH_FROM#' => htmlspecialcharsex($path_from."/".$fn), '#PATH_TO#' => htmlspecialcharsex($path_to."/".$fn)));
711
712 //************************** Quota **************************//
713 if(COption::GetOptionInt("main", "disk_space") > 0)
714 {
715 $f = $io->GetFile($DOC_ROOT_TO.$path_to."/".$fn);
716 $quota = new CDiskQuota();
717 $quota->updateDiskQuota("file", $f->GetFileSize(), "copy");
718 }
719 //************************** Quota **************************//
720
721 if(CModule::IncludeModule("search"))
722 {
723 $site = CSite::GetSiteByFullPath($DOC_ROOT_TO, $path_to."/".$fn);
724 CSearch::ReindexFile($path_to."/".$fn, $site);
725 }
726
727 if($bDeleteAfterCopy && $strWarning == '')
728 {
729 $strWarning .= CFileMan::DeleteFile(Array($site_from, $path_from."/".$fn));
730 }
731 }
732 }
733 }
734 }
735
736 //we may be need, to delete our initial folder
737 if($bDeleteAfterCopy)
738 $strWarning .= CFileMan::DeleteDir(Array($site_from, $path_from));
739
740 return $strWarning;
741 }
742
743 public static function GetAllDirList(&$arDirs, $arFilter=Array(), $site=false)
744 {
745 $arFiles = array();
747 }
748
749 public static function DirsRecursive($path, &$arDirs, $arFilter=Array(), $depth=0)
750 {
751 $depth++;
752 CFileMan::GetDirList($path, $arDirsTmp, $arFiles, $arFilter, Array("name"=>"asc"), "D");
753 for($i = 0, $l = count($arDirsTmp); $i < $l; $i++)
754 {
755 $arDir = $arDirsTmp[$i];
756 $arDir["DEPTH_LEVEL"] = $depth;
757 $arDirs[] = $arDir;
758 CFileMan::DirsRecursive($arDir["ABS_PATH"], $arDirs, $arFilter, $depth);
759 }
760 }
761
762 public static function CompareFiles($f1, $f2, $sort=Array())
763 {
764 return CompareFiles($f1, $f2, $sort);
765 }
766
767 public static function GetDirList($path, &$arDirs, &$arFiles, $arFilter=Array(), $sort=Array(), $type="DF", $bLogical=false, $task_mode=false)
768 {
769 return GetDirList($path, $arDirs, $arFiles, $arFilter, $sort, $type, $bLogical,$task_mode);
770 }
771
772 public static function __CheckSite($site)
773 {
774 if($site !== false)
775 {
776 if($site <> '')
777 {
778 $res = CSite::GetByID($site);
779 if($arSite = $res->Fetch())
780 $site = $arSite['ID'];
781 else
782 $site = false;
783 }
784 else
785 $site = false;
786 }
787 return $site;
788 }
789
790 public static function ParsePath($path, $bLast=false, $url=false, $param="", $bLogical = false)
791 {
792 return ParsePath($path, $bLast, $url, $param, $bLogical);
793 }
794
795 public static function GetFileExtension($path)
796 {
797 return GetFileExtension($path);
798 }
799
800 public static function GetFileType($path)
801 {
802 return GetFileType($path);
803 }
804
805 public static function GetStrFileSize($size)
806 {
807 return CFile::FormatSize($size);
808 }
809
810 public static function GetFileTypeEx($fileName)
811 {
812 global $arFilemanPredifinedFileTypesR;
813 $fileExt = GetFileExtension(mb_strtolower($fileName));
814 if (count($arFilemanPredifinedFileTypesR) <= 0)
815 {
816 foreach ($GLOBALS['arFilemanPredifinedFileTypes'] as $key => $value)
817 foreach ($value["exts"] as $ext)
818 $arFilemanPredifinedFileTypesR[$ext] = $key;
819 }
820 if (isset($arFilemanPredifinedFileTypesR[$fileExt]))
821 return $arFilemanPredifinedFileTypesR[$fileExt];
822 return "file";
823 }
824
825 public static function EscapePHPString($str)
826 {
827 return EscapePHPString($str);
828 }
829
830 public static function UnEscapePHPString($str)
831 {
832 return UnEscapePHPString($str);
833 }
834
835 public static function UndoFileDelete($Params, $type)
836 {
837 global $APPLICATION;
838
839 $documentRoot = CSite::GetSiteDocRoot($Params['site']);
840
841 // Restore file
842 if ($Params['path'] <> '')
843 $APPLICATION->SaveFileContent($documentRoot.$Params['path'], $Params['content']);
844
845 // Update disk quota
846 if (COption::GetOptionInt("main", "disk_space") > 0)
847 {
849 $f = $io->GetFile($documentRoot.$Params['path']);
850 $file_size = $f->GetFileSize();
851 $quota = new CDiskQuota();
852 $quota->UpdateDiskQuota("file", $file_size, "delete");
853 }
854
855 // Restore file access permissions
856 if (is_array($Params['perm']) && count($Params['perm']) > 0)
857 {
858 for ($i = 0, $l = count($Params['perm']); $i < $l; $i++)
859 {
860 $permFile = $Params['perm'][$i]['permFile'];
861
862 $permContent = $APPLICATION->GetFileContent($permFile);
863 $permContent = mb_substr($permContent, 0, mb_strpos($permContent, "?".">"));
864 $permContent .= "\$PERM[\"".EscapePHPString($Params['perm'][$i]['file'])."\"][\"".EscapePHPString($Params['perm'][$i]['group'])."\"]=\"".EscapePHPString($Params['perm'][$i]['perm'])."\";\n";
865 $permContent .= "?".">\n";
866
867 $APPLICATION->SaveFileContent($permFile, $permContent);
868 }
869 }
870
871 // Restore menu
872 if (is_array($Params['menu']) && count($Params['menu']) > 0)
873 {
874 for ($i = 0, $l = count($Params['menu']); $i < $l; $i++)
875 {
876 $menuFile = $Params['menu'][$i]['menuFile'];
877 $menuIndex = $Params['menu'][$i]['menuIndex'];
878 $menuItem = $Params['menu'][$i]['menuItem'];
879
880 $arMenu = CFileman::GetMenuArray($documentRoot.$menuFile);
881
882 $arFound = false;
883 if (count($arMenu["aMenuLinks"]) <= $menuIndex)
884 $arMenu["aMenuLinks"][] = $menuItem;
885 else
886 $arMenu["aMenuLinks"] = array_merge(array_slice($arMenu["aMenuLinks"], 0, $menuIndex), array($menuItem), array_slice($arMenu["aMenuLinks"], $menuIndex));
887
888 CFileMan::SaveMenu(Array($Params['site'], $menuFile), $arMenu["aMenuLinks"], $arMenu["sMenuTemplate"]);
889 }
890 }
891
892 // Restore UrlRewriter
893 if (is_array($Params['SEF']) && count($Params['SEF']) > 0)
894 {
895 for ($i = 0, $l = count($Params['SEF']); $i < $l; $i++)
896 {
898 "SITE_ID" => $Params['site'],
899 "CONDITION" => $Params['SEF'][$i]["CONDITION"],
900 "ID" => $Params['SEF'][$i]["ID"],
901 "PATH" => $Params['SEF'][$i]["PATH"],
902 "RULE" => $Params['SEF'][$i]["RULE"]
903 ));
904 }
905 }
906
907 $GLOBALS["CACHE_MANAGER"]->CleanDir("menu");
908 }
909
910 public static function UndoNewFile($Params, $type)
911 {
912 global $APPLICATION;
913
914 $documentRoot = CSite::GetSiteDocRoot($Params['site']);
915
917
918 // Delete file
919 $f = $io->GetFile($Params['absPath']);
920 $f->MarkWritable();
921
922 if (COption::GetOptionInt("main", "disk_space") > 0)
923 {
924 $file_size = $f->GetFileSize();
925 $quota = new CDiskQuota();
926 $quota->UpdateDiskQuota("file", $file_size, "delete");
927 }
928
929 $sucess = $io->Delete($Params['absPath']);
930
931 if (!$sucess)
932 return;
933
934 $APPLICATION->RemoveFileAccessPermission(Array($Params['site'], $Params['path']));
935
936 if (CModule::IncludeModule("search"))
937 CSearch::DeleteIndex("main", $Params['site']."|".$Params['path']);
938
939 // Find and clean file from menu
940 if ($Params['menu'])
941 {
942 $arMenu = CFileman::GetMenuArray($documentRoot.$Params['menu']['menuFile']);
943 if (!empty($arMenu["aMenuLinks"]))
944 {
945 $found = false;
946 foreach ($arMenu["aMenuLinks"] as $menuIndex => $arItem)
947 {
948 if ($arItem[1] == $Params['menu']['menuPath'] && $arItem[0] == $Params['menu']['menuName'])
949 {
950 unset($arMenu["aMenuLinks"][$menuIndex]);
951 $found = true;
952 break;
953 }
954 }
955
956 if ($found)
957 CFileMan::SaveMenu(Array($Params['site'], $Params['menu']['menuFile']), $arMenu["aMenuLinks"], $arMenu["sMenuTemplate"]);
958 }
959 }
960
961 if (isset($Params['public']) && $Params['public'] == 'Y')
962 {
963 ?>
964 <script>
965 window.location = '<?= CUtil::JSEscape(CHTTP::URN2URI(GetDirPath($Params['path'])))?>';
966 </script>
967 <?
968 }
969
970 $GLOBALS["CACHE_MANAGER"]->CleanDir("menu");
971 }
972
973 public static function UndoEditFile($Params, $type)
974 {
975 global $APPLICATION;
976
977 // Restore file
978 if ($Params['absPath'] <> '')
979 $APPLICATION->SaveFileContent($Params['absPath'], $Params['content']);
980
981 $GLOBALS["CACHE_MANAGER"]->CleanDir("menu");
982 }
983
984 public static function UndoNewSection($Params, $type)
985 {
987
988 if ($Params['path'] <> '' && $Params['path'] != "/" && $io->DirectoryExists($Params['absPath']))
989 CFileman::DeleteEx(Array($Params['site'], $Params['path']));
990
991 $documentRoot = CSite::GetSiteDocRoot($Params['site']);
992 // Find and clean file from menu
993 if ($Params['menu'])
994 {
995 $arMenu = CFileman::GetMenuArray($documentRoot.$Params['menu']['menuFile']);
996 if (!empty($arMenu["aMenuLinks"]))
997 {
998 $found = false;
999 foreach ($arMenu["aMenuLinks"] as $menuIndex => $arItem)
1000 {
1001 if ($arItem[1] == $Params['menu']['menuPath'] && $arItem[0] == $Params['menu']['menuName'])
1002 {
1003 unset($arMenu["aMenuLinks"][$menuIndex]);
1004 $found = true;
1005 break;
1006 }
1007 }
1008
1009 if ($found)
1010 CFileMan::SaveMenu(Array($Params['site'], $Params['menu']['menuFile']), $arMenu["aMenuLinks"], $arMenu["sMenuTemplate"]);
1011 }
1012 }
1013 }
1014
1015 public static function FetchFileAccessPerm($path)
1016 {
1017 CMain::InitPathVars($site, $path);
1018 $DOC_ROOT = CSite::GetSiteDocRoot($site);
1019 $result = false;
1020
1021 if(($p = bxstrrpos($path, "/")) === false)
1022 return $result;
1023
1024 $path_file = mb_substr($path, $p + 1);
1025 $path_dir = mb_substr($path, 0, $p);
1026
1028 if (!$io->FileExists($DOC_ROOT.$path_dir."/.access.php"))
1029 return $result;
1030
1031 include($io->GetPhysicalName($DOC_ROOT.$path_dir."/.access.php"));
1032
1033 $result = array();
1034 foreach($PERM as $file=>$arPerm)
1035 {
1036 if($file == $path_file)
1037 {
1038 foreach($arPerm as $group=>$perm)
1039 $result[] = array(
1040 'permFile' => $DOC_ROOT.$path_dir."/.access.php",
1041 'file' => $file,
1042 'group' => $group,
1043 'perm' => $perm
1044 );
1045 }
1046 }
1047
1048 return $result;
1049 }
1050
1051 public static function ShowTypeSelector($params)
1052 {
1053 global $USER;
1054 $useEditor3 = COption::GetOptionString('fileman', "use_editor_3", "Y") == "Y";
1055 $name = $params['name'];
1056 $key = isset($params['key']) ? $params['key'] : '';
1057 $showTextType = isset($params['strTextTypeFieldName']) && $params['strTextTypeFieldName'];
1058 $strTextTypeFieldName = $params['strTextTypeFieldName'];
1059 $textType = $params['strTextTypeValue'] == 'html' ? 'html' : 'text';
1060 $bxid = 'bxed_'.$name;
1061
1062 $replaceNewLines = COption::GetOptionString('fileman', "replace_new_lines", "Y") == "Y";
1063
1064 if ($textType == 'html')
1065 {
1066 $curType = CUserOptions::GetOption('html_editor', "type_selector_".$name.$key, false, $USER->GetId());
1067 $curType = $curType['type'] ?? null;
1068 if ($curType && in_array($curType, array('html', 'editor')))
1069 {
1070 $textType = $curType;
1071 }
1072 }
1073 $ch = "checked=\"checked\"";
1074 ?>
1075 <div class="bx-ed-type-selector">
1076 <?if ($showTextType):?>
1077 <span class="bx-ed-type-selector-item"><input <? if ($textType == 'text') {echo $ch;}?> type="radio" name="<?= $strTextTypeFieldName?>" id="<?= $bxid?>_text" value="text" /><label for="<?= $bxid?>_text"><?= GetMessage('FILEMAN_FILEMAN_TYPE_TEXT')?></label></span>
1078
1079 <span class="bx-ed-type-selector-item"><input <? if ($textType == 'html') {echo $ch;}?> type="radio" name="<?= $strTextTypeFieldName?>" id="<?= $bxid?>_html" value="html" /><label for="<?= $bxid?>_html">HTML</label></span>
1080
1081 <span class="bx-ed-type-selector-item"><input <? if ($textType == 'editor') {echo $ch;}?> type="radio" name="<?= $strTextTypeFieldName?>" id="<?= $bxid?>_editor" value="html" /><label for="<?= $bxid?>_editor"><?= GetMessage('FILEMAN_FILEMAN_TYPE_HTML_EDITOR')?></label></span>
1082 <? else:?>
1083 <span class="bx-ed-type-selector-item"><input type="checkbox" id="<?= $bxid?>_editor" name="<?= $strTextTypeFieldName?>" value="Y" <? if ($textType == 'editor') {echo $ch;}?> /><label for="<?= $bxid?>_editor"><?= GetMessage("FILEMAN_FILEMAN_USE_HTML_EDITOR");?></span>
1084 <? endif;?>
1085 </div>
1086 <script>
1087 function onChangeInputType(editorName)
1088 {
1089 if (window['changeType_' + editorName] && typeof window['changeType_' + editorName] == 'function')
1090 {
1091 window['changeType_' + editorName]();
1092 }
1093 else
1094 {
1095 return setTimeout(function(){onChangeInputType(editorName);}, 100);
1096 }
1097 }
1098
1099 BX.ready(function()
1100 {
1101 var
1102 pOptText = BX("<?= $bxid?>_text"),
1103 pOptHtml = BX("<?= $bxid?>_html"),
1104 pOptEditor = BX("<?= $bxid?>_editor");
1105
1106 if (pOptText)
1107 {
1108 BX.bind(pOptText, 'click', function(){onChangeInputType('<?= $name?>');});
1109 }
1110 if (pOptHtml)
1111 {
1112 BX.bind(BX("<?= $bxid?>_html"), 'click', function(){onChangeInputType('<?= $name?>');});
1113 }
1114 if (pOptEditor)
1115 {
1116 BX.bind(BX("<?= $bxid?>_editor"), 'click', function(){onChangeInputType('<?= $name?>');});
1117 }
1118 });
1119 </script>
1120
1121 <?if ($useEditor3):?>
1122 <script>
1123 BX.ready(function()
1124 {
1125 top.changeType_<?= $name?> = window.changeType_<?= $name?> = function(bSave)
1126 {
1127 var
1128 replaceNewLines = <?= $replaceNewLines ? 'true' : 'false'?>,
1129 pOptHtml = BX("<?= $bxid?>_html"),
1130 pOptEditor = BX("<?= $bxid?>_editor");
1131
1132 var curType = pOptEditor.checked ? 'editor' : 'text';
1133 if (pOptHtml && pOptHtml.checked)
1134 {
1135 curType = 'html';
1136 }
1137
1138 // Save choice
1139 <?if ($params['bSave']):?>
1140 if (bSave !== false)
1141 {
1142 BX.userOptions.save('html_editor', 'type_selector_<?= $name.$key?>', 'type', curType);
1143 }
1144 <?endif;?>
1145
1146 <?if (isset($params['externalFuncName']) && $params['externalFuncName']):?>
1147 var func = window['<?= $params['externalFuncName']?>'];
1148 if (func && typeof func == 'function')
1149 {
1150 func(curType);
1151 }
1152 <?else:?>
1153 // Editor
1154 var
1155 editorName = '<?= $name?>',
1156 textarea = BX("bxed_<?= $name?>"),
1157 show = pOptEditor.checked, /*&& textarea.style.display != "none"*/
1158 editor = window.BXHtmlEditor.Get(editorName),
1159 textareaValue = textarea.value || '';
1160
1161 replaceNewLines = replaceNewLines && window.BXHtmlEditor.ReplaceNewLines;
1162
1163 if (replaceNewLines)
1164 {
1165 if (curType == 'html')
1166 {
1167 textareaValue = window.BXHtmlEditor.ReplaceNewLines(textareaValue);
1168 textarea.value = textareaValue;
1169 }
1170 else if (curType == 'editor')
1171 {
1172 textareaValue = window.BXHtmlEditor.ReplaceNewLines(textareaValue);
1173 }
1174 else
1175 {
1176 textareaValue = window.BXHtmlEditor.ReplaceNewLinesBack(textareaValue);
1177 textarea.value = textareaValue;
1178 }
1179 }
1180
1181 function runEditor(editor, textareaValue)
1182 {
1183 textarea.style.display = "none";
1184
1185 editor.Show();
1186 if (editor.sandbox.inited)
1187 {
1188 editor.SetContent(textareaValue, true);
1189 }
1190 else
1191 {
1192 BX.addCustomEvent(editor, "OnCreateIframeAfter", function()
1193 {
1194 editor.SetContent(textareaValue, true);
1195 });
1196 }
1197 }
1198
1199 if (editor && editor.Check())
1200 {
1201 if(show)
1202 {
1203 runEditor(editor, textareaValue);
1204 }
1205 else
1206 {
1207 if (editor.IsShown())
1208 editor.SaveContent();
1209 editor.Hide();
1210 textarea.style.display = "";
1211 if (replaceNewLines && curType == 'text')
1212 {
1213 textareaValue = textarea.value = window.BXHtmlEditor.ReplaceNewLinesBack(textarea.value);
1214 }
1215 }
1216 }
1217 else if(show)
1218 {
1219 BX.addCustomEvent(window.BXHtmlEditor, "OnEditorCreated", function(editor)
1220 {
1221 if (editor.id == editorName)
1222 {
1223 runEditor(editor, textareaValue);
1224 }
1225 });
1226 window.BXHtmlEditor.Show(false, editorName);
1227 textarea.style.display = "none";
1228 }
1229 <?endif;?>
1230 }
1231 });
1232 </script>
1233 <?else: /* if ($useEditor3) */ ?>
1234 <script>
1235 BX.ready(
1236 function()
1237 {
1238 window.changeType_<?= $name?> = function(bSave)
1239 {
1240 var
1241 pOptHtml = BX("<?= $bxid?>_html"),
1242 pOptEditor = BX("<?= $bxid?>_editor");
1243
1244 var curType = pOptEditor.checked ? 'editor' : 'text';
1245 if (pOptHtml && pOptHtml.checked)
1246 {
1247 curType = 'html';
1248 }
1249
1250 <?if (isset($params['externalFuncName']) && $params['externalFuncName']):?>
1251 var func = window['<?= $params['externalFuncName']?>'];
1252 if (func && typeof func == 'function')
1253 {
1254 func(curType);
1255 }
1256
1257 <?else:?>
1258 // Editor
1259 var el = BX("bxed_<?= $name?>");
1260 if(pOptEditor.checked && el.style.display != "none")
1261 {
1262 var onEditorInit = function(pMainObj)
1263 {
1264 pMainObj.SetContent(pMainObj.PreparseHeaders(el.value));
1265 pMainObj.Show(true);
1266 pMainObj.LoadContent();
1267 };
1268
1269 el.style.display = "none";
1270 if(!el.pMainObj)
1271 el.pMainObj = new BXHTMLEditor("<?= $name?>", onEditorInit);
1272 else
1273 onEditorInit(el.pMainObj);
1274 }
1275 else if(!pOptEditor.checked && el.style.display == "none")
1276 {
1277 el.pMainObj.Show(false);
1278 el.pMainObj.SaveContent(true);
1279 el.style.display = "";
1280 }
1281 <?endif;?>
1282
1283 // Save choice
1284 <?if ($params['bSave']):?>
1285 if (bSave !== false)
1286 {
1287 BX.ajax.get('/bitrix/admin/fileman_manage_settings.php?<?= bitrix_sessid_get()?>&target=text_type&edname=<?= $name?>&key=<?= $key?>&type=' + curType);
1288 }
1289 <?endif;?>
1290 };
1291
1292
1293 var pOptEditor = BX("<?= $bxid?>_editor");
1294 if (pOptEditor)
1295 {
1296 BX.addCustomEvent(pOptEditor.form, 'onAutoSaveRestore', function (ob, data)
1297 {
1298 var pOptEditor = BX("<?= $bxid?>_editor");
1299
1300 setTimeout(function()
1301 {
1302 if (pOptEditor.checked)
1303 {
1304 var pMainObj = GLOBAL_pMainObj['<?= $name?>'];
1305 if (pMainObj && pMainObj.bShowed)
1306 {
1307 pMainObj.SetContent(data[pMainObj.name]);
1308 pMainObj.LoadContent();
1309 }
1310 }
1311 }, 100);
1312 });
1313 }
1314 }
1315 );
1316 </script>
1317 <?endif;/* if ($useEditor3) */
1318 return $textType;
1319 }
1320
1321 public static function AddHTMLEditorFrame(
1322 $strTextFieldName,
1323 $strTextValue,
1324 $strTextTypeFieldName,
1325 $strTextTypeValue,
1326 $arSize = Array("height"=>350),
1327 $CONVERT_FOR_WORKFLOW="N",
1328 $WORKFLOW_DOCUMENT_ID=0,
1329 $NEW_DOCUMENT_PATH="",
1330 $textarea_field="",
1331 $site = false,
1332 $bWithoutPHP = true,
1333 $arTaskbars = false,
1334 $arAdditionalParams = Array()
1335 )
1336 {
1337 // We have to avoid of showing HTML-editor with probably unsecure content when loosing the session [mantis:#0007986]
1338 if ($_SERVER["REQUEST_METHOD"] == "POST" && !check_bitrix_sessid())
1339 return;
1340
1341 global $htmled, $usehtmled;
1342 $strTextFieldName = preg_replace("/[^a-zA-Z0-9_:\.]/is", "", $strTextFieldName);
1343
1344 if(is_array($arSize))
1345 $iHeight = $arSize["height"];
1346 else
1347 $iHeight = $arSize;
1348
1349 $strTextValue = htmlspecialcharsback($strTextValue);
1350 $dontShowTA = isset($arAdditionalParams['dontshowta']) ? $arAdditionalParams['dontshowta'] : false;
1351
1352 if ($arAdditionalParams['hideTypeSelector'] ?? null)
1353 {
1354 $textType = $strTextTypeValue == 'html' ? 'editor' : 'text';
1355 ?><input type="hidden" name="<?= $strTextTypeFieldName?>" value="<?= $strTextTypeValue?>"/><?
1356 }
1357 else
1358 {
1360 'name' => $strTextFieldName,
1361 'key' => ($arAdditionalParams['saveEditorKey'] ?? null),
1362 'strTextTypeFieldName' => $strTextTypeFieldName,
1363 'strTextTypeValue' => $strTextTypeValue,
1364 'bSave' => ($arAdditionalParams['saveEditorState'] ?? null) !== false
1365 ));
1366 }
1367
1368 $curHTMLEd = $textType == 'editor';
1369 setEditorEventHandlers($strTextFieldName);
1370 ?>
1371 <textarea class="typearea" style="<? echo(($curHTMLEd || $dontShowTA) ? 'display:none;' : '');?>width:100%;height:<?=$iHeight?>px;" name="<?=$strTextFieldName?>" id="bxed_<?=$strTextFieldName?>" wrap="virtual" <?=$textarea_field?>><?= htmlspecialcharsbx($strTextValue)?></textarea>
1372 <?
1373
1374 if ($bWithoutPHP)
1375 $arTaskbars = Array("BXPropertiesTaskbar", "BXSnippetsTaskbar");
1376 else if (!$arTaskbars)
1377 $arTaskbars = Array("BXPropertiesTaskbar", "BXSnippetsTaskbar", "BXComponents2Taskbar");
1378
1379 $minHeight = ($arAdditionalParams['minHeight'] ?? null) ? intval($arAdditionalParams['minHeight']) : 450;
1380 $arParams = Array(
1381 "bUseOnlyDefinedStyles"=>COption::GetOptionString("fileman", "show_untitled_styles", "N")!="Y",
1382 "bFromTextarea" => true,
1383 "bDisplay" => $curHTMLEd,
1384 "bWithoutPHP" => $bWithoutPHP,
1385 "arTaskbars" => $arTaskbars,
1386 "height" => max($iHeight, $minHeight)
1387 );
1388
1389 if (isset($arAdditionalParams['use_editor_3']))
1390 $arParams['use_editor_3'] = $arAdditionalParams['use_editor_3'];
1391
1392 $arParams['site'] = ($site == ''?LANG:$site);
1393 if(isset($arSize["width"]))
1394 $arParams["width"] = $arSize["width"];
1395
1396 if (isset($arAdditionalParams))
1397 $arParams["arAdditionalParams"] = $arAdditionalParams;
1398
1399 if (isset($arAdditionalParams['limit_php_access']))
1400 $arParams['limit_php_access'] = $arAdditionalParams['limit_php_access'];
1401
1402 if (isset($arAdditionalParams['toolbarConfig']))
1403 $arParams['toolbarConfig'] = $arAdditionalParams['toolbarConfig'];
1404
1405 if (isset($arAdditionalParams['componentFilter']))
1406 $arParams['componentFilter'] = $arAdditionalParams['componentFilter'];
1407
1408 $arParams['setFocusAfterShow'] = isset($arParams['setFocusAfterShow']) ? $arParams['setFocusAfterShow'] : false;
1409
1410 CFileman::ShowHTMLEditControl($strTextFieldName, $strTextValue, $arParams);
1411 }
1412
1413 public static function ShowHTMLEditControl($name, $content, $arParams = Array())
1414 {
1415 global $USER;
1416 // We have to avoid of showing HTML-editor with probably unsecure content when loosing the session [mantis:#0007986]
1417 if ($_SERVER["REQUEST_METHOD"] == "POST" && !check_bitrix_sessid())
1418 {
1419 return;
1420 }
1421
1422 CUtil::InitJSCore(array('window', 'ajax'));
1423 $relPath = (isset($arParams["path"])) ? $arParams["path"] : "/";
1424 $site = (isset($arParams["site"])) ? $arParams["site"] : "";
1425 $__path = Rel2Abs("/", $relPath);
1427 $name = preg_replace("/[^a-zA-Z0-9_:\.]/is", "", $name);
1428
1429 if (!isset($arParams["limit_php_access"]))
1430 $arParams["limit_php_access"] = false;
1431
1432 $arParams["light_mode"] = (defined('BX_PUBLIC_MODE') && BX_PUBLIC_MODE == 1) || (isset($arParams["light_mode"]) && $arParams["light_mode"] == 'Y');
1433
1435 $direction_rtl = false;
1436 if($site)
1437 {
1438 $DOC_ROOT = CSite::GetSiteDocRoot($site);
1439 $abs_path = $DOC_ROOT.$__path;
1440 if ($io->FileExists($abs_path))
1441 {
1442 $relPath = mb_substr($relPath, 0, mb_strrpos($relPath, "/"));
1443 if ($relPath=="")
1444 $relPath = "/";
1445 }
1446 }
1447
1448 static $bFirstUsed;
1449 $template = $arParams["templateID"] ?? null;
1450
1451 if (!isset($template) && defined('SITE_TEMPLATE_ID'))
1452 {
1453 $template = SITE_TEMPLATE_ID;
1454 }
1455
1456 if (!isset($template) && isset($_GET['siteTemplateId']))
1457 {
1458 $template = $_GET['siteTemplateId'];
1459 }
1460
1461 if (!isset($template) && isset($site))
1462 {
1463 $dbSiteRes = CSite::GetTemplateList($site);
1464 $SITE_TEMPLATE = Array();
1465 while($arSiteRes = $dbSiteRes->Fetch())
1466 {
1467 if ($arSiteRes['CONDITION'] == "" || !isset($template))
1468 $template = $arSiteRes['TEMPLATE'];
1469 }
1470 }
1471
1472 if (isset($arParams['use_editor_3']))
1473 {
1474 $useEditor3 = $arParams['use_editor_3'] == "Y";
1475 }
1476 else
1477 {
1478 $useEditor3 = COption::GetOptionString('fileman', "use_editor_3", "Y") == "Y";
1479 }
1480
1481 if ($useEditor3)
1482 {
1483 $Editor = new CHTMLEditor;
1484 $Editor->Show(array(
1485 'name' => $name,
1486 'id' => $name,
1487 'siteId' => $arParams["site"],
1488 'width' => ($arParams["width"] ?? null),
1489 'height' => $arParams["height"],
1490 'content' => $content,
1491 'bAllowPhp' => !$arParams["bWithoutPHP"] && $USER->CanDoOperation('edit_php'),
1492 "limitPhpAccess" => $arParams["limit_php_access"],
1493 "display" => $arParams['bDisplay'],
1494 "componentFilter" => (isset($arParams['componentFilter']) ? $arParams['componentFilter'] : false),
1495 "setFocusAfterShow" => isset($arParams['setFocusAfterShow']) ? $arParams['setFocusAfterShow'] : true,
1496 "relPath" => $relPath,
1497 "templateId" => $template
1498 ));
1499 return;
1500 }
1501
1502 //Taskbars
1503 $arTaskbars = (isset($arParams["arTaskbars"])) ? $arParams["arTaskbars"] : Array();
1504 //Toolbars
1505 $arToolbars = (isset($arParams["arToolbars"])) ? $arParams["arToolbars"] : false;
1506 // Toolbar config
1507 $arParams["toolbarConfig"] =
1508 is_array($arParams["toolbarConfig"] ?? null)
1509 ? $arParams["toolbarConfig"]
1510 : false
1511 ;
1512
1513 $arParams["use_advanced_php_parser"] = COption::GetOptionString("fileman", "use_advanced_php_parser", "Y");
1514 $arParams["ar_entities"] = COption::GetOptionString("fileman", "ar_entities", 'umlya,greek,other');
1515 if ($arParams["ar_entities"] == 'none')
1516 $arParams["ar_entities"] = '';
1517
1518 if(!isset($arParams["usePspell"]))
1519 $arParams["usePspell"] = COption::GetOptionString("fileman", "use_pspell", "N");
1520
1521 if(!isset($arParams["useCustomSpell"]))
1522 $arParams["useCustomSpell"] = COption::GetOptionString("fileman", "use_custom_spell", "Y");
1523
1524 $arParams['allowRenderComp2'] = COption::GetOptionString('fileman', "allow_render_components", "N") == 'Y';
1525 $arParams['renderComponents'] = $arParams['allowRenderComp2'] && CUserOptions::GetOption('fileman', "render_components", "Y") == 'Y';
1526
1527 $lca = COption::GetOptionString("fileman", "use_lca", "N");
1528 $styleList_render_style = (COption::GetOptionString("fileman", "render_styles_in_classlist", "Y") == 'Y') ? 'true' : 'false';
1529 $arAdditionalParams = (isset($arParams["arAdditionalParams"])) ? $arParams["arAdditionalParams"] : Array();
1530
1531 $arResult = CFileman::GetAllTemplateParams($template, $site, ($arParams["bWithoutPHP"] != true),$arAdditionalParams);
1532 $arParams["TEMPLATE"] = $arResult;
1533 if(($bUseOnlyDefinedStyles ?? null) && !is_set($arResult, "STYLES_TITLE"))
1534 {
1535 $bUseOnlyDefinedStyles = false;
1536 }
1537
1538 $arParams["body_class"] = COption::GetOptionString("fileman", "editor_body_class", "");
1539 $arParams["body_id"] = COption::GetOptionString("fileman", "editor_body_id", "");
1540
1541 ?>
1542 <script bxrunfirst="true">
1543 var relPath = "<?= CUtil::JSEscape($relPath);?>";
1544 var <? echo 'ar_'.$name.'_taskbars';?> = {};
1545 <?
1546 for ($k = 0, $l = count($arTaskbars); $k < $l; $k++)
1547 echo 'ar_'.$name.'_taskbars["'.$arTaskbars[$k].'"] = true;';
1548 if ($arToolbars !== false)
1549 {
1550 echo 'var ar_'.$name.'_toolbars = {};';
1551 for ($k = 0, $l = count($arToolbars); $k < $l; $k++)
1552 echo 'ar_'.$name.'_toolbars["'.$arToolbars[$k].'"] = true;';
1553 }
1554 else
1555 echo 'var ar_'.$name.'_toolbars = false;';
1556 ?>
1557
1558 window.ar_<?= $name?>_config = <?= CUtil::PhpToJSObject($arParams)?>; // editor-config
1559 </script>
1560 <?
1561 $str_taskbars = "";
1562 CFileman::GetHTMLEditorSettings($name, $arParams["light_mode"], $arTaskbars, $str_taskbars);
1563 $str_taskbars .= '_'.CFileman::GetVersion();
1564
1565 if(!$bFirstUsed)
1566 {
1567 $arTemplates = Array(Array('value' => '.default', 'name' => GetMessage("FILEMAN_DEFTEMPL")));
1569 while($ar_site_templates = $db_site_templates->Fetch())
1570 $arTemplates[] = Array('value'=>$ar_site_templates['ID'], 'name'=>$ar_site_templates['NAME']);
1571
1572 ?>
1573 <script bxrunfirst="true">
1574 var
1575 arBXTemplates = <?= CUtil::PhpToJSObject($arTemplates)?>,
1576 BXSite = "<?= CUtil::JSEscape($site)?>",
1577 BXLang = "<?= CUtil::JSEscape(LANGUAGE_ID)?>",
1578 styleList_render_style = <?=$styleList_render_style?>,
1579 limit_php_access = <?= $arParams["limit_php_access"] ? 'true' : 'false'?>,
1580 lca = <?= $lca == 'Y' ? 'true' : 'false'?>,
1581 lightMode = <?= $arParams["light_mode"] ? 'true' : 'false'?>,
1582 BX_PERSONAL_ROOT = "<?=BX_PERSONAL_ROOT?>";
1583
1584 window.limit_php_access = top.limit_php_access = limit_php_access;
1585 window.lightMode = top.lightMode = lightMode;
1586 window.lca = top.lca = lca;
1587 window.BXLang = top.BXLang = BXLang;
1588 window.BXSite = top.BXSite = BXSite;
1589 window.BX_PERSONAL_ROOT = top.BX_PERSONAL_ROOT = BX_PERSONAL_ROOT;
1590 </script>
1591 <?
1592
1593 $arJS = Array();
1594 $arCSS = Array();
1595 $events = GetModuleEvents("fileman", "OnBeforeHTMLEditorScriptsGet");
1596 while($arEvent = $events->Fetch())
1597 {
1599 if (!is_array($tmp))
1600 continue;
1601
1602 if (is_array($tmp['JS']))
1603 $arJS = array_merge($arJS, $tmp['JS']);
1604 if (is_array($tmp['CSS']))
1605 $arCSS = array_merge($arCSS, $tmp['CSS']);
1606 }
1607 $arr = Array();
1608 // Additional JS files from event OnBeforeHtmlEditorScriptGet
1609 for($i = 0, $c = count($arJS); $i < $c; $i++)
1610 {
1611 $arJS[$i] = preg_replace("/[^a-zA-Z0-9_:\.]/is", "", $arJS[$i]);
1612 if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/admin/htmleditor2/'.$arJS[$i]))
1613 $arr[] = $arJS[$i];
1614 }
1615 ?>
1616 <script src="/bitrix/admin/fileman_js.php?lang=<?=LANGUAGE_ID?>&v=<?=@filemtime($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/fileman/lang/'.LANGUAGE_ID.'/admin/fileman_js.php')?>"></script>
1617 <script src="/bitrix/admin/fileman_common_js.php?s=<?=$str_taskbars?>"></script>
1618 <?
1619 for($i = 0, $l = count($arr); $i < $l; $i++)
1620 {
1621 $script_filename = $arr[$i];
1622 ?><script src="/bitrix/admin/htmleditor2/<?=$script_filename?>?v=<?=@filemtime($_SERVER['DOCUMENT_ROOT'].'/bitrix/admin/htmleditor2/'.$script_filename)?>"></script><?
1623 }
1624 ?>
1625 <script src="/bitrix/js/main/popup_menu.js?v=<?=@filemtime($_SERVER['DOCUMENT_ROOT'].'/bitrix/js/main/popup_menu.js')?>"></script>
1626 <?
1627 for($i = 0, $l = count($arCSS); $i < $l; $i++) // Additional CSS files from event OnBeforeHtmlEditorScriptGet
1628 {
1629 $arCSS[$i] = preg_replace("/[^a-zA-Z0-9_:\.]/is", "", $arCSS[$i]);
1630 if(!file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/admin/htmleditor2/'.$arCSS[$i]))
1631 continue;
1632 ?><link rel="stylesheet" type="text/css" href="/bitrix/admin/htmleditor2/<?=$arCSS[$i]?>?v=<?=@filemtime($_SERVER['DOCUMENT_ROOT'].'/bitrix/admin/htmleditor2/'.$arCSS[$i])?>"/><?
1633 }
1634
1635 $db_events = GetModuleEvents("fileman", "OnIncludeHTMLEditorScript");
1636 while($arEvent = $db_events->Fetch())
1637 {
1638 ExecuteModuleEventEx($arEvent);
1639 }
1640 $bFirstUsed = true;
1641 }
1642 ?>
1643 <div class="bxedmain-cont" id="<?= $name.'_object';?>"><table id="<?= $name?>_pFrame" class="bxedmainframe dim100x100" style="display:none;">
1644 <tr style="height: 1%;"><td id="<?= $name?>_toolBarSet0" colspan="2" style="width: 100%; display: none; border-bottom: 1px solid #808080 !important;"></td></tr>
1645 <tr>
1646 <td id="<?= $name?>_toolBarSet1" style="width:0%; display: none; border-right: 1px solid #808080 !important;"></td>
1647 <td vAlign="top" style="width: 4000px; padding: 0!important;">
1648 <table class="dim100x100">
1649 <tr>
1650 <td class="bx-ceditor" id="<?= $name?>_cEditor"></td>
1651 <td id="<?= $name?>_taskBarSet2" class="bxedtaskbarset" style="width:0%; display: none;">
1652 <table>
1653 <tr><td class="bx-move-col-v" rowSpan="3"><img src="/bitrix/images/1.gif" /></td><td style="height:26px;"></td></tr>
1654 <tr><td style="vertical-align: top;"></td></tr>
1655 <tr><td class="bx-taskbar-tabs"></td></tr>
1656 </table>
1657 </td>
1658 </tr>
1659 <tr style="height:0%; display: none;">
1660 <td id="<?= $name?>_taskBarSet3" colspan="2">
1661 <table>
1662 <tr><td class="bx-move-col-h"><img src="/bitrix/images/1.gif" /></td></tr>
1663 <tr><td style="height:26px;"></td></tr>
1664 <tr><td style="vertical-align: top; background: #F4F4F4 none !important;"></td></tr>
1665 <tr><td class="bx-taskbar-tabs"></td></tr>
1666 </table>
1667 </td>
1668 </tr>
1669 </table>
1670 </td>
1671 </tr>
1672 <tr id="bx-css-tt"><td id="<?= $name?>_taskBarTabs" colspan="2" class="tasktabcell"></td></tr>
1673 </table>
1674 </div>
1675 <script>
1676 BX.loadCSS('/bitrix/admin/htmleditor2/editor.css');
1677 var bEd = BX("bxed_<?= $name?>_editor");
1678 if (bEd && !bEd.checked)
1679 BX("<?= $name?>_object").style.display = "none";
1680 </script>
1681 <?
1682 if(!($arParams["bFromTextarea"] ?? null))
1683 {
1684 echo '<input type="hidden" name="'.$name.'" id="bxed_'.$name.'" value="'.htmlspecialcharsbx($content).'">';
1685 }
1686
1687 if(($arParams["bDisplay"] ?? null) !== false)
1688 {
1690 ?>
1691 <script>
1692 BX.ready(function(){
1693 BX.showWait();
1694 BX("bxed_<?= $name;?>").pMainObj = new BXHTMLEditor("<?= $name;?>");
1695 });
1696 </script>
1697 <?
1698 }
1699 }
1700
1701 public static function GetFileTemplates($lang = LANG, $arTemplates=Array())
1702 {
1703 return GetFileTemplates($lang, $arTemplates);
1704 }
1705
1706 public static function GetTemplateContent($filename, $lang=LANG, $arTemplates=Array())
1707 {
1708 return GetTemplateContent($filename, $lang, $arTemplates);
1709 }
1710
1711 public static function GetScriptFileExt()
1712 {
1713 return GetScriptFileExt();
1714 }
1715
1716 public static function ParseFileContent($filesrc, $bCheckProlog = false)
1717 {
1719 if ($bCheckProlog)
1720 {
1721 $prolog = trim(mb_strtolower($res['PROLOG']));
1722 if ($prolog <> '' &&
1723 mb_strpos($prolog, "prolog_before") === false &&
1724 mb_strpos($prolog, 'bitrix/header.php') === false &&
1725 mb_strpos($prolog, '$application->settitle') === false &&
1726 mb_strpos($prolog, '$application->setpageproperty') === false)
1727 {
1728 $res['CONTENT'] = $res['PROLOG']."\n".$res['CONTENT'];
1729 $res['PROLOG'] = '';
1730 }
1731
1732 $epilog = trim(mb_strtolower($res['EPILOG']));
1733 if ($epilog <> '' &&
1734 mb_strpos($epilog, 'bitrix/footer.php') === false &&
1735 mb_strpos($epilog, 'epilog.php') === false)
1736 {
1737 $res['CONTENT'] = $res['CONTENT']."\n".$res['EPILOG'];
1738 $res['EPILOG'] = '';
1739 }
1740 }
1741 return $res;
1742 }
1743
1744 public static function SetTitle($prolog, $title)
1745 {
1746 return SetPrologTitle($prolog, $title);
1747 }
1748
1749 public static function SetProperty($prolog, $property_key, $property_val)
1750 {
1751 return SetPrologProperty($prolog, $property_key, $property_val);
1752 }
1753
1754 public static function IsPHP($src)
1755 {
1756 return IsPHP($src);
1757 }
1758
1759 public static function GetAllTemplateParams($templateID, $site, $findcomponent = true, $arAdditionalParams = Array())
1760 {
1761 global $APPLICATION;
1762
1764 if(!($ar_templ = $db_templ->Fetch()))
1765 {
1766 $templateID = "";
1767 $db_site_templ = CSite::GetTemplateList($site);
1768 while($ar_site_templ = $db_site_templ->Fetch())
1769 {
1770 if($ar_site_templ["CONDITION"] == '')
1771 {
1772 $templateID = $ar_site_templ["TEMPLATE"];
1773 break;
1774 }
1775 }
1776
1777 if($templateID <> '')
1778 {
1780 $ar_templ = $db_templ->Fetch();
1781 }
1782 }
1783
1784 if($ar_templ)
1785 {
1786 $arResult = Array(
1787 "ID" => $ar_templ["ID"],
1788 "NAME" => $ar_templ["NAME"]
1789 );
1790
1791 if(is_set($ar_templ, "STYLES"))
1792 {
1793 // Fetch @import and include it to CSS - will include css from comments also :(.
1794 $pattern = '/^@import(.*)$/im';
1795 $matches = array();
1796 if (preg_match_all($pattern, $ar_templ["STYLES"], $matches))
1797 {
1798 for ($j = 0, $l = count($matches[0]); $j < $l; $j++)
1799 {
1800 $str = $matches[0][$j];
1801 $url = trim(trim($matches[1][$j]), '"\';');
1802 $css = "";
1803 if (mb_substr($url, -5) != 'print')
1804 {
1805 $url = trim(trim($url), ' "\';');
1806 if (mb_substr($url, 0, 4) == 'url(' && mb_substr($url, -1) == ')')
1807 $url = trim(mb_substr($url, 4, -1), ' "\'');
1808 $url = trim(trim($url), '\'";');
1809 if (mb_substr($url, 0, 1) != '/' && file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$ar_templ["ID"]."/".$url))
1810 $css = "\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$ar_templ["ID"]."/".$url)."\n";
1811 else if(file_exists($_SERVER["DOCUMENT_ROOT"].$url))
1812 $css = "\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].$url)."\n";
1813 }
1814 $ar_templ["STYLES"] = str_replace($matches[0][$j], $css, $ar_templ["STYLES"]);
1815 }
1816 }
1817
1818 $arResult["STYLES"] = $ar_templ["STYLES"] ?? '';
1819 $arResult["STYLES_TITLE"] = $ar_templ["STYLES_TITLE"] ?? '';
1820 $arResult["EDITOR_STYLES"] = $ar_templ["EDITOR_STYLES"] ?? '';
1821 }
1822 }
1823 else
1824 {
1825 $arResult = Array("ID" => ".default", "NAME" => GetMessage("FILEMAN_DDEF_TEMPLATE"));
1826 $templateID = "";
1827 }
1828
1829 $io = CBXVirtualIo::GetInstance();
1830
1831 if(!is_set($arResult, "STYLES") || $arResult["STYLES"] == false)
1832 {
1833 if($io->FileExists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/".($site == ''?LANGUAGE_ID:$site)."/styles.css"))
1834 {
1835 $arResult["STYLES"] = $APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/".($site == ''?LANGUAGE_ID : $site)."/styles.css");
1836 $arResult["STYLES_TITLE"] = CSiteTemplate::__GetByStylesTitle($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/".($site == ''?LANGUAGE_ID : $site)."/.styles.php");
1837 }
1838 elseif($io->FileExists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/styles.css"))
1839 {
1840 $arResult["STYLES"] = $APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/styles.css");
1841 $arResult["STYLES_TITLE"] = CSiteTemplate::__GetByStylesTitle($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/.styles.php");
1842 }
1843 elseif($io->FileExists($_SERVER["DOCUMENT_ROOT"]."local/templates/.default/styles.css"))
1844 {
1845 $arResult["STYLES"] = $APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"]."local/templates/.default/styles.css");
1846 $arResult["STYLES_TITLE"] = CSiteTemplate::__GetByStylesTitle($_SERVER["DOCUMENT_ROOT"]."local/templates/.default/.styles.php");
1847 }
1848 else
1849 {
1850 $arResult["STYLES"] = $APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/styles.css");
1851 $arResult["STYLES_TITLE"] = CSiteTemplate::__GetByStylesTitle($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/.styles.php");
1852 }
1853 }
1854
1855 if (isset($arAdditionalParams['additionalCSS']))
1856 {
1857 $additionalCSS = $arAdditionalParams['additionalCSS'];
1858 for ($i = 0, $l = count($additionalCSS); $i < $l; $i++)
1859 {
1860 $css_file_path = $additionalCSS[$i];
1861 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($css_file_path);
1862 }
1863 }
1864
1865 if($templateID <> '' && $io->FileExists($_SERVER["DOCUMENT_ROOT"]."local/templates/".$templateID."/editor.css"))
1866 {
1867 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"]."local/templates/".$templateID."/editor.css");
1868 }
1869 elseif($templateID <> '' && $io->FileExists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$templateID."/editor.css"))
1870 {
1871 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$templateID."/editor.css");
1872 }
1873 elseif($io->FileExists($_SERVER["DOCUMENT_ROOT"]."local/templates/.default/editor.css"))
1874 {
1875 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"]."local/templates/.default/editor.css");
1876 }
1877 elseif($io->FileExists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/editor.css"))
1878 {
1879 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/editor.css");
1880 }
1881 elseif($io->FileExists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/".$site."/editor.css"))
1882 {
1883 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/".($site == '' ? LANGUAGE_ID : $site)."/editor.css");
1884 }
1885 elseif($io->FileExists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/editor.css"))
1886 {
1887 $arResult["STYLES"] .= "\r\n".$APPLICATION->GetFileContent($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/editor.css");
1888 }
1889
1890 $arResult["STYLES"] = preg_replace("/\r\n/", " ", $arResult["STYLES"]);
1891 $arResult["STYLES"] = preg_replace("/\n/", " ", $arResult["STYLES"]);
1892 $arResult["SITE_TEMPLATE_PATH"] = getLocalPath('templates/'.$templateID, BX_PERSONAL_ROOT);
1893
1894 return $arResult;
1895 }
1896
1897 public static function __CheckOnAllowedComponents($str)
1898 {
1899 $allowed_components = trim(COption::GetOptionString('fileman', "~allowed_components", ''));
1900 if ($allowed_components == '')
1901 return true;
1902
1903 $arAC = explode("\n",$allowed_components);
1904 $arAC = array_unique($arAC);
1905 $arAllowedComponents = Array();
1906 foreach ($arAC as $f)
1907 {
1908 if (trim($f) == '')
1909 continue;
1910
1911 $f = preg_replace("/\s/is", "", $f);
1912 $f = preg_replace("/\./is", "\\.", $f);
1913 $f = preg_replace("/\*/is", ".*", $f);
1914 $arAllowedComponents[] = '/^'.$f.'$/';
1915 }
1916 if (count($arAllowedComponents) == 0)
1917 return true;
1918 $comp_RE = '/\$application->includecomponent\‍(\s*?(.*?),/i';
1919 preg_match_all($comp_RE, $str, $matches);
1920
1921 for ($i = 0, $l = count($matches[1]); $i < $l; $i++)
1922 {
1923 $name = trim($matches[1][$i]);
1924 $er_name = $name;
1925 $name = mb_substr($name, 1, -1);
1926 $bx = 'bitrix:';
1927 $bxlen = mb_strlen($bx);
1928 if (mb_substr($name, 0, $bxlen) != $bx)
1929 return $er_name;
1930 $name = mb_substr($name, $bxlen);
1931 for ($j = 0, $c = count($arAllowedComponents); $j < $c; $j++)
1932 if (preg_match($arAllowedComponents[$j], $name))
1933 continue 2;
1934
1935 return $er_name;
1936 }
1937 return true;
1938 }
1939
1940 public static function CheckOnAllowedComponents($str)
1941 {
1942 if (($r = CFileMan::__CheckOnAllowedComponents($str)) !== true)
1943 {
1944 $GLOBALS['APPLICATION']->ThrowException(GetMessage("FILEMAN_UNALLOWED_COMPONENTS", Array("#BAD_COMPONENT#" => $r)), "UNALLOWED_COMPONENTS");
1945 return false;
1946 }
1947 return true;
1948 }
1949
1950 public static function GetHTMLEditorSettings($edname, $lightMode, $arTaskbars, &$loadParams)
1951 {
1952 ?>
1953 <script>
1954 //Array of settings
1955 if (!window.SETTINGS)
1956 SETTINGS = {};
1957
1958 SETTINGS['<?= $edname?>'] = {};
1959 <?
1960 $loadParams = '';
1961 if (!$lightMode)
1962 {
1963 //Get toolbar settings
1964 $toolbar_settings = stripslashes(CUserOptions::GetOption("fileman", "toolbar_settings_".$edname));
1965 $rs_tlbrs = stripslashes(CUserOptions::GetOption("fileman", "rs_toolbar_".$edname, 'Y'));
1966
1967 if ($toolbar_settings)
1968 {
1969 ?>SETTINGS['<?= $edname?>'].arToolbarSettings = [];<?
1970 $res = explode("||", $toolbar_settings);
1971 for ($i = 0, $len = count($res); $i < $len; $i++)
1972 {
1973 $tmp = explode(":", $res[$i]);
1974 $tlbrname = $tmp[0];
1975 $tmp2 = explode(",", $tmp[1]);
1976 $show = $tmp2[0];
1977 $docked = $tmp2[1];
1978 $arPos = explode(";", mb_substr($tmp2[2], 1, -1));
1979?>
1980 var _ar = [];
1981 _ar.show = <?echo($show == 'true' ? 'true' : 'false');?>;
1982 _ar.docked = <?echo($docked=='true' ? 'true' : 'false');?>;
1983 <?if ($docked=='true'):?>
1984 _ar.position = [<?echo$arPos[0];?>,<?echo$arPos[1];?>,<?echo$arPos[2];?>];
1985 <?else:?>
1986 _ar.position = {
1987 x : '<?echo(mb_substr($arPos[0], -2) == "px"? mb_substr($arPos[0], 0, -2) : $arPos[0]);?>',
1988 y : '<?echo(mb_substr($arPos[1], -2) == "px"? mb_substr($arPos[1], 0, -2) : $arPos[1]);?>'
1989 };
1990 <?endif;?>
1991
1992 SETTINGS['<?= $edname?>'].arToolbarSettings["<?=$tlbrname?>"] = _ar;
1993 <?
1994 }
1995 }
1996 $loadParams = 'em'; // extended mode
1997 }
1998
1999 //Get taskbar settings
2000 $taskbars = CUserOptions::GetOption("fileman", "taskbar_settings_".$edname, false);
2001 if ($taskbars !== false && CheckSerializedData($taskbars, 10))
2002 $taskbars = unserialize($taskbars, ['allowed_classes' => false]);
2003 else
2004 $taskbars = false;
2005
2006 if (is_array($taskbars))
2007 {
2008 ?>SETTINGS['<?= $edname?>'].arTaskbarSettings = {};<?
2009 foreach($taskbars as $tname => $tskbr)
2010 {
2011 // Display settings
2012 ?>SETTINGS['<?= $edname?>'].arTaskbarSettings["<?=$tname;?>"] = {show: <?= $tskbr['show'] ? 'true' : 'false'?>, set: <?= $tskbr['set'] == 2 ? 2 : 3?>, active: <?= $tskbr['active'] ? 'true' : 'false'?>};<?
2013 if ($tskbr['show'] && in_array($tname, $arTaskbars))
2014 {
2015 switch ($tname)
2016 {
2017 case 'BXSnippetsTaskbar':
2018 $loadParams .= 's';
2019 break;
2020 case 'BXComponents2Taskbar':
2021 $loadParams .= 'c2';
2022 break;
2023 }
2024 }
2025 }
2026 }
2027 else
2028 {
2029 if (in_array('BXSnippetsTaskbar', $arTaskbars))
2030 $loadParams .= 's';
2031 if (in_array('BXComponents2Taskbar', $arTaskbars))
2032 $loadParams .= 'c2';
2033 }
2034
2035 //Get taskbarset settings
2036 $taskbarset = CUserOptions::GetOption("fileman", "taskbarset_settings_".$edname, false);
2037
2038 if ($taskbarset !== false && CheckSerializedData($taskbarset, 10))
2039 $taskbarset = unserialize($taskbarset, ['allowed_classes' => false]);
2040 else
2041 $taskbarset = false;
2042
2043 if (is_array($taskbarset))
2044 {
2045 ?>SETTINGS['<?= $edname?>'].arTBSetsSettings = [];<?
2046 foreach($taskbarset as $iNum => $tskbrset)
2047 {
2048 if ($iNum != 2)
2049 $iNum = 3;
2050 ?>SETTINGS['<?= $edname?>'].arTBSetsSettings["<?= intval($iNum)?>"] = {show: <?= $tskbrset['show'] ? 'true' : 'false'?>, size: <?= intval($tskbrset['size'])?>};
2051 <?
2052 }
2053 }
2054
2055 $show_tooltips = CUserOptions::GetOption("fileman", "show_tooltips".$edname, "Y");
2056 $visualEffects = CUserOptions::GetOption("fileman", "visual_effects".$edname, "Y");
2057 $arC2DS = CUtil::GetPopupSize("bx_edc2_".$edname, array("width" => 650, "height" => 450));
2058 ?>
2059
2060 SETTINGS['<?= $edname?>'].showTooltips4Components = <?echo $show_tooltips == "N" ? "false" : "true";?>;
2061 SETTINGS['<?= $edname?>'].visualEffects = <?echo $visualEffects == "N" ? "false" : "true";?>;
2062
2063 window.comp2_dialog_size = {width: '<?= $arC2DS['width']?>', height: '<?= $arC2DS['height']?>'};
2064 </script>
2065 <?
2066 //return $str_res;
2067 }
2068
2069 public static function CheckFileName($str)
2070 {
2071 $io = CBXVirtualIo::GetInstance();
2072 if (!$io->ValidateFilenameString($str))
2073 return GetMessage("FILEMAN_NAME_ERR");
2074 return true;
2075 }
2076
2077 public static function GetPropstypes($site="")
2078 {
2079 $defRes = Array(
2080 'description' => GetMessage("FILEMAN_OPTION_PROPS_DESCR"),
2081 'keywords' => GetMessage("FILEMAN_OPTION_PROPS_KEYW")
2082 );
2083 $res = COption::GetOptionString('fileman', "propstypes", addslashes(serialize($defRes)), $site);
2084 if (CheckSerializedData($res))
2085 $res = unserialize(stripslashes($res), ['allowed_classes' => false]);
2086 else
2087 $res = $defRes;
2088 return $res;
2089 }
2090
2091 public static function SetPropstypes($arPT = Array(), $desc = false, $site = "")
2092 {
2093 $str = addslashes(serialize($arPT));
2094 if (mb_strlen($str) > 2000)
2095 return false;
2096 return COption::SetOptionString('fileman', "propstypes", $str, $desc, $site);
2097
2098 }
2099
2100 public static function OnModuleUpdate($arParams)
2101 {
2102 if (isset($arParams['successModules']) && count($arParams['successModules']) > 0)
2103 CFileMan::ClearComponentsListCache();
2104 }
2105
2106 public static function ClearComponentsListCache($id = '')
2107 {
2108 $GLOBALS["CACHE_MANAGER"]->CleanDir("fileman_component_tree_array");
2109 }
2110
2111 public static function SecurePathVar($str)
2112 {
2113 $str = preg_replace("/\.\.+[\/\\\]+/i", "", $str);
2114 return $str;
2115 }
2116
2117 public static function GetUnixFilePermissions($file)
2118 {
2119 $io = CBXVirtualIo::GetInstance();
2120 $f = $io->GetFile($file);
2121 $perms = $f->GetPermissions();
2122
2123 if (($perms & 0xC000) == 0xC000)
2124 $info = 's'; // Socket
2125 elseif (($perms & 0xA000) == 0xA000)
2126 $info = 'l'; // Symbolic Link
2127 elseif (($perms & 0x8000) == 0x8000)
2128 $info = '-'; // Regular
2129 elseif (($perms & 0x6000) == 0x6000)
2130 $info = 'b'; // Block special
2131 elseif (($perms & 0x4000) == 0x4000)
2132 $info = 'd'; // Directory
2133 elseif (($perms & 0x2000) == 0x2000)
2134 $info = 'c'; // Character special
2135 elseif (($perms & 0x1000) == 0x1000)
2136 $info = 'p'; // FIFO pipe
2137 else
2138 $info = 'u'; // Unknown
2139
2140 // Owner
2141 $info .= (($perms & 0x0100) ? 'r' : '-');
2142 $info .= (($perms & 0x0080) ? 'w' : '-');
2143 $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));
2144
2145 // Group
2146 $info .= (($perms & 0x0020) ? 'r' : '-');
2147 $info .= (($perms & 0x0010) ? 'w' : '-');
2148 $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));
2149
2150 // World
2151 $info .= (($perms & 0x0004) ? 'r' : '-');
2152 $info .= (($perms & 0x0002) ? 'w' : '-');
2153 $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));
2154
2155 return array(sprintf("%o", $perms & 0xfff), $info);
2156 }
2157
2158 public static function IsWindows()
2159 {
2160 return PATH_SEPARATOR === ';';
2161 }
2162
2163 public static function SaveLastPath($path)
2164 {
2165 $path = CFileMan::NormalizePath($path);
2166 if ($path == "" || $path == "/")
2167 return;
2168
2169 $arPathes = CFileMan::GetLastPathes();
2170 $key = array_search($path, $arPathes);
2171
2172 if ($key !== false)
2173 unset($arPathes[$key]);
2174
2175 $arPathes = array_merge(array($path), $arPathes);
2176
2177 CFileMan::SetLastPathes($arPathes);
2178 }
2179
2180 public static function GetLastPathes()
2181 {
2182 $arPathes = CUserOptions::GetOption("fileman", "last_pathes", false);
2183 $arPathes = ($arPathes === false || !CheckSerializedData($arPathes))
2184 ? CFileMan::GetLastPathesDefault()
2185 : unserialize($arPathes, ['allowed_classes' => false]);
2186 $arPathes = array_slice($arPathes, 0, 10);
2187
2188 return $arPathes;
2189 }
2190
2191 public static function SetLastPathes($arPathes = array())
2192 {
2193 if (count($arPathes) == 0)
2194 $arPathes = CFileMan::GetLastPathesDefault();
2195 $arPathes = array_slice($arPathes, 0, 10);
2196 CUserOptions::SetOption("fileman", "last_pathes", serialize($arPathes));
2197 }
2198
2199 public static function GetLastPathesDefault()
2200 {
2201 return array("/bitrix");
2202 }
2203
2204 public static function GetEditorToolbarConfig($editorType)
2205 {
2206 $res = COption::GetOptionString('fileman', "toolbar_config_".$editorType, false);
2207 if ($res && CheckSerializedData($res))
2208 {
2209 $arConfig = unserialize($res, ['allowed_classes' => false]);
2210 if (is_array($arConfig))
2211 return $arConfig;
2212 }
2213 return false;
2214 }
2215
2216 public static function decodePdfViewerLangFiles()
2217 {
2218 $localePath = \Bitrix\Main\Application::getDocumentRoot().'/bitrix/components/bitrix/pdf.viewer/pdfjs/locale/';
2219 if(!\Bitrix\Main\IO\Directory::isDirectoryExists($localePath))
2220 {
2221 return;
2222 }
2223 $filesToDecode = [
2224 $localePath.'de/viewer.properties' => 'iso-8859-1',
2225 $localePath.'ru/viewer.properties' => 'windows-1251',
2226 $localePath.'ua/viewer.properties' => 'windows-1251',
2227 ];
2228 foreach($filesToDecode as $path => $charset)
2229 {
2230 static::decodeLangFile($path, $charset);
2231 }
2232 }
2233
2239 protected static function decodeLangFile($path, $charsetFrom)
2240 {
2241 $file = new \Bitrix\Main\IO\File($path);
2242 if($file->isExists())
2243 {
2244 $content = $file->getContents();
2245 if(\Bitrix\Main\Text\Encoding::detectUtf8($content))
2246 {
2247 return;
2248 }
2249 $content = \Bitrix\Main\Text\Encoding::convertEncoding($content, $charsetFrom, 'UTF-8');
2250 $file->putContents($content);
2251 }
2252 }
2253}
2254
2255function is_array_assoc($arr)
2256{
2257 $i = 0;
2258 foreach($arr as $k=>$val)
2259 {
2260 if("".$k!="".$i)
2261 return true;
2262 $i++;
2263 }
2264 return false;
2265}
2266
2267function setEditorEventHandlers($name)
2268{
2269 ?>
2270 <script>
2271 function onContextMenu_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnContextMenu(e);}
2272 function onClick_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnClick(e);}
2273 function onDblClick_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnDblClick(e);}
2274 function onMouseUp_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnMouseUp(e);}
2275 function onDragDrop_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnDragDrop(e);}
2276 function onKeyPress_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnKeyPress(e);}
2277 function onKeyDown_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnKeyDown(e);}
2278 function onPaste_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].OnPaste(e);}
2279
2280 function OnSubmit_<?= $name;?>(e){GLOBAL_pMainObj['<?= $name;?>'].onSubmit(e);}
2281
2282 function OnDispatcherEvent_pDocument_<?= $name;?>(e){pBXEventDispatcher.OnEvent(GLOBAL_pMainObj['<?= $name;?>'].pDocument, e);}
2283 function OnDispatcherEvent_pEditorDocument_<?= $name;?>(e){pBXEventDispatcher.OnEvent(GLOBAL_pMainObj['<?= $name;?>'].pEditorDocument, e);}
2284 </script>
2285<?
2286}
2287
2288function _replace_br_($str)
2289{
2290 return $str;
2291 $pos2 = mb_strpos(mb_strtolower($str), "\n");
2292 if ($pos2!==FALSE)
2293 {
2294 $str = str_replace("\r"," ",$str);
2295 $str = str_replace("\n"," ",$str);
2296 $str = str_replace("\\r"," ",$str);
2297 $str = str_replace("\\n"," ",$str);
2298 }
2299 return $str;
2300}
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
$type
Определения options.php:106
global $APPLICATION
Определения include.php:80
if($canUseYandexMarket) $strWarning
Определения options.php:74
$arResult
Определения generate_coupon.php:16
static DeleteIndex($MODULE_ID, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false)
Определения search.php:2922
static ReindexFile($path, $SEARCH_SESS_ID='')
Определения search.php:1735
static GetArchiveExtensions()
Определения archive.php:101
static ConvertCharset($string, $direction=1, $skipEvents=false)
Определения virtual_io_filesystem.php:17
static GetInstance()
Определения virtual_io.php:60
Определения quota.php:6
Определения fileman.php:93
static ParseFileContent($filesrc, $bCheckProlog=false)
Определения fileman.php:1716
static DeleteFile($path)
Определения fileman.php:435
static CompareFiles($f1, $f2, $sort=Array())
Определения fileman.php:762
static AddHTMLEditorFrame( $strTextFieldName, $strTextValue, $strTextTypeFieldName, $strTextTypeValue, $arSize=Array("height"=>350), $CONVERT_FOR_WORKFLOW="N", $WORKFLOW_DOCUMENT_ID=0, $NEW_DOCUMENT_PATH="", $textarea_field="", $site=false, $bWithoutPHP=true, $arTaskbars=false, $arAdditionalParams=Array())
Определения fileman.php:1321
static UndoNewFile($Params, $type)
Определения fileman.php:910
static UndoEditFile($Params, $type)
Определения fileman.php:973
static CreateDir($path)
Определения fileman.php:348
static DirsRecursive($path, &$arDirs, $arFilter=Array(), $depth=0)
Определения fileman.php:749
static GetFileType($path)
Определения fileman.php:800
static OnPanelCreate()
Определения fileman.php:94
static GetScriptFileExt()
Определения fileman.php:1711
static SetProperty($prolog, $property_key, $property_val)
Определения fileman.php:1749
static FetchFileAccessPerm($path)
Определения fileman.php:1015
static CopyEx($path_from, $path_to, $bDeleteAfterCopy=false, $bOverride=false)
Определения fileman.php:544
static NormalizePath($path)
Определения fileman.php:538
static __CheckSite($site)
Определения fileman.php:772
static GetFileExtension($path)
Определения fileman.php:795
static ShowTypeSelector($params)
Определения fileman.php:1051
static GetFileTypeEx($fileName)
Определения fileman.php:810
static SaveMenu($path, $aMenuLinksTmp, $sMenuTemplateTmp="")
Определения fileman.php:258
static GetAllDirList(&$arDirs, $arFilter=Array(), $site=false)
Определения fileman.php:743
static GetFileName($path)
Определения fileman.php:343
static GetDirList($path, &$arDirs, &$arFiles, $arFilter=Array(), $sort=Array(), $type="DF", $bLogical=false, $task_mode=false)
Определения fileman.php:767
static DeleteEx($path)
Определения fileman.php:475
static IsPHP($src)
Определения fileman.php:1754
static UndoNewSection($Params, $type)
Определения fileman.php:984
static ParsePath($path, $bLast=false, $url=false, $param="", $bLogical=false)
Определения fileman.php:790
static CheckFileName($str)
Определения fileman.php:2069
static DeleteDir($path)
Определения fileman.php:392
static GetVersion()
Определения fileman.php:250
static UnEscapePHPString($str)
Определения fileman.php:830
static UndoFileDelete($Params, $type)
Определения fileman.php:835
static ShowHTMLEditControl($name, $content, $arParams=Array())
Определения fileman.php:1413
static OnGroupDelete($group_id)
Определения fileman.php:245
static GetAllTemplateParams($templateID, $site, $findcomponent=true, $arAdditionalParams=Array())
Определения fileman.php:1759
static GetFileTemplates($lang=LANG, $arTemplates=Array())
Определения fileman.php:1701
static GetStrFileSize($size)
Определения fileman.php:805
static GetMenuArray($abs_path)
Определения fileman.php:321
static GetTemplateContent($filename, $lang=LANG, $arTemplates=Array())
Определения fileman.php:1706
static SetTitle($prolog, $title)
Определения fileman.php:1744
static EscapePHPString($str)
Определения fileman.php:825
Определения html_editor.php:14
Show($arParams)
Определения html_editor.php:593
static GetList($arOrder=array(), $arFilter=array(), $arSelect=false)
Определения site_template.php:13
static GetByID($ID)
Определения site_template.php:142
static GetCurPageCount()
Определения sticker.php:320
static GetScriptStr($mode)
Определения sticker.php:644
static Init($Params=array())
Определения sticker.php:608
static CanDoOperation($operation)
Определения sticker.php:44
static GetBShowStickers()
Определения sticker.php:657
static Add($arFields)
Определения urlrewriter.php:38
$str
Определения commerceml2.php:63
$content
Определения commerceml.php:144
$abs_path
Определения component_props2.php:76
$relPath
Определения component_props2.php:52
$f
Определения component_props.php:52
if(!is_array($prop["VALUES"])) $tmp
Определения component_props.php:203
$filesrc
Определения component_props.php:53
$filename
Определения file_edit.php:47
$DOC_ROOT
Определения file_edit.php:66
const BX_PUBLIC_MODE
Определения file_edit.php:2
$template
Определения file_edit.php:49
$useEditor3
Определения file_edit.php:7
hidden PROPERTY[<?=$propertyIndex?>][CODE]<?=htmlspecialcharsEx( $propertyCode)?> height
Определения file_new.php:759
bx popup label bx width30 PAGE_NEW_MENU_NAME text width
Определения file_new.php:677
$arr
Определения file_new.php:624
$templateID
Определения file_new.php:121
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
bx_acc_lim_group_list limitGroupList[] multiple<?=$group[ 'ID']?> ID selected margin top
Определения file_new.php:657
$arMenu
Определения file_new.php:216
$GLOBALS['arFilemanPredifinedFileTypesR']
Определения fileman.php:15
setEditorEventHandlers($name)
Определения fileman.php:2267
const DEBUG_FILE_MAN
Определения fileman.php:12
$res
Определения filter_act.php:7
$perm
Определения options.php:169
$result
Определения get_property_values.php:14
else $ch
Определения group_list_element_edit.php:27
$p
Определения group_list_element_edit.php:23
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $USER
Определения csv_new_run.php:40
$io
Определения csv_new_run.php:98
endif
Определения csv_new_setup.php:990
SetPrologProperty($prolog, $property_key, $property_val)
Определения admin_tools.php:415
SetPrologTitle($prolog, $title)
Определения admin_tools.php:374
IsPHP($src)
Определения admin_tools.php:444
GetTemplateContent($filename, $lang=LANG, $arTemplates=array())
Определения admin_tools.php:12
GetFileTemplates($lang=LANG, $arTemplates=array())
Определения admin_tools.php:35
foreach(['Bitrix\\Main'=> '/lib', 'Psr\\Container'=> '/vendor/psr/container/src', 'Psr\\Log'=> '/vendor/psr/log/src', 'Psr\\Http\\Message'=> '/vendor/psr/http-message/src', 'Psr\\Http\\Client'=> '/vendor/psr/http-client/src', 'Http\\Promise'=> '/vendor/php-http/promise/src', 'PHPMailer\\PHPMailer'=> '/vendor/phpmailer/phpmailer/src', 'GeoIp2'=> '/vendor/geoip2/geoip2/src', 'MaxMind\\Db'=> '/vendor/maxmind-db/reader/src/MaxMind/Db', 'PhpParser'=> '/vendor/nikic/php-parser/lib/PhpParser', 'Recurr'=> '/vendor/simshaun/recurr/src/Recurr',] as $namespace=> $namespacePath) $documentRoot
Определения autoload.php:27
$requestUri
Определения urlrewrite.php:51
const SITE_DIR(!defined('LANG'))
Определения include.php:72
if(!defined('SITE_ID')) $lang
Определения include.php:91
$l
Определения options.php:783
check_bitrix_sessid($varname='sessid')
Определения tools.php:4686
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
ParseFileContent($filesrc, $params=[])
Определения tools.php:4780
bxstrrpos($haystack, $needle)
Определения tools.php:3292
htmlspecialcharsback($str)
Определения tools.php:2693
GetScriptFileExt()
Определения tools.php:2912
HasScriptExtension($check_name)
Определения tools.php:2956
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
Rel2Abs($curdir, $relpath)
Определения tools.php:3297
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$aMenuLinksTmp
Определения menu_edit.php:261
$name
Определения menu_edit.php:35
$arFiles
Определения options.php:60
return false
Определения prolog_main_admin.php:185
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$dir
Определения quickway.php:303
$fileName
Определения quickway.php:305
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
font style
Определения invoice.php:442
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$title
Определения pdf.php:123
if(!Loader::includeModule('sale')) $pattern
Определения index.php:20
$matches
Определения index.php:22
const SITE_ID
Определения sonet_set_content_view.php:12
$k
Определения template_pdf.php:567
$db_site_templates
Определения template_copy.php:237
path
Определения template_copy.php:201
$arDirs
Определения translate_tools.php:10
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106
$url
Определения iframe.php:7
$site
Определения yandex_run.php:614