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/search/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/search/options.php
<?php
IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/main/options.php');
IncludeModuleLangFile(__FILE__);
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/prolog.php';
/** @global CMain $APPLICATION */
global $APPLICATION;
/** @var CAdminMessage $message */
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/backup.php");

$openSearchAnalyzers = CSearchOpenSearch::getLanguageAnalyzers();

$bVarsFromForm = false;

$aTabs = [
	0 => [
		'DIV' => 'index',
		'TAB' => GetMessage('SEARCH_OPTIONS_TAB_INDEX'),
		'ICON' => 'search_settings',
		'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_INDEX_2'),
		'OPTIONS' => [
			'max_file_size' => [GetMessage('SEARCH_OPTIONS_REINDEX_MAX_SIZE'), ['text', 6]],
			'include_mask' => [GetMessage('SEARCH_OPTIONS_MASK_INC'), ['text', 60]],
			'exclude_mask' => [GetMessage('SEARCH_OPTIONS_MASK_EXC'), ['textarea', 5]],
			'page_tag_property' => [GetMessage('SEARCH_OPTIONS_PAGE_PROPERTY'), ['text', 'tags']],
		]
	],
	1 => [
		'DIV' => 'stemming',
		'TAB' => GetMessage('SEARCH_OPTIONS_TAB_STEMMING'),
		'ICON' => 'search_settings',
		'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_STEMMING'),
		'OPTIONS' => [
			'use_stemming' => [GetMessage('SEARCH_OPTIONS_USE_STEMMING'), ['checkbox', 'N']],
			'agent_stemming' => [GetMessage('SEARCH_OPTIONS_AGENT_STEMMING'), ['checkbox', 'N']],
			'agent_duration' => [GetMessage('SEARCH_OPTIONS_AGENT_DURATION'), ['text', 6]],
			'full_text_engine' => [GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE'), ['select', [
				'bitrix' => GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_BITRIX'),
				'sphinx' => GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_SPHINX'),
				'opensearch' => GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_OPENSEARCH'),
			]]],
			'letters' => [GetMessage('SEARCH_OPTIONS_LETTERS'), ['text', 45], 'bitrix'],
			'sphinx_connection' => [GetMessage('SEARCH_OPTIONS_SPHINX_CONNECTION'), ['text', 45], 'sphinx'],
			'sphinx_index_name' => [GetMessage('SEARCH_OPTIONS_SPHINX_INDEX_NAME'), ['text', 45], 'sphinx'],
			'sphinx_note' => ['', ['note', '
<pre>
#sphinx.conf
index bitrix
{
	#main settings
		type = rt
		path = /var/lib/sphinxsearch/data/bitrix
		docinfo = inline
	#choose appropriate type of morphology to use
		#morphology = lemmatize_ru_all, lemmatize_en_all, lemmatize_de_all, stem_enru
		morphology = stem_enru, soundex
	#these settings are used by bitrix:search.title component
		dict = keywords
		prefix_fields = title
		infix_fields=
		min_prefix_len = 2
		enable_star = 1
	#all fields must be defined exactly as followed
		rt_field = title
		rt_field = body
		rt_attr_uint = module_id
		rt_attr_string = module
		rt_attr_uint = item_id
		rt_attr_string = item
		rt_attr_uint = param1_id
		rt_attr_string = param1
		rt_attr_uint = param2_id
		rt_attr_string = param2
		rt_attr_timestamp = date_change
		rt_attr_timestamp = date_to
		rt_attr_timestamp = date_from
		rt_attr_uint = custom_rank
		rt_attr_multi = tags
		rt_attr_multi = right
		rt_attr_multi = site
		rt_attr_multi = param
	#depends on settings of your site
		# uncomment for single byte character set
		charset_type = sbcs
		# uncomment for UTF character set
		#charset_type = utf-8
}
</pre>
			'
	], 'sphinx'],
			'mysql_note' => ['', ['note', GetMessage('SEARCH_OPTIONS_MYSQL_NOTE')], 'mysql'],
			'opensearch_connection' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_CONNECTION'), ['text', 45], 'opensearch'],
			'opensearch_user' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_USER'), ['text', 45], 'opensearch'],
			'opensearch_password' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_PASSWORD'), ['password', 45], 'opensearch'],
			'opensearch_index' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_INDEX'), ['text', 45], 'opensearch'],
			'opensearch_analyzer' => ['', ['note', GetMessage('SEARCH_OPTIONS_OPENSEARCH_ANALYZER_NOTE')], 'opensearch'],
		]
	],
	2 => [
		'DIV' => 'search',
		'TAB' => GetMessage('SEARCH_OPTIONS_TAB_SEARCH'),
		'ICON' => 'search_settings',
		'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_SEARCH'),
		'OPTIONS' => [
			'max_result_size' => [GetMessage('SEARCH_OPTIONS_MAX_RESULT_SIZE'), ['text', 6]],
			'max_body_size' => [GetMessage('SEARCH_OPTIONS_MAX_BODY_SIZE'), ['text', 6]],
			'use_tf_cache' => [GetMessage('SEARCH_OPTIONS_USE_TF_CACHE'), ['checkbox', 'N']],
			'use_word_distance' => [
				GetMessage('SEARCH_OPTIONS_USE_WORD_DISTANCE'),
				['checkbox', 'N'],
			],
			'use_social_rating' => [
				GetMessage('SEARCH_OPTIONS_USE_SOCIAL_RATING'),
				['checkbox', 'N'],
			],
			'suggest_save_days' => [GetMessage('SEARCH_OPTIONS_SUGGEST_SAVE_DAYS'), ['text', 6]],
		]
	],
	3 => [
		'DIV' => 'statistic',
		'TAB' => GetMessage('SEARCH_OPTIONS_TAB_STATISTIC'),
		'ICON' => 'search_settings',
		'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_STATISTIC'),
		'OPTIONS' => [
			'stat_phrase' => [GetMessage('SEARCH_OPTIONS_STAT_PHRASE'), ['checkbox', 'Y']],
			'stat_phrase_save_days' => [GetMessage('SEARCH_OPTIONS_STAT_PHRASE_SAVE_DAYS'), ['text', 6]],
		]
	],
];

