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 : |
<?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)?>&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>