Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/linkor.redirectpro/ |
Upload File : |
<? /******************************************************************************* * linkor.redirectpro - SEO redirects module. PRO version * Copyright 2021 Nikita Demchenkov * MIT License ******************************************************************************/ namespace Linkor\Redirectpro; if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); use Bitrix\Main\Application; use Bitrix\Main\Localization\Loc; use Bitrix\Main\HttpApplication; use Bitrix\Main\Loader; use Bitrix\Main\Config\Option; $app = Application::getInstance(); $context = $app->getContext(); $request = $context->getRequest(); Loc::loadMessages(__FILE__); // Get module ID $request = HttpApplication::getInstance()->getContext()->getRequest(); $module_id = htmlspecialchars($request['mid'] != '' ? $request['mid'] : $request['id']); if (Loader::includeSharewareModule($module_id) === Loader::MODULE_DEMO_EXPIRED) { $message = new \CAdminMessage(['MESSAGE' => Loc::getMessage("LINKOR_REDIRECT_PRO_DEMO_WARNING"), 'TYPE' => 'ERROR']); echo $message->Show(); return false; } $siteArr = GetAllSites(); $iblockArr = GetAllIBlocks(); // Save settings if (check_bitrix_sessid() && $request->isPost()) { $is_correct = true; if ($request->getPost("save") != "") { $data = $_POST; foreach ($siteArr as $arSite) { if (!$arSite['DOC_ROOT_FULL'] && !file_exists($arSite['DOC_ROOT_FULL'])) { continue; } OptionsUpdate($data, $arSite['LID']); if ($_FILES[$arSite['LID'] . '_use_redirect_file']['name']) { if (!CSVFileUpload($_FILES, $arSite['LID'])) { $is_correct = false; break; } else { $configRoot = $arSite['DOC_ROOT_FULL'] . "/local/config/" . ID; $data[$arSite['LID'] . "_redirect_urls"] = Select(true, $configRoot . "/upload_urls.csv", $configRoot . "/urls.csv"); } } Update($data, $arSite['LID']); } } if ($request->getPost("delete_file") != "") { CSVFileDelete($_POST['site_id']); } if ($is_correct) { $message = new \CAdminMessage(['MESSAGE' => Loc::getMessage("LINKOR_REDIRECT_PRO_SAVE_SUCCESS"), 'TYPE' => 'OK']); echo $message->Show(); } } // Check website settings $error = false; foreach ($siteArr as $arSite) { if (!$arSite['DOC_ROOT_FULL'] && count($siteArr) > 1) { $message = new \CAdminMessage(['MESSAGE' => Loc::getMessage("LINKOR_REDIRECT_PRO_ERR_DOCROOT", ["#SITE_ID#" => $arSite['LID']]), 'TYPE' => 'ERROR']); echo $message->Show(); $error = true; } elseif (!file_exists($arSite['DOC_ROOT_FULL'])) { $message = new \CAdminMessage(['MESSAGE' => Loc::getMessage("LINKOR_REDIRECT_PRO_ERR_DOCROOT_NOEXIST", ["#SITE_ID#" => $arSite['LID']]), 'TYPE' => 'ERROR']); echo $message->Show(); $error = true; } $checkFolders = [ $arSite['DOC_ROOT_FULL'] . "/local", $arSite['DOC_ROOT_FULL'] . "/local/config/", $arSite['DOC_ROOT_FULL'] . "/local/config/" . ID . "/", ]; foreach ($checkFolders as $folder) { if (DirIsSLink($folder)) { $message = new \CAdminMessage(['MESSAGE' => Loc::getMessage("LINKOR_REDIRECT_PRO_ERR_SYMLINK", ["#FOLDER#" => $folder]), 'TYPE' => 'ERROR']); echo $message->Show(); $error = true; } } } if (!$error) { $aTabs = []; foreach ($siteArr as $arSite) { $currentOptions = Options($arSite['DOC_ROOT_FULL'] . "/local/config/" . ID . '/options.php'); $domain = $arSite["SERVER_NAME"] ? rtrim($arSite["SERVER_NAME"] . $arSite["DIR"], "/") : "test.ru"; $arTab = [ "DIV" => $arSite['LID'], "TAB" => Loc::getMessage("LINKOR_REDIRECT_PRO_BTN_OPTIONS", ["#SITE_ID#" => $arSite['LID']]), "TITLE" => Loc::getMessage("LINKOR_REDIRECT_PRO_OPTIONS_TITLE", ["#SITE_NAME#" => $arSite["NAME"]]), "DOMAIN" => $arSite["SERVER_NAME"], "OPTIONS" => array( array( $arSite['LID'] . '_redirect_www', Loc::getMessage('LINKOR_REDIRECT_PRO_OPTIONS_WWW_TITLE', ["#HOST#" => $domain]), $currentOptions["redirect_www"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_slash', Loc::getMessage('LINKOR_REDIRECT_PRO_OPTIONS_SLASH_TITLE', ["#HOST#" => $domain]), $currentOptions["redirect_slash"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_index', Loc::getMessage('LINKOR_REDIRECT_PRO_OPTIONS_INDEX_TITLE', ["#HOST#" => $domain]), $currentOptions["redirect_index"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_multislash', Loc::getMessage('LINKOR_REDIRECT_PRO_OPTIONS_MULTISLASH_TITLE', ["#HOST#" => $domain]), $currentOptions["redirect_multislash"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_manyslash', Loc::getMessage('LINKOR_REDIRECT_PRO_OPTIONS_MANYSLASH_TITLE', ["#HOST#" => $domain]), $currentOptions["redirect_manyslash"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_from_uppercase', Loc::getMessage('LINKOR_REDIRECT_PRO_FROM_UPPERCASE', ["#HOST#" => $domain]), $currentOptions["redirect_from_uppercase"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_from_404', Loc::getMessage('LINKOR_REDIRECT_PRO_FROM_404', ["#HOST#" => $domain]), $currentOptions["redirect_from_404"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_use_redirect_urls', Loc::getMessage('LINKOR_REDIRECT_PRO_URLS_TITLE', ["#HOST#" => $domain]), $currentOptions["use_redirect_urls"] == "Y" ? "Y" : "N", array('checkbox') ), array( $arSite['LID'] . '_redirect_ignore_query', Loc::getMessage('LINKOR_REDIRECT_PRO_IGNORE_QUERY', ["#HOST#" => $domain]), $currentOptions["redirect_ignore_query"] == "Y" ? "Y" : "N", array('checkbox') ) ), "TRACK_OPTIONS" => $currentOptions["track_ib"], "SITE" => $arSite ]; array_push($aTabs, $arTab); } $tabControl = new \CAdminTabControl( 'tabControl', $aTabs ); $tabControl->begin(); ?> <div class="alert-changes" style="margin-left: 15px"> </div> <form method="post" enctype="multipart/form-data" action="<?= sprintf('%s?mid=%s&lang=%s', $request->getRequestedPage(), urlencode($mid), LANGUAGE_ID) ?>" type="get"> <?= bitrix_sessid_post(); ?> <? foreach ($aTabs as $aTab): ?> <? $docRoot = GetDocRootBySiteName($aTab['DIV']); $siteDir = str_replace($aTab["SITE"]["ABS_DOC_ROOT"], "", $aTab["SITE"]["DOC_ROOT_FULL"]); $upFile = $docRoot . "/local/config/" . ID . "/upload_urls.csv"; $defFile = $docRoot . "/local/config/" . ID . "/urls.csv"; $cacheFile = $docRoot . "/local/config/" . ID . "/urls.php"; ?> <? $tabControl->beginNextTab(); ?> <? __AdmSettingsDrawList($module_id, $aTab['OPTIONS']); ?> <tr> <td><?= Loc::getMessage("LINKOR_REDIRECT_PRO_IB_TRACK") ?></td> <td><input type="button" name="" value="<?= Loc::getMessage("LINKOR_REDIRECT_PRO_IB_TRACK_BTN") ?>" onclick="ToggleRow('row_ib_<?=$aTab['DIV']?>')"></td> </tr> <tr class="hidden" id="row_ib_<?=$aTab['DIV']?>"> <td colspan="2"> <table width="100%"> <thead> <tr> <td style="width: 100px"><?= Loc::getMessage("LINKOR_REDIRECT_PRO_IB_TRACK_COL0") ?></td> <td style="width: 15%"><?= Loc::getMessage("LINKOR_REDIRECT_PRO_IB_TRACK_COL1") ?></td> <td><?= Loc::getMessage("LINKOR_REDIRECT_PRO_IB_TRACK_COL2") ?></td> <td><?= Loc::getMessage("LINKOR_REDIRECT_PRO_IB_TRACK_COL3") ?></td> </tr> </thead> <tbody> <? foreach ($iblockArr as $iblock) { $iblock["SECTION_PAGE_URL"] = str_replace("#SITE_DIR#", $siteDir, $iblock["SECTION_PAGE_URL"]); $iblock["DETAIL_PAGE_URL"] = str_replace("#SITE_DIR#", $siteDir, $iblock["DETAIL_PAGE_URL"]); $sectionTpl = $aTab["TRACK_OPTIONS"][$iblock["ID"]]["SECTION"] ?: $iblock["SECTION_PAGE_URL"]; $elementTpl = $aTab["TRACK_OPTIONS"][$iblock["ID"]]["ELEMENT"] ?: $iblock["DETAIL_PAGE_URL"]; ?> <tr> <td> <input name="<?= $aTab['DIV'] ?>_track_ib[<?= $iblock['ID'] ?>][ACTIVE]" value="Y" type="checkbox" <?= $aTab["TRACK_OPTIONS"][$iblock["ID"]]["ACTIVE"] == "Y" ? "checked" : "" ?>> </td> <td> <a href="/bitrix/admin/iblock_edit.php?type=<?= $iblock["IBLOCK_TYPE_ID"] ?>&ID=<?= $iblock["ID"] ?>" target="_blank">[<?= $iblock["ID"] ?>] <?= $iblock["NAME"] ?></a> </td> <td> <input type="text" value="<?= $sectionTpl ?>" name="<?= $aTab['DIV'] ?>_track_ib[<?= $iblock['ID'] ?>][SECTION]" style="width: 96%;"> </td> <td> <input type="text" value="<?= $elementTpl ?>" name="<?= $aTab['DIV'] ?>_track_ib[<?= $iblock['ID'] ?>][ELEMENT]" style="width: 96%;"> </td> </tr> <? } ?> </tbody> </table> <br> <br> </td> </tr> <tr> <td> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_UPLOAD_FILE_LABEL") ?> <? if (!$aTab["DOMAIN"]) { ?> <br> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_UPLOAD_FILE_LABEL_ERROR", ["#SITE_EDIT_LINK#" => "/bitrix/admin/site_edit.php?lang=ru&LID=" . $aTab['DIV'] . "&tabControl_active_tab=edit1"]) ?> <? } ?> </td> <td class="use_redirect_row"> <? if (!file_exists($upFile)): ?> <input type="file" name="<?= $aTab['DIV'] ?>_use_redirect_file" id="<?= $aTab['DIV'] ?>use_redirect_file"> <? else: ?> <? if ($aTab["DOMAIN"]): ?> <span class="delete_link"><?= Loc::getMessage("LINKOR_REDIRECT_PRO_FILE_NAME") ?></span> <a href="<?= ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443 ? "https://" : "http://") . $aTab["DOMAIN"] . $siteDir ?>/local/config/<?= ID ?>/upload_urls.csv" class="delete_link"> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_DOWNLOAD_FILE") ?> </a> <? endif; ?> <input type="file" name="<?= $aTab['DIV'] ?>_use_redirect_file" id="<?= $aTab['DIV'] ?>use_redirect_file"> <? endif; ?> </td> </tr> <tr> <td colspan="2"> <table width="100%" class="js-table-autoappendrows"> <thead> <tr> <td> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_TABLE_LABEL_FROM") ?> </td> <td> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_TABLE_LABEL_TO") ?> </td> <td> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_TABLE_LABEL_TYPE") ?> </td> <td style="width: 10px"> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_TABLE_LABEL_USE_MASK") ?> </td> </tr> </thead> <tbody> <? $i = 0; foreach (AppendValues(Select(true, $upFile, $defFile, $cacheFile), 5, ["", "", ""]) as $url) { $i++; ?> <tr data-idx="<?= $i ?>"> <td> <input type="text" name="<?= $aTab['DIV'] ?>_redirect_urls[<?= $i ?>][0]" value="<?= htmlspecialcharsex($url[0]) ?>" style="width:96%;" onchange="CheckUrl(this)" class="table-from"> </td> <td> <input type="text" name="<?= $aTab['DIV'] ?>_redirect_urls[<?= $i ?>][1]" value="<?= htmlspecialcharsex($url[1]) ?>" style="width:96%;"> </td> <td> <select name="<?= $aTab['DIV'] ?>_redirect_urls[<?= $i ?>][2]" title="<?= Loc::getMessage("LINKOR_REDIRECT_PRO_URLS_STATUS") ?>" style="width:96%;"> <option value="301" <?= $url[2] == "301" ? "selected" : "" ?>>301</option> <option value="302" <?= $url[2] == "302" ? "selected" : "" ?>>302</option> </select> </td> <td> <input name="<?= $aTab['DIV'] ?>_redirect_urls[<?= $i ?>][3]" value="Y" type="checkbox" title="<?= Loc::getMessage("LINKOR_REDIRECT_PRO_URLS_IS_PART_URL") ?>" <?= $url[3] == "Y" ? "checked" : "" ?>> </td> </tr> <? } ?> </tbody> </table> <span class="adm-info-message" style="margin-bottom: 0;"> <?= Loc::getMessage("LINKOR_REDIRECT_PRO_TABLE_USE_MASK_NOTICE") ?> </span> </td> </tr> <tr> <td> <input type="hidden" name="site_id" value="<?= $aTab['DIV'] ?>"> </td> </tr> <? endforeach; ?> <? $tabControl->buttons(); ?> <input class="adm-btn-save" type="submit" name="save" value="<?= Loc::getMessage("LINKOR_REDIRECT_PRO_SAVE_SETTINGS") ?>"> </form> <? $tabControl->end(); ?> <style> .use_redirect_file_submit { margin-left: 10px; } .use_redirect_row { display: flex; align-items: center; } .delete_link { display: block; margin-right: 10px; } select[multiple] option[selected] { background: #eee; } table tr.hidden { display: none !important; } </style> <script> BX.ready(function () { "use strict"; // autoappend rows function makeAutoAppend($table) { function bindEvents($row) { for (let $input of $row.querySelectorAll('input[type="text"]')) { $input.addEventListener("change", function (event) { let $tr = event.target.closest("tr"); let $trLast = $table.rows[$table.rows.length - 1]; if ($tr != $trLast) { return; } $table.insertRow(-1); $trLast = $table.rows[$table.rows.length - 1]; $trLast.innerHTML = $tr.innerHTML; let idx = parseInt($tr.getAttribute("data-idx")) + 1; $trLast.setAttribute("data-idx", idx); for (let $input of $trLast.querySelectorAll("input,select")) { let name = $input.getAttribute("name"); if (name) { $input.setAttribute("name", name.replace(/([a-zA-Z0-9])\[\d+\]/, "$1[" + idx + "]")); } } bindEvents($trLast); }); } } for (let $row of document.querySelectorAll(".js-table-autoappendrows tr")) { bindEvents($row); } } for (let $table of document.querySelectorAll(".js-table-autoappendrows")) { makeAutoAppend($table); } var items = document.getElementsByClassName("table-from"); for (var i = 0; i < items.length; i++) { CheckUrl(items[i]); } }); function validateURL(textval) { var urlregex = new RegExp( "^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$"); return urlregex.test(textval); } function clearUrl(url) { return url.replace(/^.*\/\/[^\/]+/, ''); } function CheckUrl(context) { if (validateURL(context.value)) { let newUrl = clearUrl(context.value); context.value = newUrl; let alert = document.getElementsByClassName('alert-changes'); alert[0].innerHTML = '<div class="adm-info-message"><?= Loc::getMessage("LINKOR_REDIRECT_PRO_URL_WARNING") ?></div>'; } } function ToggleRow(id) { BX.toggleClass(BX(id), ["hidden", ""]); } </script> <? } ?>