$DBsearch = CDatabase::GetModuleConnection('search');
if ($DBsearch->type === 'MYSQL')
{
	$aTabs[1]['OPTIONS']['full_text_engine'][1][1]['mysql'] = GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_MYSQL');
}
elseif ($DBsearch->type === 'PGSQL')
{
	$aTabs[1]['OPTIONS']['full_text_engine'][1][1]['pgsql'] = GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_PGSQL');
}

$siteLangMap = [];
$langs = CLang::GetList();
while ($site = $langs->Fetch())
{
	$siteLangMap[$site['ID']] = $site['LANGUAGE_ID'];
	$aTabs[1]['OPTIONS']['opensearch_analyzer_' . $site['ID']] = [
		GetMessage('SEARCH_OPTIONS_OPENSEARCH_ANALYZER_FOR_SITE', ['#SITE_ID#' => $site['ID']]),
		['select', array_combine(array_keys($openSearchAnalyzers), array_keys($openSearchAnalyzers))],
		'opensearch',
	];
}

$tabControl = new CAdminTabControl('tabControl', $aTabs);

if ($_SERVER['REQUEST_METHOD'] == 'POST' && $Update . $Apply . $RestoreDefaults <> '' && check_bitrix_sessid())
{
	if ($RestoreDefaults <> '')
	{
		COption::RemoveOption('search');
	}
	else
	{
		if ($_POST['full_text_engine'] === 'sphinx')
		{
			$search = new CSearchSphinx();
			if (!$search->connect($_POST['sphinx_connection'], $_POST['sphinx_index_name'], true))
			{
				$e = $APPLICATION->GetException();
				if (is_object($e))
				{
					$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_SPHINX_ERROR'), $e);
				}
				$bVarsFromForm = true;
			}
		}
		elseif ($_POST['full_text_engine'] === 'opensearch')
		{
			$siteAnalyzerMap = [];
			foreach ($_POST as $key => $value)
			{
				if (str_starts_with($key, 'opensearch_analyzer_'))
				{
					$siteAnalyzerMap[explode('_', $key, 3)[2]] = $value;
				}
			}
			$search = new CSearchOpenSearch();
			$opensearch_password = $_POST['opensearch_password'] ?: CPasswordStorage::Get('search@opensearch_password');
			if (!$search->connect($_POST['opensearch_connection'], $_POST['opensearch_user'], $opensearch_password, $_POST['opensearch_index'], true, $siteAnalyzerMap))
			{
				$e = $APPLICATION->GetException();
				if (is_object($e))
				{
					$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_OPENSEARCH_ERROR'), $e);
				}
				$bVarsFromForm = true;
			}
		}
		elseif ($_POST['full_text_engine'] === 'mysql')
		{
			$search = new CSearchMysql();
			if (!$search->connect())
			{
				$e = $APPLICATION->GetException();
				if (is_object($e))
				{
					$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_MYSQL_ERROR'), $e);
				}
				$bVarsFromForm = true;
			}
		}
		elseif ($_POST['full_text_engine'] === 'pgsql')
		{
			$search = new CSearchPgsql();
			if (!$search->connect())
			{
				$e = $APPLICATION->GetException();
				if (is_object($e))
				{
					$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_PGSQL_ERROR'), $e);
				}
				$bVarsFromForm = true;
			}
		}

		if (!$bVarsFromForm)
		{
			$old_use_tf_cache = COption::GetOptionString('search', 'use_tf_cache');
			$old_max_result_size = COption::GetOptionInt('search', 'max_result_size');
			$old_full_text_engine = COption::GetOptionString('search', 'full_text_engine');

			foreach ($aTabs as $i => $aTab)
			{
				foreach ($aTab['OPTIONS'] as $name => $arOption)
				{
					$val = $_POST[$name];
					if ($arOption[1][0] == 'checkbox' && $val != 'Y')
					{
						$val = 'N';
					}

					if ($arOption[1][0] == 'password')
					{
						if ($val)
						{
							CPasswordStorage::Set('search@' . $name, $val);
						}
					}
					else
					{
						COption::SetOptionString('search', $name, $val, $arOption[0]);
					}
				}
			}

			if (
				$old_use_tf_cache != COption::GetOptionString('search', 'use_tf_cache')
				|| $old_max_result_size != COption::GetOptionInt('search', 'max_result_size')
			)
			{
				$DBsearch->Query('TRUNCATE TABLE b_search_content_freq');
			}

			if ($old_full_text_engine != COption::GetOptionString('search', 'full_text_engine'))
			{
				$error = [
					'MESSAGE' => GetMessage("SEARCH_OPTIONS_FULL_REINDEX", ['#LINK#' => '/bitrix/admin/search_reindex.php?lang=' . LANGUAGE_ID]),
					'TAG' => 'SEARCH_REINDEX',
					'MODULE_ID' => 'SEARCH',
					'NOTIFY_TYPE' => CAdminNotify::TYPE_ERROR,
				];
				CAdminNotify::Add($error);
			}
		}
	}

	CSearchStatistic::SetActive(COption::GetOptionString('search', 'stat_phrase') == 'Y');

	if (!$bVarsFromForm)
	{
		if ($Update <> '' && $_REQUEST['back_url_settings'] <> '')
		{
			LocalRedirect($_REQUEST['back_url_settings']);
		}
		else
		{
			LocalRedirect($APPLICATION->GetCurPage() . '?mid=' . urlencode($mid) . '&lang=' . urlencode(LANGUAGE_ID) . '&back_url_settings=' . urlencode($_REQUEST['back_url_settings']) . '&' . $tabControl->ActiveTabParam());
		}
	}
}

