CheckDiskQuota(Array("FILE_SIZE" => mb_strlen($fileContent) + mb_strlen($sectionFileContent)))) { $GLOBALS["APPLICATION"]->ThrowException($quota->LAST_ERROR, "BAD_QUOTA"); return false; } $io = CBXVirtualIo::GetInstance(); //Create dir if (!$io->CreateDirectory($absoluteFilePath)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("PAGE_NEW_FOLDER_CREATE_ERROR")."
(".htmlspecialcharsbx($absoluteFilePath).")", "DIR_NOT_CREATE"); return false; } //Create .section.php $io->GetFile($absoluteFilePath."/.section.php"); if (!$GLOBALS["APPLICATION"]->SaveFileContent($absoluteFilePath."/.section.php", $sectionFileContent)) return false; //Create index.php if (!$GLOBALS["APPLICATION"]->SaveFileContent($absoluteFilePath."/index.php", $fileContent)) return false; else { if(COption::GetOptionString("fileman", "log_page", "Y")=="Y") { $res_log['path'] = $sectionPath."/index.php"; CEventLog::Log( "content", "PAGE_ADD", "main", "", serialize($res_log) ); } } return true; } //2 wizards: create page and create section $createNewFolder = (isset($_REQUEST["newFolder"]) && $_REQUEST["newFolder"] == "Y"); if($createNewFolder) { Loc::loadLanguageFile($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/public/folder_new.php"); } else { Loc::loadLanguageFile(__FILE__); } $popupWindow = new CJSPopup(GetMessage("PAGE_NEW_WINDOW_TITLE"), array("SUFFIX"=>($_GET['subdialog'] == 'Y'? 'subdialog':''))); //Check fileman permissions $canEditNewPage = true; if(IsModuleInstalled("fileman")) { if ($createNewFolder && (!$USER->CanDoOperation("fileman_admin_folders") || !$USER->CanDoOperation("fileman_admin_files")) ) $popupWindow->ShowError(GetMessage("PAGE_NEW_ACCESS_DENIED")); elseif (!$USER->CanDoOperation("fileman_admin_files")) $popupWindow->ShowError(GetMessage("PAGE_NEW_ACCESS_DENIED")); if (!$USER->CanDoOperation("fileman_edit_existent_files")) $canEditNewPage = false; } $io = CBXVirtualIo::GetInstance(); //Page path $path = "/"; if(isset($_REQUEST["path"]) && $_REQUEST["path"] <> '') $path = $io->CombinePath("/", $_REQUEST["path"]); $documentRoot = CSite::GetSiteDocRoot($site); //Site ID $site = SITE_ID; if(isset($_REQUEST["site"]) && $_REQUEST["site"] <> '') { $obSite = CSite::GetByID($_REQUEST["site"]); if($arSite = $obSite->Fetch()) $site = $arSite["ID"]; } //Check permissions if($createNewFolder && (!$USER->CanDoFileOperation("fm_create_new_folder", Array($site, $path)) || !$USER->CanDoFileOperation("fm_create_new_file", Array($site, $path))) ) $popupWindow->ShowError(GetMessage("PAGE_NEW_ACCESS_DENIED")); elseif(!$USER->CanDoFileOperation("fm_create_new_file", Array($site, $path))) $popupWindow->ShowError(GetMessage("PAGE_NEW_ACCESS_DENIED")); elseif(!$io->DirectoryExists($documentRoot.$path)) $popupWindow->ShowError(GetMessage("PAGE_NEW_FOLDER_NOT_FOUND")." (".htmlspecialcharsbx($path).")"); if(!$USER->CanDoFileOperation("fm_edit_existent_file", Array($site, $path))) $canEditNewPage = false; //Lang if(!isset($_REQUEST["lang"]) || $_REQUEST["lang"] == '') $lang = LANGUAGE_ID; //BackUrl $back_url = ($_REQUEST["back_url"] ?? ""); //Template ID $templateID = false; if(isset($_REQUEST["templateID"]) && $_REQUEST["templateID"] <> '') { $obTemplate = CSiteTemplate::GetByID($_REQUEST["templateID"]); if($arSiteTemplate = $obTemplate->Fetch()) $templateID = $_REQUEST["templateID"]; } if($templateID === false) { //Get default template if templateID not set $obTemplate = CSite::GetTemplateList($site); while ($arSiteTemplate = $obTemplate->Fetch()) { if ($arSiteTemplate["CONDITION"] == '' ) { $templateID = $arSiteTemplate["TEMPLATE"]; break; } } } //default edit groups - need to limit access $edit_groups = explode(",", COption::GetOptionString('fileman', 'default_edit_groups', '')); $arGroupList = array(); $arEditGroups = array(); $gr = CGroup::GetList("sort", "asc", array("ACTIVE"=>"Y", "ADMIN"=>"N", "ANONYMOUS"=>"N")); while($group = $gr->Fetch()) { $arGroupList[$group["ID"]] = $group; if(in_array($group["ID"], $edit_groups)) $arEditGroups[$group["ID"]] = $group["ID"]; } $bAdmin = $USER->CanDoFileOperation("fm_edit_permission", Array($site, $path)); $strWarning = ""; //Check post values if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_REQUEST["save"])) { CUtil::JSPostUnescape(); $fileName = ($_REQUEST["fileName"] ?? ""); $pageTitle = ($_REQUEST["pageTitle"] ?? ""); $editAfterSave = (isset($_REQUEST["editAfterSave"]) && $_REQUEST["editAfterSave"] == "Y"); $addToMenu = (isset($_REQUEST["addToMenu"]) && $_REQUEST["addToMenu"] == "Y"); $menuName = ($_REQUEST["menuName"] ?? ""); $menuType = ($_REQUEST["menuType"] ?? false); $pageTags = ($_REQUEST["pageTags"] ?? false); $menuItemPosition = (isset($_REQUEST["menuItemPosition"]) ? intval($_REQUEST["menuItemPosition"]) : 0); $absoluteFilePath = $io->CombinePath($documentRoot, $path, $fileName); //Check filename if ($fileName == '') $strWarning = GetMessage("PAGE_NEW_FILE_NAME_EMPTY"); elseif (!$io->ValidateFilenameString($fileName)) $strWarning = GetMessage("PAGE_NEW_FILE_NAME_VALID_SYMBOLS"); // elseif (!$createNewFolder && !preg_match("/\.php$/", $fileName)) // $strWarning = GetMessage("PAGE_NEW_FILE_NAME_PHP_EXT"); elseif (!$createNewFolder && $fileName[0] == ".") $strWarning = GetMessage("PAGE_NEW_FILE_NAME_DOT_FIRST"); elseif ($io->FileExists($absoluteFilePath)) $strWarning = GetMessage("PAGE_NEW_FILE_EXISTS"); elseif ($io->DirectoryExists($absoluteFilePath)) $strWarning = GetMessage("PAGE_NEW_FOLDER_EXISTS"); if (!check_bitrix_sessid()) $strWarning = GetMessage("MAIN_SESSION_EXPIRED"); } else { //Default form values $currentFileDir = $documentRoot.rtrim($path, "/")."/"; for ($fileNumber = ""; ; $fileNumber++) { $fileName = ($createNewFolder ? "folder".$fileNumber : "page".$fileNumber.".php"); if ($createNewFolder && !$io->DirectoryExists($currentFileDir.$fileName) || !$createNewFolder && !$io->FileExists($currentFileDir.$fileName)) break; } $pageTitle = GetMessage("PAGE_NEW_DEFAULT_TITLE").($fileNumber != "" ? " (".$fileNumber.")": ""); $editAfterSave = true; $addToMenu = true; $menuName = ""; $menuType = false; $menuItemPosition = -1; $pageTags = ""; } //Get Menu $arMenu = Array(); if (IsModuleInstalled("fileman") && $USER->CanDoOperation("fileman_add_element_to_menu")) { $arMenuTypes = GetMenuTypes($site); foreach ($arMenuTypes as $type => $name) { $menu = new CMenu($type); $menu->Init($path); $actualDir = $menu->MenuDir; $currentDir = rtrim($path, "/")."/"; if ($actualDir <> '') { $actualMenuFile = $actualDir.".".$type.".menu.php"; $fileOperation = ($io->FileExists($documentRoot.$actualMenuFile) ? "fm_edit_existent_file" : "fm_create_new_file" ); if (!$USER->CanDoFileOperation("fm_add_to_menu", Array($site, $actualMenuFile)) || !$USER->CanDoFileOperation($fileOperation, Array($site, $actualMenuFile))) $actualDir = false; } else $actualDir = false; $currentMenuFile = $currentDir.".".$type.".menu.php"; $fileOperation = ($io->FileExists($documentRoot.$currentMenuFile) ? "fm_edit_existent_file" : "fm_create_new_file" ); if (!$USER->CanDoFileOperation('fm_add_to_menu', Array($site, $currentMenuFile)) || !$USER->CanDoFileOperation($fileOperation, Array($site, $currentMenuFile))) $currentDir = false; if ($currentDir === false && $actualDir === false) continue; $arMenuItems = Array(); foreach ($menu->arMenu as $arItem) { if (isset($arItem[0])) $arMenuItems[] = $arItem[0]; } $arMenu[$type] = Array( "NAME" => $name, "ACTUAL_FILE" => ($actualDir === false ? $currentMenuFile : $actualMenuFile), "CURRENT_FILE" => $currentMenuFile, "CAN_CREATE_NEW" => ($actualDir !== false && $currentDir !== false && $actualDir != $currentDir), "ITEMS" => (($actualMenuFile == $currentMenuFile) ? $arMenuItems : array()), "TEMPLATE" => $menu->template ); } } if(empty($arMenu)) $addToMenu = false; //page template object $obPageTemplate = false; if(isset($_REQUEST['wiz_template']) && $_REQUEST['wiz_template'] <> '') $obPageTemplate = CPageTemplate::GetTemplate($_REQUEST['wiz_template'], array($templateID)); //Save page settings if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_REQUEST["save"]) && $strWarning == "") { //Get page template content $fileContent = false; if($obPageTemplate !== false) { $arParams = array( "path"=>($createNewFolder? $io->CombinePath("/", $path, $fileName)."/" : $path), "file"=>($createNewFolder? "index.php" : $fileName), "site"=>$site ); $fileContent = $obPageTemplate->GetContent($arParams); } else { $template_file = ''; if(isset($_REQUEST['page_template']) && $_REQUEST['page_template'] <> '') { $template_file = $_REQUEST['page_template']; } else { $arPageTemplates = GetFileTemplates($site, array($templateID)); if(!empty($arPageTemplates) && isset($arPageTemplates[0]['file'])) $template_file = $arPageTemplates[0]['file']; } if($template_file <> '') $fileContent = GetTemplateContent($template_file, $site, array($templateID)); } if (!$fileContent) $fileContent = '<'.'?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?'.'>'.GetMessage("PAGE_NEW_CONTENT").'<'.'?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>'; //Title $strSectionName = ""; if ($pageTitle <> '') { $fileContent = SetPrologTitle($fileContent, $pageTitle); if ($createNewFolder) $strSectionName = "\$sSectionName = \"".EscapePHPString($pageTitle)."\";\n"; } //Properties $strDirProperties = ""; if (isset($_POST["PROPERTY"]) && is_array($_POST["PROPERTY"])) { $bNeedComma = false; foreach ($_POST["PROPERTY"] as $arProperty) { $arProperty["CODE"] = (isset($arProperty["CODE"]) ? trim($arProperty["CODE"]) : ""); $arProperty["VALUE"] = (isset($arProperty["VALUE"]) ? trim($arProperty["VALUE"]) : ""); if (preg_match("/[a-zA-Z_-~]+/i", $arProperty["CODE"])) { if ($createNewFolder && $arProperty["VALUE"] <> '') { if($bNeedComma) $strDirProperties .= ",\n"; $strDirProperties .= " \"".EscapePHPString($arProperty["CODE"])."\" => \"".EscapePHPString($arProperty["VALUE"])."\""; $bNeedComma = true; } else $fileContent = SetPrologProperty($fileContent, $arProperty["CODE"], $arProperty["VALUE"]); } } } if ($createNewFolder) { $sectionFileContent = "<"."?\n".$strSectionName."\$arDirProperties = Array(\n".$strDirProperties."\n);\n"."?".">"; $sectionPath = mb_substr($path, 1).$fileName; $success = BXCreateSection($fileContent, $sectionFileContent, $absoluteFilePath, $sectionPath); $arUndoParams = array( 'module' => 'fileman', 'undoType' => 'new_section', 'undoHandler' => 'CFileman::UndoNewSection', 'arContent' => array( 'absPath' => $absoluteFilePath, 'path' => rtrim($path, "/")."/".$fileName, 'site' => $site ) ); } else { //Tags only for pages if ($pageTags !== false && IsModuleInstalled("search")) $fileContent = SetPrologProperty($fileContent, COption::GetOptionString("search", "page_tag_property","tags"), $pageTags); $arUndoParams = array( 'module' => 'fileman', 'undoType' => 'new_file', 'undoHandler' => 'CFileman::UndoNewFile', 'arContent' => array( 'absPath' => $absoluteFilePath, 'path' => rtrim($path, "/")."/".$fileName, 'site' => $site, 'public' => 'Y' ) ); $success = $APPLICATION->SaveFileContent($absoluteFilePath, $fileContent); } if ($success === false && ($exception = $APPLICATION->GetException())) { $strWarning = $exception->msg; } else { if(COption::GetOptionString($module_id, "log_page", "Y")=="Y") { $res_log['path'] = mb_substr($arUndoParams['arContent']['path'], 1); if (!$createNewFolder) CEventLog::Log( "content", "PAGE_ADD", "main", "", serialize($res_log) ); else CEventLog::Log( "content", "SECTION_ADD", "main", "", serialize($res_log) ); } // Limit access if (isset($_REQUEST["limitAccess"]) && $_REQUEST["limitAccess"] == "Y") { $arGroups = false; if($bAdmin) { //operation fm_edit_permission if (isset($_REQUEST["limitAccessWho"]) && $_REQUEST["limitAccessWho"] == 'extended') { $arGroups = array(); foreach($_REQUEST["limitGroupList"] as $group) { $group = intval($group); if(isset($arGroupList[$group])) $arGroups[$group] = $group; } } else { $arGroups = $arEditGroups; } } elseif(!empty($arEditGroups)) { $arGroups = $arEditGroups; } //write permissions if($arGroups !== false) { $arPermission = array("*"=>"D"); foreach($arGroups as $group) $arPermission[$group] = 'X'; $APPLICATION->SetFileAccessPermission(array($site, rtrim($path, "/")."/".$fileName), $arPermission); } } $relativePath = rtrim($path, "/")."/".$fileName.($createNewFolder ? "/" : ""); //Save menu if ($addToMenu && array_key_exists($menuType, $arMenu) && CModule::IncludeModule("fileman")) { $menuFile = $arMenu[$menuType]["CURRENT_FILE"]; $arResult = CFileMan::GetMenuArray($documentRoot.$menuFile); $arMenuItems = $arResult["aMenuLinks"]; $menuTemplate = $arResult["sMenuTemplate"]; if ($menuItemPosition > count($arMenuItems)) $menuItemPosition = 0; //move to the right all items greater current item for ($i = count($arMenuItems) - 1; $i >= $menuItemPosition; $i--) $arMenuItems[$i+1] = $arMenuItems[$i]; $arMenuItems[$menuItemPosition] = Array($menuName, $relativePath, Array(), Array(), ""); CFileMan::SaveMenu(Array($site, $menuFile), $arMenuItems, $menuTemplate); $arUndoParams['arContent']['menu'] = array( 'menuFile' => $menuFile, 'menuName' => $menuName, 'menuPath' => $relativePath ); if(COption::GetOptionString($module_id, "log_page", "Y")=="Y") { $mt = COption::GetOptionString("fileman", "menutypes", $default_value, $site); $mt = unserialize(str_replace("\\", "", $mt), ['allowed_classes' => false]); $res_log['menu_name'] = $mt[$menuType]; $res_log['path'] = mb_substr(dirname($arUndoParams['arContent']['path']), 1); CEventLog::Log( "content", "MENU_EDIT", "main", "", serialize($res_log) ); } } $ID = CUndo::Add($arUndoParams); CUndo::ShowUndoMessage($ID); $pathToEdit = $relativePath.($createNewFolder ? "index.php" : ""); if (!$USER->CanDoFileOperation("fm_edit_existent_file", Array($site, $pathToEdit))) $canEditNewPage = false; //Open edit dialog if ($editAfterSave && $canEditNewPage): ?>