Your IP : 13.59.85.64
<?
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\Main\Text\HtmlFilter;
use Bitrix\Seo\Sitemap\Internals\SitemapTable;
use Bitrix\Seo\Sitemap\Internals\EntityTable;
use Bitrix\Seo\Sitemap\Internals\IblockTable;
use Bitrix\Seo\Sitemap\Internals\ForumTable;
use Bitrix\Seo\RobotsFile;
use Bitrix\Seo\Sitemap\Job;
Loc::loadMessages(__DIR__ . '/../../main/tools.php');
Loc::loadMessages(__DIR__ . '/seo_sitemap.php');
/**
* Bitrix vars
* @global \CUser $USER
* @global \CMain $APPLICATION
*/
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())
{
SitemapTable::fullDelete($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 = IblockTable::getList(array(
"filter" => array("SITEMAP_ID" => $mapId),
"select" => array("IBLOCK_ID"),
));
while ($arRes = $dbRes->fetch())
{
$arSitemap['SETTINGS']['IBLOCK_AUTO'][$arRes['IBLOCK_ID']] = 'Y';
}
$dbRes = EntityTable::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(
[
'filter' => ['LID' => $siteId],
'select' => ['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 = [
[
"DIV" => "seo_sitemap_common", "TAB" => Loc::getMessage('SEO_SITEMAP_COMMON'), "ICON" => "main_settings",
"TITLE" => Loc::getMessage('SEO_SITEMAP_COMMON_TITLE'),
],
[
"DIV" => "seo_sitemap_files", "TAB" => Loc::getMessage('SEO_SITEMAP_FILES'), "ICON" => "main_settings",
"TITLE" => Loc::getMessage('SEO_SITEMAP_FILES_TITLE'),
],
];
if ($bIBlock)
{
$aTabs[] = [
"DIV" => "seo_sitemap_iblock", "TAB" => Loc::getMessage('SEO_SITEMAP_IBLOCK'), "ICON" => "main_settings",
"TITLE" => Loc::getMessage('SEO_SITEMAP_IBLOCK_TITLE'),
];
}
if ($bForum)
{
$aTabs[] = [
"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',
['#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();
IblockTable::clearBySitemap($mapId);
if (is_array($_REQUEST['IBLOCK_AUTO']))
{
foreach ($_REQUEST['IBLOCK_AUTO'] as $iblockId => $auto)
{
if ($auto === 'Y')
{
$result = IblockTable::add([
'SITEMAP_ID' => $mapId,
'IBLOCK_ID' => (int)$iblockId,
]);
}
}
}
ForumTable::clearBySitemap($mapId);
if (is_array($_REQUEST['FORUM_AUTO']))
{
foreach ($_REQUEST['FORUM_AUTO'] as $forumId => $auto)
{
if ($auto === 'Y')
{
$result = ForumTable::add(array('SITEMAP_ID' => $mapId, 'ENTITY_ID' => $forumId));
}
}
}
if ($_REQUEST["save"] <> '' || $_REQUEST["save_and_add"] <> '')
{
if ($_REQUEST["save_and_add"] <> '')
{
$job = Job::addJob($mapId);
$job->doStep();
}
LocalRedirect(BX_ROOT . "/admin/seo_sitemap.php?lang=" . LANGUAGE_ID);
}
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';
?>
<div class="sitemap-dir-item">
<?
if($arDir['TYPE']=='D'):
?>
<span onclick="loadDir(<?=$bLogical?'true':'false'?>, this, '<?=CUtil::JSEscape($d)?>', '<?=$r?>', '<?=$depth+1?>', BX('DIR_<?=$d?>').checked)" class="sitemap-tree-icon"></span><?
endif;
?><span class="sitemap-dir-item-text">
<input type="hidden" name="<?=$varName?>[<?=$d?>]" value="N" />
<input type="checkbox" name="<?=$varName?>[<?=$d?>]" id="DIR_<?=$d?>"<?=$bChecked ? ' checked="checked"' : ''?> value="Y" onclick="checkAll('<?=$r?>', this.checked);" />
<label for="DIR_<?=$d?>"><?=Converter::getHtmlConverter()->encode($arDir['NAME'].($bLogical ? (' ('.$arDir['FILE'].')') : ''))?></label>
</span>
<div id="subdirs_<?=$r?>" class="sitemap-dir-item-children"></div>
</div>
<?
}
}
else
{
echo $space . Loc::getMessage('SEO_SITEMAP_NO_DIRS_FOUND');
}
}
function seo_getIblock(
$iblockId,
$sectionId,
$sectionChecked,
$elementChecked,
$arSectionChecked = array(),
$arElementChecked = array()
)
{
$dbIblock = \CIBlock::GetByID($iblockId);
$arIBlock = $dbIblock->Fetch();
if (is_array($arIBlock))
{
$bSection = $arIBlock['SECTION_PAGE_URL'] <> '';
$bElement = $arIBlock['DETAIL_PAGE_URL'] <> '';
$dbRes = \CIBlockSection::GetList(
array('SORT' => 'ASC', 'NAME' => 'ASC'),
array(
'IBLOCK_ID' => $iblockId,
'SECTION_ID' => $sectionId,
'ACTIVE' => 'Y',
'CHECK_PERMISSIONS' => 'Y',
)
);
$bFound = false;
while ($arRes = $dbRes->Fetch())
{
$r = RandString(8);
$d = $arRes['ID'];
$bSectionChecked =
$bSection && ($arSectionChecked[$d] === 'Y' || $sectionChecked && $arSectionChecked[$d] !== 'N');
$bElementChecked =
$bElement && ($arElementChecked[$d] === 'Y' || $elementChecked && $arElementChecked[$d] !== 'N');
if (!$bFound)
{
$bFound = true;
?>
<table class="internal" style="width: 100%;">
<tr class="heading">
<td colspan="2"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_SECTION_NAME')?></td>
<td width="100"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_SECTION_SECTION')?></td>
<td width="100"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_SECTION_ELEMENTS')?></td>
</tr>
<?
}
?>
<tr>
<td width="20"><span onclick="loadIblock(this, '<?=$arRes['IBLOCK_ID']?>', '<?=$d?>', '<?=$r?>', BX('IBLOCK_SECTION_SECTION_<?=$d?>').checked, BX('IBLOCK_SECTION_ELEMENT_<?=$d?>').checked);" class="sitemap-tree-icon-iblock"></span></td>
<td><a href="iblock_list_admin.php?lang=<?=LANGUAGE_ID?>&IBLOCK_ID=<?=$arRes['IBLOCK_ID']?>&find_section_section=<?=$d?>"><?=Converter::getHtmlConverter()->encode($arRes['NAME'])?></a></td>
<td align="center"><input type="hidden" name="IBLOCK_SECTION_SECTION[<?=$iblockId?>][<?=$d?>]" value="N" /><input type="checkbox" name="IBLOCK_SECTION_SECTION[<?=$iblockId?>][<?=$d?>]" id="IBLOCK_SECTION_SECTION_<?=$d?>" value="Y"<?=$bSection?'':' disabled="disabled"'?><?=$bSectionChecked?' checked="checked"':''?> data-type="section" onclick="checkAllSection('<?=$r?>', this.checked);" /> <label for="IBLOCK_SECTION_SECTION_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label></td>
<td align="center"><input type="hidden" name="IBLOCK_SECTION_ELEMENT[<?=$iblockId?>][<?=$d?>]" value="N" /><input type="checkbox" name="IBLOCK_SECTION_ELEMENT[<?=$iblockId?>][<?=$d?>]" id="IBLOCK_SECTION_ELEMENT_<?=$d?>" value="Y"<?=$bElement?'':' disabled="disabled"'?><?=$bElementChecked?' checked="checked"':''?> data-type="element" onclick="checkAllElement('<?=$r?>', this.checked);" /> <label for="IBLOCK_SECTION_ELEMENT_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label></td>
</tr>
<tr style="display: none" id="subdirs_row_<?=$r?>">
<td colspan="4" id="subdirs_<?=$r?>" align="center"></td>
</tr>
<?
}
if (!$bFound)
{
echo Loc::getMessage('SEO_SITEMAP_NO_DIRS_FOUND');
}
}
}
// load directory structure
if (isset($_REQUEST['dir']) && check_bitrix_sessid())
{
$bLogical = $_REQUEST['log'] == 'Y';
$dir = $_REQUEST['dir'];
$depth = intval($_REQUEST['depth']);
$checked = $_REQUEST['checked'] == 'Y';
$APPLICATION->RestartBuffer();
if (!is_array($arSitemap['SETTINGS']['DIR']))
{
$arSitemap['SETTINGS']['DIR'] = array();
}
if (!is_array($arSitemap['SETTINGS']['FILE']))
{
$arSitemap['SETTINGS']['FILE'] = array();
}
$arChecked = array_merge($arSitemap['SETTINGS']['DIR'], $arSitemap['SETTINGS']['FILE']);
echo seo_getDir($bLogical, $siteId, $dir, $depth, $checked, $arChecked);
die();
}
// load iblock structure
if ($bIBlock && isset($_REQUEST['iblock']) && check_bitrix_sessid())
{
$iblock = intval($_REQUEST['iblock']);
$section = intval($_REQUEST['section']);
$sectionChecked = $_REQUEST['section_checked'] == 'Y';
$elementChecked = $_REQUEST['element_checked'] == 'Y';
$APPLICATION->RestartBuffer();
if (
is_array($arSitemap['SETTINGS']['IBLOCK_SECTION_SECTION'][$iblock])
|| is_array($arSitemap['SETTINGS']['IBLOCK_SECTION_ELEMENT'][$iblock])
)
{
echo seo_getIblock($iblock,
$section,
$sectionChecked,
$elementChecked,
$arSitemap['SETTINGS']['IBLOCK_SECTION_SECTION'][$iblock],
$arSitemap['SETTINGS']['IBLOCK_SECTION_ELEMENT'][$iblock]);
}
else
{
echo seo_getIblock($iblock, $section, $sectionChecked, $elementChecked);
}
die();
}
if ($mapId <= 0)
{
$arSitemap = [
"NAME" => Loc::getMessage('SITEMAP_NAME_DEFAULT', ["#DATE#" => ConvertTimeStamp()]),
"ACTIVE" => "Y",
"DATE_RUN" => "",
"SETTINGS" => [
"ROBOTS" => "Y",
"PROTO" => $bDefaultHttps ? 1 : 0,
"FILE_MASK" => SitemapTable::SETTINGS_DEFAULT_FILE_MASK,
"logical" => 'Y',
"FILENAME_INDEX" => "sitemap.xml",
"FILENAME_FILES" => "sitemap-files.xml",
"FILENAME_IBLOCK" => "sitemap-iblock-#IBLOCK_ID#.xml",
"FILENAME_FORUM" => "sitemap-forum-#FORUM_ID#.xml",
],
];
}
if (!empty($errors))
{
$arSitemap["NAME"] = $_REQUEST['NAME'];
$arSitemap["SETTINGS"]["ROBOTS"] = $_REQUEST['ROBOTS'] == 'N' ? 'N' : 'Y';
$arSitemap["SETTINGS"]["PROTO"] = $_REQUEST['PROTO'];
$arSitemap["SETTINGS"]["DOMAIN"] = $_REQUEST['DOMAIN'];
$arSitemap["SETTINGS"]["FILE_MASK"] = trim($_REQUEST['FILE_MASK']);
$arSitemap["SETTINGS"]["logical"] = $_REQUEST['log'] == 'N' ? 'N' : 'Y';
$arSitemap["SETTINGS"]["FILENAME_INDEX"] = trim($_REQUEST['FILENAME_INDEX']);
$arSitemap["SETTINGS"]["FILENAME_FILES"] = trim($_REQUEST['FILENAME_FILES']);
$arSitemap["SETTINGS"]["FILENAME_IBLOCK"] = trim($_REQUEST['FILENAME_IBLOCK']);
$arSitemap["SETTINGS"]["FILENAME_FORUM"] = trim($_REQUEST['FILENAME_FORUM']);
$arSitemap["SETTINGS"]["DIR"] = $_REQUEST['DIR'];
$arSitemap["SETTINGS"]["FILE"] = $_REQUEST['FILE'];
$arSitemap["SETTINGS"]["IBLOCK_ACTIVE"] = $_REQUEST['IBLOCK_ACTIVE'];
$arSitemap["SETTINGS"]["IBLOCK_LIST"] = $_REQUEST['IBLOCK_LIST'];
$arSitemap["SETTINGS"]["IBLOCK_SECTION"] = $_REQUEST['IBLOCK_SECTION'];
$arSitemap["SETTINGS"]["IBLOCK_ELEMENT"] = $_REQUEST['IBLOCK_ELEMENT'];
$arSitemap["SETTINGS"]["IBLOCK_SECTION_SECTION"] = $_REQUEST['IBLOCK_SECTION_SECTION'];
$arSitemap["SETTINGS"]["IBLOCK_SECTION_ELEMENT"] = $_REQUEST['IBLOCK_SECTION_ELEMENT'];
$arSitemap["SETTINGS"]["FORUM_ACTIVE"] = $_REQUEST['FORUM_ACTIVE'];
$arSitemap["SETTINGS"]["FORUM_TOPIC"] = $_REQUEST['FORUM_TOPIC'];
}
$bLogical = $arSitemap['SETTINGS']['logical'] != 'N';
$APPLICATION->SetAdditionalCSS("/bitrix/panel/seo/sitemap.css");
$title =
$mapId > 0
? Loc::getMessage("SEO_SITEMAP_EDIT_TITLE")
: Loc::getMessage("SEO_SITEMAP_ADD_TITLE")
;
$APPLICATION->SetTitle($title);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");
$aMenu = [];
$aMenu[] = [
"TEXT" => Loc::getMessage("SITEMAP_LIST"),
"LINK" => "/bitrix/admin/seo_sitemap.php?lang=" . LANGUAGE_ID,
"ICON" => "btn_list",
"TITLE" => Loc::getMessage("SITEMAP_LIST_TITLE"),
];
if ($mapId > 0)
{
$aMenu[] = [
"TEXT" => Loc::getMessage("SITEMAP_DELETE"),
"LINK" => "javascript:if(confirm('"
. Loc::getMessage("SITEMAP_DELETE_CONFIRM")
. "')) window.location='/bitrix/admin/seo_sitemap_edit.php?action=delete&ID="
. $mapId
. "&lang="
. LANGUAGE_ID
. "&"
. bitrix_sessid_get()
. "';",
"ICON" => "btn_delete",
"TITLE" => Loc::getMessage("SITEMAP_DELETE_TITLE"),
];
}
$context = new CAdminContextMenu($aMenu);
$context->Show();
if (!empty($errors))
{
CAdminMessage::ShowMessage(join("\n", $errors));
}
?>
<form method="POST" action="<?=POST_FORM_ACTION_URI?>" name="sitemap_form">
<input type="hidden" name="ID" value="<?=$mapId?>">
<input type="hidden" name="site_id" value="<?=$siteId?>">
<?
$tabControl->Begin();
$tabControl->BeginNextTab();
?>
<tr class="adm-detail-required-field">
<td width="40%"><?=Loc::getMessage("SITEMAP_NAME")?>:</td>
<td width="60%"><input type="text" name="NAME" value="<?=Converter::getHtmlConverter()->encode($arSitemap["NAME"])?>" style="width:70%"></td>
</tr>
<tr class="adm-detail-required-field">
<td width="40%"><?=Loc::getMessage("SITEMAP_FILENAME_ADDRESS")?>:</td>
<td width="60%"><select name="PROTO">
<option value="0"<?=$arSitemap['SETTINGS']['PROTO'] == 0 ? ' selected="selected"' : ''?>>http</option>
<option value="1"<?=$arSitemap['SETTINGS']['PROTO'] == 1 ? ' selected="selected"' : ''?>>https</option>
</select>
<b>://</b>
<select name="DOMAIN">
<?php foreach($arSite['DOMAINS'] as $domain): ?>
<?php
$hd = Converter::getHtmlConverter()->encode($domain);
$errors = [];
$hdc = Converter::getHtmlConverter()->encode(CBXPunycode::ToUnicode($domain, $errors));
$hd = trim($hd, " \n\r\t\v\x00/");
$hdc = trim($hdc, " \n\r\t\v\x00/");
?>
<option value="<?=$hd?>"<?=$domain == $arSitemap['SETTINGS']['DOMAIN'] ? ' selected="selected"' : ''?>>
<?=$hdc?>
</option>
<?php endforeach; ?>
</select>
<b><?= Converter::getHtmlConverter()->encode($arSite['DIR']) ?></b>
<input
type="text"
name="FILENAME_INDEX"
value="<?= Converter::getHtmlConverter()->encode($arSitemap['SETTINGS']["FILENAME_INDEX"]) ?>"
oninput="onPathInput(this)"
/>
</td>
</tr>
<tr>
<td></td>
<style>
.adm-info-message{margin-top:0 !important;}
</style>
<td><?php echo BeginNote(),Loc::getMessage("SITEMAP_FILENAME_ADDRESS_ATTENTION"),EndNote(); ?></td>
</tr>
<tr>
<td width="40%"><label for="SITEMAP_ROBOTS_Y"><?php echo Loc::getMessage("SITEMAP_ROBOTS"); ?>:</label></td>
<td width="60%"><input type="hidden" name="ROBOTS" value="N"><input type="checkbox" id="SITEMAP_ROBOTS_Y" name="ROBOTS" value="Y"<?=$arSitemap['SETTINGS']['ROBOTS'] == 'Y' ? ' checked="checked"' : ''?>> <label for="SITEMAP_ROBOTS_Y"><?=Loc::getMessage('MAIN_YES')?></label></td>
</tr>
<tr>
<td width="40%"><?=Loc::getMessage('SITEMAP_DATE_RUN')?>:</td>
<td width="60%"><?=$arSitemap['DATE_RUN'] ? $arSitemap['DATE_RUN'] : Loc::getMessage('SITEMAP_DATE_RUN_NEVER')?></td>
</tr>
<?
$tabControl->BeginNextTab();
$startDir = HtmlFilter::encode($arSite['DIR']);
$bChecked = isset($arSitemap['SETTINGS']['DIR'])
? $arSitemap['SETTINGS']['DIR'][$startDir] == 'Y'
: true;
?>
<script>
var loadedDirs = {};
function loadDir(bLogical, sw, dir, div, depth, checked)
{
div = 'subdirs_' + div;
if (!!sw && BX.hasClass(sw, 'sitemap-opened'))
{
BX(div).style.display = 'none';
BX.removeClass(sw, 'sitemap-opened');
}
else if (div != 'subdirs_<?=$startDir?>' && !!loadedDirs[div])
{
if (sw)
{
BX.addClass(sw, 'sitemap-opened');
}
BX(div).style.display = 'block';
}
else
{
BX.ajax.get('<?=$APPLICATION->GetCurPageParam('', array('dir', 'depth'))?>',
{
dir: dir,
depth: depth,
checked: checked ? 'Y' : 'N',
log: bLogical ? 'Y' : 'N',
sessid: BX.bitrix_sessid(),
},
function (res)
{
BX(div).innerHTML = res;
BX(div).style.display = 'block';
if (sw)
{
BX.addClass(sw, 'sitemap-opened');
}
loadedDirs[div] = true;
BX.adminFormTools.modifyFormElements(BX(div));
});
}
BX.onCustomEvent('onAdminTabsChange');
}
var bChanged = false;
function switchLogic(l)
{
if (!bChanged || confirm('<?=CUtil::JSEscape(Loc::getMessage('SEO_SITEMAP_LOGIC_WARNING'))?>'))
{
loadDir(l, null, '<?=$startDir?>', '<?=$startDir?>', 0, BX('DIR_<?=$startDir?>').checked);
bChanged = false;
}
else
{
BX('log_' + (l ? 'N' : 'Y')).checked = true;
}
}
function checkAll(div, v)
{
bChanged = true;
_check_all(div, {tagName: 'INPUT', property: {type: 'checkbox'}}, v);
}
function _check_all(div, isElement, v)
{
var c = BX.findChildren(BX('subdirs_' + div), isElement, true);
for (var i = 0; i < c.length; i++)
{
c[i].checked = v;
}
}
function onPathInput(input)
{
const valueForSearch = input.value.replaceAll(/#IBLOCK_ID#|#FORUM_ID#/g,'');
if (valueForSearch.indexOf('_') !== -1)
{
const caret = input.selectionStart;
input.value = input.value.replace('_', '-');
input.value = input.value.replace('#IBLOCK-ID#', '#IBLOCK_ID#');
input.value = input.value.replace('#FORUM-ID#', '#FORUM_ID#');
if (input.setSelectionRange)
{
input.focus();
input.setSelectionRange(caret, caret);
}
BX.Runtime.loadExtension('ui.notification')
.then(res => {
BX.UI.Notification.Center.notify({
content: '<?= Loc::getMessage("SITEMAP_FILENAME_SYMBOL_NOTIFY") ?>'
});
});
}
}
</script>
<tr class="adm-detail-required-field">
<td width="40%"><?=Loc::getMessage("SITEMAP_FILENAME_FILE")?>:</td>
<td width="60%">
<input type="text"
name="FILENAME_FILES"
value="<?=Converter::getHtmlConverter()->encode($arSitemap['SETTINGS']["FILENAME_FILES"])?>"
style="width:70%"
oninput="onPathInput(this)"
>
</td>
</tr>
<tr>
<td width="40%" valign="top"><?=Loc::getMessage('SEO_SITEMAP_STRUCTURE_TYPE')?>:</td>
<td width="60%">
<input
type="radio"
name="log"
id="log_Y"
value="Y"<?=$bLogical ? ' checked="checked"' : ''?>
onclick="switchLogic(true)"
/>
<label for="log_Y">
<?=Loc::getMessage('SEO_SITEMAP_STRUCTURE_TYPE_Y')?>
</label>
<br/>
<input
type="radio"
name="log"
id="log_N"
value="N"<?=$bLogical ? '' : ' checked="checked"'?>
onclick="switchLogic(false)"
/>
<label for="log_N">
<?=Loc::getMessage('SEO_SITEMAP_STRUCTURE_TYPE_N')?>
</label>
</td>
</tr>
<tr>
<td width="40%" valign="top"><?=Loc::getMessage('SEO_SITEMAP_STRUCTURE')?>:</td>
<td width="60%">
<input type="hidden" name="DIR[<?=$startDir?>]" value="N"/><input type="checkbox"
name="DIR[<?=$startDir?>]"
id="DIR_<?=$startDir?>"<?=$bChecked ? ' checked="checked"' : ''?>
value="Y"
onclick="checkAll('<?=$startDir?>', this.checked);"/> <label for="DIR_<?=$startDir?>"><?=$startDir?></label></div>
<div id="subdirs_<?=$startDir?>">
<?
if (is_array($arSitemap['SETTINGS']['FILE']))
{
foreach ($arSitemap['SETTINGS']['FILE'] as $dir => $value)
{
?>
<input type="hidden"
name="FILE[<?=Converter::getHtmlConverter()->encode($dir);?>]"
value="<?=$value == 'N' ? 'N' : 'Y'?>"/>
<?
}
}
else
{
$arSitemap['SETTINGS']['FILE'] = array();
}
if (is_array($arSitemap['SETTINGS']['DIR']))
{
foreach ($arSitemap['SETTINGS']['DIR'] as $dir => $value)
{
if ($dir != $startDir)
{
?>
<input type="hidden"
name="DIR[<?=Converter::getHtmlConverter()->encode($dir);?>]"
value="<?=$value == 'N' ? 'N' : 'Y'?>"/>
<?
}
}
}
else
{
$arSitemap['SETTINGS']['DIR'] = array();
}
$arChecked = array_merge($arSitemap['SETTINGS']['DIR'], $arSitemap['SETTINGS']['FILE']);
echo seo_getDir($bLogical, $siteId, $startDir, 1, $bChecked, $arChecked);
?>
</td>
</tr>
<tr>
<td width="40%" valign="top"><?=Loc::getMessage('SEO_SITEMAP_STRUCTURE_FILE_MASK')?>:</td>
<td width="60%">
<input
type="text"
name="FILE_MASK"
value="<?=Converter::getHtmlConverter()->encode($arSitemap['SETTINGS']['FILE_MASK'])?>"
/>
<?
echo BeginNote();
echo Loc::getMessage('SEO_FILE_MASK_HELP');
echo EndNote();
?>
</td>
</tr>
<?
if ($bIBlock)
{
$tabControl->BeginNextTab();
?>
<tr class="adm-detail-required-field">
<td width="40%"><?=Loc::getMessage("SITEMAP_FILENAME_IBLOCK")?>:</td>
<td width="60%">
<input type="text"
name="FILENAME_IBLOCK"
value="<?=Converter::getHtmlConverter()->encode($arSitemap['SETTINGS']["FILENAME_IBLOCK"])?>"
style="width:70%"
oninput="onPathInput(this)"
>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<?
$dbRes = CIBlock::GetList(array("ID" => "ASC"), array(
'SITE_ID' => $siteId,
));
$bFound = false;
while ($arRes = $dbRes->Fetch())
{
if (!$bFound)
{
?>
<script>
var loadedIblocks = {};
function loadIblock(sw, iblock, section, div, section_checked, element_checked)
{
if (!!BX('IBLOCK_ACTIVE_' + div) && !BX('IBLOCK_ACTIVE_' + div).checked)
return;
var row = 'subdirs_row_' + div,
div = 'subdirs_' + div;
if (!!sw && BX.hasClass(sw, 'sitemap-opened'))
{
BX(row).style.display = 'none';
BX.removeClass(sw, 'sitemap-opened');
}
else if (!!loadedIblocks[div])
{
if (sw)
{
BX.addClass(sw, 'sitemap-opened');
}
BX(row).style.display = '';
}
else
{
BX(div).innerHTML = BX.message('JS_CORE_LOADING');
BX.ajax.get('<?=$APPLICATION->GetCurPageParam('',
array('dir', 'iblock', 'section', 'depth'))?>',
{
iblock: iblock,
section: section,
section_checked: section_checked ? 'Y' : 'N',
element_checked: element_checked ? 'Y' : 'N',
sessid: BX.bitrix_sessid(),
},
function (res)
{
BX(div).innerHTML = res;
BX(row).style.display = '';
if (sw)
{
BX.addClass(sw, 'sitemap-opened');
}
loadedIblocks[div] = true;
BX.adminFormTools.modifyFormElements(BX(div));
});
}
BX.onCustomEvent('onAdminTabsChange');
}
function checkAllSection(div, v)
{
_check_all(div,
{tagName: 'INPUT', property: {type: 'checkbox'}, attribute: {'data-type': 'section'}},
v);
}
function checkAllElement(div, v)
{
_check_all(div,
{tagName: 'INPUT', property: {type: 'checkbox'}, attribute: {'data-type': 'element'}},
v);
}
function setIblockActive(check, cont)
{
var row = check.parentNode.parentNode;
if (!check.checked)
{
row.cells[1].style.textDecoration = 'line-through';
BX('subdirs_row_' + cont).style.display = 'none';
}
else
{
row.cells[1].style.textDecoration = 'none';
}
}
</script>
<table class="internal" style="width: 80%;">
<tr class="heading">
<td colspan="2"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_NAME')?></td>
<td width="100"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_AUTO')?></td>
<td width="100"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_LIST')?></td>
<td width="100"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_SECTIONS')?></td>
<td width="120"><?=Loc::getMessage('SEO_SITEMAP_IBLOCK_ELEMENTS')?></td>
</tr>
<?
$bFound = true;
}
$r = RandString(8);
$d = $arRes['ID'];
$bList = $arRes['LIST_PAGE_URL'] <> '';
$bListChecked =
$bList
&& (!is_array($arSitemap['SETTINGS']['IBLOCK_LIST'])
|| $arSitemap['SETTINGS']['IBLOCK_LIST'][$d] == 'Y');
$bSection = $arRes['SECTION_PAGE_URL'] <> '';
$bSectionChecked =
$bSection
&& (!is_array($arSitemap['SETTINGS']['IBLOCK_SECTION'])
|| $arSitemap['SETTINGS']['IBLOCK_SECTION'][$d] == 'Y');
$bElement = $arRes['DETAIL_PAGE_URL'] <> '';
$bElementChecked =
$bElement
&& (!is_array($arSitemap['SETTINGS']['IBLOCK_ELEMENT'])
|| $arSitemap['SETTINGS']['IBLOCK_ELEMENT'][$d] == 'Y');
$bAuto = ($bElementChecked || $bSectionChecked) && $arSitemap['SETTINGS']['IBLOCK_AUTO'][$d] == 'Y';
$bActive =
!isset($arSitemap['SETTINGS']['IBLOCK_ACTIVE'])
|| $arSitemap['SETTINGS']['IBLOCK_ACTIVE'][$d]
== 'Y';
?>
<tr>
<td width="20">
<span onclick="loadIblock(this, '<?=$d?>', '0', '<?=$r?>', BX('IBLOCK_SECTION_<?=$d?>').checked, BX('IBLOCK_ELEMENT_<?=$d?>').checked);"
class="sitemap-tree-icon-iblock"></span></td>
<td<?=$bActive ? '' : ' style="text-decoration:line-through"'?>>
<input type="hidden" name="IBLOCK_ACTIVE[<?=$d?>]" value="N"/>
<input type="checkbox"
name="IBLOCK_ACTIVE[<?=$d?>]"
id="IBLOCK_ACTIVE_<?=$r?>"
onclick="setIblockActive(this, '<?=$r?>')"<?=$bActive ? ' checked="checked"' : ''?>
value="Y"/>
<a href="iblock_edit.php?lang=<?=LANGUAGE_ID?>&ID=<?=$d?>&type=<?=$arRes['IBLOCK_TYPE_ID']?>&admin=Y">[<?=$arRes['ID']?>] <?=Converter::getHtmlConverter()
->encode($arRes['NAME'] . ' (' . $arRes['CODE'] . ')')?></a>
</td>
<td align="center"><input type="hidden"
name="IBLOCK_AUTO[<?=$d?>]"
value="N"/><input type="checkbox"
name="IBLOCK_AUTO[<?=$d?>]"
id="IBLOCK_AUTO_<?=$d?>"
value="Y"<?=$bAuto ? ' checked="checked"'
: ''?> /> <label for="IBLOCK_AUTO_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label>
</td>
<td align="center"><input type="hidden"
name="IBLOCK_LIST[<?=$d?>]"
value="N"/><input type="checkbox"
name="IBLOCK_LIST[<?=$d?>]"
id="IBLOCK_LIST_<?=$d?>"
value="Y"<?=$bList ? '' : ' disabled="disabled"'?><?=$bListChecked ? ' checked="checked"'
: ''?> /> <label for="IBLOCK_LIST_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label>
</td>
<td align="center"><input type="hidden"
name="IBLOCK_SECTION[<?=$d?>]"
value="N"/><input type="checkbox"
name="IBLOCK_SECTION[<?=$d?>]"
id="IBLOCK_SECTION_<?=$d?>"
value="Y"<?=$bSection ? '' : ' disabled="disabled"'?><?=$bSectionChecked
? ' checked="checked"' : ''?>
onclick="checkAllSection('<?=$r?>', this.checked);"/> <label for="IBLOCK_SECTION_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label>
</td>
<td align="center"><input type="hidden"
name="IBLOCK_ELEMENT[<?=$d?>]"
value="N"/><input type="checkbox"
name="IBLOCK_ELEMENT[<?=$d?>]"
id="IBLOCK_ELEMENT_<?=$d?>"
value="Y"<?=$bElement ? '' : ' disabled="disabled"'?><?=$bElementChecked
? ' checked="checked"' : ''?>
onclick="checkAllElement('<?=$r?>', this.checked);"/> <label for="IBLOCK_ELEMENT_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label>
</td>
</tr>
<tr style="display: none" id="subdirs_row_<?=$r?>">
<?
if (is_array($arSitemap['SETTINGS']['IBLOCK_SECTION_SECTION'][$arRes['ID']]))
{
foreach ($arSitemap['SETTINGS']['IBLOCK_SECTION_SECTION'][$arRes['ID']] as $dir => $value)
{
?>
<input type="hidden"
name="IBLOCK_SECTION_SECTION[<?=$arRes['ID']?>][<?=Converter::getHtmlConverter()
->encode($dir)
;?>]"
value="<?=$value == 'N' ? 'N' : 'Y'?>"/>
<?
}
}
if (is_array($arSitemap['SETTINGS']['IBLOCK_SECTION_ELEMENT'][$arRes['ID']]))
{
foreach ($arSitemap['SETTINGS']['IBLOCK_SECTION_ELEMENT'][$arRes['ID']] as $dir => $value)
{
?>
<input type="hidden"
name="IBLOCK_SECTION_ELEMENT[<?=$arRes['ID']?>][<?=Converter::getHtmlConverter()
->encode($dir)
;?>]"
value="<?=$value == 'N' ? 'N' : 'Y'?>"/>
<?
}
}
?>
<td colspan="6" align="center" id="subdirs_<?=$r?>"></td>
</tr>
<?
}
if ($bFound)
{
?>
</table>
<?
}
else
{
echo BeginNote(), Loc::getMessage('SEO_SITEMAP_NO_IBLOCK_FOUND'), EndNote();
}
?>
</td>
</tr>
<?
}
if ($bForum)
{
$tabControl->BeginNextTab();
?>
<tr class="adm-detail-required-field">
<td width="40%"><?=Loc::getMessage("SITEMAP_FILENAME_FORUM")?>:</td>
<td width="60%">
<input type="text"
name="FILENAME_FORUM"
value="<?=Converter::getHtmlConverter()->encode($arSitemap['SETTINGS']["FILENAME_FORUM"])?>"
style="width:70%"
oninput="onPathInput(this)"
>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<?
$dbRes =
CForumNew::GetListEx(array("ID" => "ASC"),
array('PERMS' => array(2, 'A'), 'ACTIVE' => 'Y', 'SITE_ID' => $siteId));
$bFound = false;
while (!!$dbRes && ($arRes = $dbRes->Fetch()))
{
if (!$bFound)
{
?>
<script type="text/javascript">
function setForumActive(check, cont)
{
var row = check.parentNode.parentNode;
if (!check.checked)
{
row.cells[0].style.textDecoration = 'line-through';
}
else
{
row.cells[0].style.textDecoration = 'none';
}
}
</script>
<table class="internal" style="width: 80%;">
<tr class="heading">
<td><?=GetMessage("SEO_SITEMAP_FORUM")?></td>
<td width="100"><?=GetMessage("SEO_SITEMAP_IBLOCK_AUTO")?></td>
<td width="100"><?=GetMessage("SEO_SITEMAP_FORUM_TOPIC")?></td>
</tr>
<?
$bFound = true;
}
$r = RandString(8);
$d = $arRes['ID'];
$bTopic = $arRes['PATH2FORUM_MESSAGE'] <> '';
$bTopicChecked =
$bTopic
&& (!is_array($arSitemap['SETTINGS']['FORUM_TOPIC'])
|| $arSitemap['SETTINGS']['FORUM_TOPIC'][$d] == 'Y');
$bAuto = $bTopicChecked && $arSitemap['SETTINGS']['FORUM_AUTO'][$d] == 'Y';
$bActive =
!isset($arSitemap['SETTINGS']['FORUM_ACTIVE']) || $arSitemap['SETTINGS']['FORUM_ACTIVE'][$d] == 'Y';
?>
<tr>
<td<?=$bActive ? '' : ' style="text-decoration:line-through"'?>>
<input type="hidden" name="FORUM_ACTIVE[<?=$d?>]" value="N"/>
<input type="checkbox"
name="FORUM_ACTIVE[<?=$d?>]"
id="FORUM_ACTIVE_<?=$r?>"
onclick="setForumActive(this, '<?=$r?>')"<?=$bActive ? ' checked="checked"' : ''?>
value="Y"/>
<a href="forum_edit.php?lang=<?=LANGUAGE_ID?>&ID=<?=$d?>">[<?=$arRes['ID']?>] <?=Converter::getHtmlConverter()
->encode($arRes['NAME'])?></a>
</td>
<td align="center"><input type="hidden" name="FORUM_AUTO[<?=$d?>]" value="N"/><input type="checkbox"
name="FORUM_AUTO[<?=$d?>]"
id="FORUM_AUTO_<?=$d?>"
value="Y"<?=$bAuto ? ' checked="checked"'
: ''?> /> <label for="FORUM_AUTO_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label></td>
<td align="center"><input type="hidden"
name="FORUM_TOPIC[<?=$d?>]"
value="N"/><input type="checkbox"
name="FORUM_TOPIC[<?=$d?>]"
id="FORUM_TOPIC_<?=$d?>"
value="Y"<?=$bTopic ? '' : ' disabled="disabled"'?><?=$bTopicChecked ? ' checked="checked"'
: ''?> /> <label for="FORUM_ELEMENT_<?=$d?>"><?=Loc::getMessage('MAIN_YES')?></label>
</td>
</tr>
<?
}
if ($bFound)
{
?>
</table>
<?
}
else
{
echo BeginNote(), Loc::getMessage('SEO_SITEMAP_NO_FORUM_FOUND'), EndNote();
}
?>
</td>
</tr>
<?
}
$tabControl->Buttons(array());
?>
<input type="submit"
name="save_and_add"
value="<?=Converter::getHtmlConverter()->encode(Loc::getMessage('SEO_SITEMAP_SAVEANDRUN'))?>"/>
<?=bitrix_sessid_post();?>
<?
$tabControl->End();
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php");
?>