if (is_object($message))
{
	echo $message->Show();
}

$aMenu = [
	[
		'TEXT' => GetMessage('SEARCH_OPTIONS_REINDEX'),
		'LINK' => 'search_reindex.php?lang=' . LANGUAGE_ID,
		'TITLE' => GetMessage('SEARCH_OPTIONS_REINDEX_TITLE'),
	],
	[
		'TEXT' => GetMessage('SEARCH_OPTIONS_SITEMAP'),
		'LINK' => 'search_sitemap.php?lang=' . LANGUAGE_ID,
		'TITLE' => GetMessage('SEARCH_OPTIONS_SITEMAP_TITLE'),
	]
];
$context = new CAdminContextMenu($aMenu);
$context->Show();

$tabControl->Begin();
?>
<form method="post" action="<?php echo $APPLICATION->GetCurPage()?>?mid=<?=urlencode($mid)?>&amp;lang=<?=LANGUAGE_ID?>" id="options">
<?php
foreach ($aTabs as $aTab):
	$tabControl->BeginNextTab();
	foreach ($aTab['OPTIONS'] as $name => $arOption):
		if ($bVarsFromForm)
		{
			if ($arOption[1][0] == 'password')
			{
				$val = '';
			}
			else
			{
				$val = $_POST[$name];
			}
		}
		else
		{
			$val = COption::GetOptionString('search', $name);
			if (!$val && str_starts_with($name, 'opensearch_analyzer_'))
			{
				$siteId = explode('_', $name, 3)[2];
				$val = array_search($siteLangMap[$siteId], $openSearchAnalyzers) ?: 'english';
			}
		}
		$type = $arOption[1];
	?>
		<tr <?php
			if (isset($arOption[2]))
			{
				echo 'style="display:none" class="show-for-' . htmlspecialcharsbx($arOption[2]) . '"';
			}?>>
			<td width="40%" <?php
				if ($type[0] == 'textarea')
				{
					echo 'class="adm-detail-valign-top"';
				}?>>
				<label for="<?php echo htmlspecialcharsbx($name)?>"><?php echo $arOption[0]?></label>
			<td width="60%">
				<?php if ($type[0] == 'checkbox'):?>
					<input type="checkbox" name="<?php echo htmlspecialcharsbx($name)?>" id="<?php echo htmlspecialcharsbx($name)?>" value="Y"<?php	echo ($val == 'Y') ? ' checked' : '';?>>
				<?php elseif ($type[0] == 'text'):?>
					<input type="text" size="<?php echo $type[1]?>" maxlength="255" value="<?php echo htmlspecialcharsbx($val)?>" name="<?php echo htmlspecialcharsbx($name)?>">
				<?php elseif ($type[0] == 'password'):?>
					<input type="password" size="<?php echo $type[1]?>" maxlength="255" value="<?php echo htmlspecialcharsbx($val)?>" name="<?php echo htmlspecialcharsbx($name)?>">
				<?php elseif ($type[0] == 'textarea'):?>
					<textarea rows="<?php echo $type[1]?>" name="<?php echo htmlspecialcharsbx($name)?>" style=
					"width:100%"><?php echo htmlspecialcharsbx($val)?></textarea>
				<?php elseif ($type[0] == 'select'):?>
					<select name="<?php echo htmlspecialcharsbx($name)?>" onchange="doShowAndHide()">
					<?php foreach ($type[1] as $key => $value):?>
						<option value="<?php echo htmlspecialcharsbx($key)?>" <?php echo ($val == $key) ? 'selected="selected"' : '';?>><?php echo htmlspecialcharsEx($value)?></option>
					<?php endforeach?>
					</select>
				<?php elseif ($type[0] == 'note'):?>
					<?php echo BeginNote(), $type[1], EndNote();?>
				<?php endif?>
			</td>
		</tr>
	<?php endforeach;
