require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_admin_before.php"); define('ADMIN_MODULE_NAME', 'seo'); use Bitrix\Main; use Bitrix\Main\Text\Converter; use Bitrix\Main\Localization\Loc; use Bitrix\Seo\RobotsFile; use Bitrix\Seo\SitemapTable; use Bitrix\Seo\SitemapEntityTable; use Bitrix\Seo\SitemapIblockTable; use Bitrix\Seo\SitemapForumTable; use Bitrix\Seo\SitemapRuntimeTable; use Bitrix\Main\Text\HtmlFilter; Loc::loadMessages(__DIR__.'/../../main/tools.php'); Loc::loadMessages(__DIR__.'/seo_sitemap.php'); if (!$USER->CanDoOperation('seo_tools')) { $APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED")); } if(!Main\Loader::includeModule('seo')) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(Loc::getMessage("SEO_ERROR_NO_MODULE")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); } $bIBlock = Main\Loader::includeModule('iblock'); $bForum = Main\Loader::includeModule('forum'); $mapId = intval($_REQUEST['ID']); $siteId = htmlspecialcharsbx(trim($_REQUEST['site_id'])); $bDefaultHttps = false; if($mapId > 0) { $dbSitemap = SitemapTable::getById($mapId); $arSitemap = $dbSitemap->fetch(); if(!is_array($arSitemap)) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(Loc::getMessage("SEO_ERROR_SITEMAP_NOT_FOUND")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); } else { if($_REQUEST['action'] == 'delete' && check_bitrix_sessid()) { SitemapRuntimeTable::clearByPid($mapId); SitemapTable::delete($mapId); LocalRedirect(BX_ROOT."/admin/seo_sitemap.php?lang=".LANGUAGE_ID); } $arSitemap['SETTINGS'] = unserialize($arSitemap['SETTINGS'], ['allowed_classes' => false]); $arSitemap['SETTINGS']['IBLOCK_AUTO'] = array(); $dbRes = SitemapIblockTable::getList(array( "filter" => array("SITEMAP_ID" => $mapId), "select" => array("IBLOCK_ID"), )); while($arRes = $dbRes->fetch()) { $arSitemap['SETTINGS']['IBLOCK_AUTO'][$arRes['IBLOCK_ID']] = 'Y'; } $dbRes = SitemapEntityTable::getList(array( "filter" => array("SITEMAP_ID" => $mapId), )); while($arRes = $dbRes->fetch()) { if (!is_array($arSitemap['SETTINGS'][$arRes["ENTITY_TYPE"].'_AUTO'])) $arSitemap['SETTINGS'][$arRes["ENTITY_TYPE"].'_AUTO'] = array(); $arSitemap['SETTINGS'][$arRes["ENTITY_TYPE"].'_AUTO'][$arRes['ENTITY_ID']] = 'Y'; } if (empty($arSitemap['SETTINGS']['FILENAME_FORUM'])) $arSitemap['SETTINGS']['FILENAME_FORUM'] = "sitemap_forum_#FORUM_ID#.xml"; $siteId = $arSitemap['SITE_ID']; } } if($siteId <> '') { $dbSite = Main\SiteTable::getByPrimary($siteId); $arSite = $dbSite->fetch(); if(!is_array($arSite)) { $siteId = ''; } else { $siteId = $arSite['LID']; $arSite['DOMAINS'] = array(); $robotsFile = new RobotsFile($siteId); if($robotsFile->isExists()) { $arHostsList = $robotsFile->getRules('Host'); foreach ($arHostsList as $rule) { $host = $rule[1]; if(strncmp($host, 'https://', 8) === 0) { $host = mb_substr($host, 8); $bDefaultHttps = true; } $arSite['DOMAINS'][] = $host; } } if($arSite['SERVER_NAME'] != '') $arSite['DOMAINS'][] = $arSite['SERVER_NAME']; $dbDomains = Bitrix\Main\SiteDomainTable::getList( array( 'filter' => array('LID' => $siteId), 'select'=>array('DOMAIN') ) ); while($arDomain = $dbDomains->fetch()) { $arSite['DOMAINS'][] = $arDomain['DOMAIN']; } $arSite['DOMAINS'][] = \Bitrix\Main\Config\Option::get('main', 'server_name', ''); $arSite['DOMAINS'] = array_unique($arSite['DOMAINS']); } } if($siteId == '') { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(Loc::getMessage("SEO_ERROR_SITEMAP_NO_SITE")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); } $aTabs = array( array("DIV" => "seo_sitemap_common", "TAB" => Loc::getMessage('SEO_SITEMAP_COMMON'), "ICON" => "main_settings", "TITLE" => Loc::getMessage('SEO_SITEMAP_COMMON_TITLE')), array("DIV" => "seo_sitemap_files", "TAB" => Loc::getMessage('SEO_SITEMAP_FILES'), "ICON" => "main_settings", "TITLE" => Loc::getMessage('SEO_SITEMAP_FILES_TITLE')), ); if($bIBlock) { $aTabs[] = array("DIV" => "seo_sitemap_iblock", "TAB" => Loc::getMessage('SEO_SITEMAP_IBLOCK'), "ICON" => "main_settings", "TITLE" => Loc::getMessage('SEO_SITEMAP_IBLOCK_TITLE')); } if($bForum) { $aTabs[] = array("DIV" => "seo_sitemap_forum", "TAB" => Loc::getMessage('SEO_SITEMAP_FORUM'), "ICON" => "main_settings", "TITLE" => Loc::getMessage('SEO_SITEMAP_FORUM_TITLE')); } $tabControl = new \CAdminTabControl("seoSitemapTabControl", $aTabs, true, true); $errors = array(); if($_SERVER['REQUEST_METHOD'] == 'POST' && check_bitrix_sessid() && ($_POST["save"] <> '' || $_POST['apply'] <> '' || $_POST['save_and_add'] <> '')) { $fileNameIndex = trim($_REQUEST['FILENAME_INDEX']); $fileNameFiles = trim($_REQUEST['FILENAME_FILES']); $fileNameForum = trim($_REQUEST['FILENAME_FORUM']); $fileNameIblock = trim($_REQUEST['FILENAME_IBLOCK']); if($fileNameIndex == '') { $errors[] = Loc::getMessage('SEO_ERROR_SITEMAP_NO_VALUE', array('#FIELD#' => Loc::getMessage('SITEMAP_FILENAME_ADDRESS'))); } if($fileNameFiles == '') { $errors[] = Loc::getMessage('SEO_ERROR_SITEMAP_NO_VALUE', array('#FIELD#' => Loc::getMessage('SITEMAP_FILENAME_FILE'))); } if($bIBlock && $fileNameIblock == '') { $errors[] = Loc::getMessage('SEO_ERROR_SITEMAP_NO_VALUE', array('#FIELD#' => Loc::getMessage('SITEMAP_FILENAME_IBLOCK'))); } if($bForum && $fileNameForum == '') { $errors[] = Loc::getMessage('SEO_ERROR_SITEMAP_NO_VALUE', array('#FIELD#' => Loc::getMessage('SITEMAP_FILENAME_FORUM'))); } if(empty($errors)) { $arSitemapSettings = SitemapTable::prepareSettings(array( 'FILE_MASK' => trim($_REQUEST['FILE_MASK']), 'ROBOTS' => $_REQUEST['ROBOTS'] == 'N' ? 'N' : 'Y', 'logical' => $_REQUEST['log'] == 'N' ? 'N' : 'Y', 'DIR' => $_REQUEST['DIR'], 'FILE' => $_REQUEST['FILE'], 'PROTO' => $_REQUEST['PROTO'], 'DOMAIN' => $_REQUEST['DOMAIN'], 'FILENAME_INDEX' => $fileNameIndex, 'FILENAME_FILES' => $fileNameFiles, 'FILENAME_IBLOCK' => $fileNameIblock, 'FILENAME_FORUM' => $fileNameForum, 'IBLOCK_ACTIVE' => $_REQUEST['IBLOCK_ACTIVE'], 'IBLOCK_LIST' => $_REQUEST['IBLOCK_LIST'], 'IBLOCK_SECTION' => $_REQUEST['IBLOCK_SECTION'], 'IBLOCK_ELEMENT' => $_REQUEST['IBLOCK_ELEMENT'], 'IBLOCK_SECTION_SECTION' => $_REQUEST['IBLOCK_SECTION_SECTION'], 'IBLOCK_SECTION_ELEMENT' => $_REQUEST['IBLOCK_SECTION_ELEMENT'], 'FORUM_ACTIVE' => $_REQUEST['FORUM_ACTIVE'], 'FORUM_TOPIC' => $_REQUEST['FORUM_TOPIC'], )); $arSiteMapFields = array( 'NAME' => trim($_REQUEST['NAME']), 'ACTIVE' => $_REQUEST['ACTIVE'] == 'N' ? 'N' : 'Y', 'SITE_ID' => $siteId, 'SETTINGS' => serialize($arSitemapSettings), ); if($mapId > 0) { $result = SitemapTable::update($mapId, $arSiteMapFields); } else { $result = SitemapTable::add($arSiteMapFields); $mapId = $result->getId(); } if($result->isSuccess()) { $arSitemapIblock = array(); SitemapIblockTable::clearBySitemap($mapId); if(is_array($_REQUEST['IBLOCK_AUTO'])) { foreach($_REQUEST['IBLOCK_AUTO'] as $iblockId => $auto) { if($auto === 'Y') { $result = SitemapIblockTable::add(array( 'SITEMAP_ID' => $mapId, 'IBLOCK_ID' => intval($iblockId), )); } } } SitemapForumTable::clearBySitemap($mapId); if(is_array($_REQUEST['FORUM_AUTO'])) { foreach($_REQUEST['FORUM_AUTO'] as $forumId => $auto) { if($auto === 'Y') { $result = SitemapForumTable::add(array('SITEMAP_ID' => $mapId, 'ENTITY_ID' => $forumId)); } } } if($_REQUEST["save"] <> '') { LocalRedirect(BX_ROOT."/admin/seo_sitemap.php?lang=".LANGUAGE_ID); } elseif($_REQUEST["save_and_add"] <> '') { LocalRedirect(BX_ROOT."/admin/seo_sitemap.php?lang=".LANGUAGE_ID."&run=".$mapId."&".bitrix_sessid_get()); } else { LocalRedirect(BX_ROOT."/admin/seo_sitemap_edit.php?lang=".LANGUAGE_ID."&ID=".$mapId."&".$tabControl->ActiveTabParam()); } } else { $errors = $result->getErrorMessages(); } } } function seo_getDir($bLogical, $site_id, $dir, $depth, $checked, $arChecked = array()) { if(!is_array($arChecked)) $arChecked = array(); $arDirs = \CSeoUtils::getDirStructure($bLogical, $site_id, $dir); if(count($arDirs) > 0) { foreach ($arDirs as $arDir) { $d = Main\IO\Path::combine($dir,$arDir['FILE']); $bChecked = $arChecked[$d] === 'Y' || $checked && $arChecked[$d] !== 'N'; $d = Converter::getHtmlConverter()->encode($d); $r = RandString(8); $varName = $arDir['TYPE'] == 'D' ? 'DIR' : 'FILE'; ?>