403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/linkor.redirectpro/options.php
<?
/*******************************************************************************
 * 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\.&amp;%\$\-]+)*@)*((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\.\,\?\'\\\+&amp;%\$#\=~_\-]+))*$");
			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>
<? } ?>

Youez - 2016 - github.com/yon3zu
LinuXploit