endforeach;?>

<?php $tabControl->Buttons();?>
	<input type="submit" name="Update" value="<?=GetMessage('MAIN_SAVE')?>" title="<?=GetMessage('MAIN_OPT_SAVE_TITLE')?>" class="adm-btn-save">
	<input type="submit" name="Apply" value="<?=GetMessage('MAIN_OPT_APPLY')?>" title="<?=GetMessage('MAIN_OPT_APPLY_TITLE')?>">
	<?php if ($_REQUEST['back_url_settings'] <> ''):?>
		<input type="button" name="Cancel" value="<?=GetMessage('MAIN_OPT_CANCEL')?>" title="<?=GetMessage('MAIN_OPT_CANCEL_TITLE')?>" onclick="window.location='<?php echo htmlspecialcharsbx(CUtil::addslashes($_REQUEST['back_url_settings']))?>'">
		<input type="hidden" name="back_url_settings" value="<?=htmlspecialcharsbx($_REQUEST['back_url_settings'])?>">
	<?php endif?>
	<input type="submit" name="RestoreDefaults" title="<?php echo GetMessage('MAIN_HINT_RESTORE_DEFAULTS')?>" OnClick="return confirm('<?php echo AddSlashes(GetMessage('MAIN_HINT_RESTORE_DEFAULTS_WARNING'))?>')" value="<?php echo GetMessage('MAIN_RESTORE_DEFAULTS')?>">
	<?=bitrix_sessid_post();?>
<?php $tabControl->End();?>
</form>
<script>
function doShowAndHide()
{
	var form = BX('options');
	var selects = document.getElementsByName('full_text_engine');
	for (var i = 0; i < selects.length; i++)
	{
		var selectedValue = selects[i].value;
		var trs = BX.findChildren(form, {tag: 'tr'}, true);
		for (var j = 0; j < trs.length; j++)
		{
			if (/show-for-/.test(trs[j].className))
			{
				if (trs[j].className.indexOf(selectedValue) >= 0)
					trs[j].style.display = 'table-row';
				else
					trs[j].style.display = 'none';
			}
		}
	}
}
BX.ready(doShowAndHide);
</script>

Youez - 2016 - github.com/yon3zu
LinuXploit