MODULE_VERSION = $arModuleVersion['VERSION']; $this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE']; } $this->MODULE_NAME = GetMessage('SEARCH_MODULE_NAME'); $this->MODULE_DESCRIPTION = GetMessage('SEARCH_MODULE_DESC'); } function InstallDB($arParams = []) { global $APPLICATION; $connection = \Bitrix\Main\Application::getConnection(); $this->errors = false; $node_id = $arParams['DATABASE'] <> '' ? intval($arParams['DATABASE']) : false; if ($node_id !== false) { $DB = $GLOBALS['DB']->GetDBNodeConnection($node_id); } else { $DB = $GLOBALS['DB']; } // Database tables creation if (!$DB->TableExists("b_search_content")) { $this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/db/' . $connection->getType() . '/install.sql'); } if ($this->errors === false && !$DB->TableExists('b_search_phrase')) { $this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/db/' . $connection->getType() . '/stat_install.sql'); } if ($this->errors !== false) { $APPLICATION->ThrowException(implode('
', $this->errors)); return false; } else { RegisterModule('search'); CModule::IncludeModule('search'); RegisterModuleDependences('main', 'OnChangePermissions', 'search', 'CSearch', 'OnChangeFilePermissions'); RegisterModuleDependences('main', 'OnChangeFile', 'search', 'CSearch', 'OnChangeFile'); RegisterModuleDependences('main', 'OnGroupDelete', 'search', 'CSearch', 'OnGroupDelete'); RegisterModuleDependences('main', 'OnLangDelete', 'search', 'CSearch', 'OnLangDelete'); RegisterModuleDependences('main', 'OnAfterUserUpdate', 'search', 'CSearchUser', 'OnAfterUserUpdate'); RegisterModuleDependences('main', 'OnUserDelete', 'search', 'CSearchUser', 'DeleteByUserID'); RegisterModuleDependences('cluster', 'OnGetTableList', 'search', 'search', 'OnGetTableList'); RegisterModuleDependences('perfmon', 'OnGetTableSchema', 'search', 'search', 'OnGetTableSchema'); if ($node_id !== false) { COption::SetOptionString('search', 'dbnode_id', $node_id); if (CModule::IncludeModule('cluster')) { CClusterDBNode::SetOnline($node_id); } } else { COption::SetOptionString('search', 'dbnode_id', 'N'); } COption::SetOptionString('search', 'dbnode_status', 'ok'); CAgent::AddAgent('CSearchSuggest::CleanUpAgent();','search', 'N', 86400, '', 'Y', '', 10); CAgent::AddAgent('CSearchStatistic::CleanUpAgent();','search', 'N', 86400, '', 'Y', '', 10); CSearchStatistic::SetActive(COption::GetOptionString('search', 'stat_phrase') == 'Y'); return true; } } function UnInstallDB($arParams = []) { global $APPLICATION; $connection = \Bitrix\Main\Application::getConnection(); $this->errors = false; $DB = CDatabase::GetModuleConnection('search', true); UnRegisterModuleDependences('main', 'OnEpilog', 'search', 'CSearchStatistic', 'OnEpilog'); UnRegisterModuleDependences('main', 'OnChangePermissions', 'search', 'CSearch', 'OnChangeFilePermissions'); UnRegisterModuleDependences('main', 'OnChangeFile', 'search', 'CSearch', 'OnChangeFile'); UnRegisterModuleDependences('main', 'OnGroupDelete', 'search', 'CSearch', 'OnGroupDelete'); UnRegisterModuleDependences('main', 'OnLangDelete', 'search', 'CSearch', 'OnLangDelete'); UnRegisterModuleDependences('main', 'OnAfterUserUpdate', 'search', 'CSearchUser', 'OnAfterUserUpdate'); UnRegisterModuleDependences('main', 'OnUserDelete', 'search', 'CSearchUser', 'DeleteByUserID'); UnRegisterModuleDependences('cluster', 'OnGetTableList', 'search', 'search', 'OnGetTableList'); UnRegisterModuleDependences('perfmon', 'OnGetTableSchema', 'search', 'search', 'OnGetTableSchema'); if (is_object($DB)) { if (!array_key_exists('savedata', $arParams) || ($arParams['savedata'] != 'Y')) { $this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/db/' . $connection->getType() . '/uninstall.sql'); } if (!array_key_exists('savestat', $arParams) || ($arParams['savestat'] != 'Y')) { $this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/db/' . $connection->getType() . '/stat_uninstall.sql'); } } UnRegisterModule('search'); COption::SetOptionString('search', 'dbnode_id', 'N'); COption::SetOptionString('search', 'dbnode_status', 'ok'); if ($this->errors !== false) { $APPLICATION->ThrowException(implode('
', $this->errors)); return false; } return true; } function InstallFiles($arParams = []) { CopyDirFiles($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/admin', $_SERVER['DOCUMENT_ROOT'] . '/bitrix/admin'); CopyDirFiles($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/js', $_SERVER['DOCUMENT_ROOT'] . '/bitrix/js/search', true, true); CopyDirFiles($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/images', $_SERVER['DOCUMENT_ROOT'] . '/bitrix/images/search', true, true); CopyDirFiles($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/components', $_SERVER['DOCUMENT_ROOT'] . '/bitrix/components', true, true); $bReWriteAdditionalFiles = ($arParams['public_rewrite'] == 'Y'); if (array_key_exists('public_dir', $arParams) && mb_strlen($arParams['public_dir'])) { $rsSite = CSite::GetList(); while ($site = $rsSite->Fetch()) { $source = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/public/'; $target = $site['ABS_DOC_ROOT'] . $site['DIR'] . $arParams['public_dir'] . '/'; if (file_exists($source)) { CheckDirPath($target); $dh = opendir($source); while ($file = readdir($dh)) { if ($file == '.' || $file == '..') { continue; } if ($bReWriteAdditionalFiles || !file_exists($target . $file)) { $fh = fopen($source . $file, 'rb'); $php_source = fread($fh, filesize($source . $file)); fclose($fh); if (preg_match_all('/GetMessage\("(.*?)"\)/', $php_source, $matches)) { IncludeModuleLangFile($source . $file, $site['LANGUAGE_ID']); foreach ($matches[0] as $i => $text) { $php_source = str_replace( $text, '"' . GetMessage($matches[1][$i]) . '"', $php_source ); } } $fh = fopen($target . $file, 'wb'); fwrite($fh, $php_source); fclose($fh); } } } } } return true; } function UnInstallFiles() { DeleteDirFiles($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/admin/', $_SERVER['DOCUMENT_ROOT'] . '/bitrix/admin'); DeleteDirFilesEx('/bitrix/images/search/'); DeleteDirFilesEx('/bitrix/js/search/'); return true; } function DoInstall() { global $APPLICATION, $step; $step = intval($step); if ($step < 2) { $APPLICATION->IncludeAdminFile(GetMessage('SEARCH_INSTALL_TITLE'), $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/step1.php'); } elseif ($step == 2) { $db_install_ok = $this->InstallDB([ 'DATABASE' => $_REQUEST['DATABASE'], ]); if ($db_install_ok) { $this->InstallFiles([ 'public_dir' => $_REQUEST['public_dir'], 'public_rewrite' => $_REQUEST['public_rewrite'], ]); } $GLOBALS['errors'] = $this->errors; $APPLICATION->IncludeAdminFile(GetMessage('SEARCH_INSTALL_TITLE'), $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/step2.php'); } } function DoUninstall() { global $APPLICATION, $step; $step = intval($step); if ($step < 2) { $APPLICATION->IncludeAdminFile(GetMessage('SEARCH_UNINSTALL_TITLE'), $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/unstep1.php'); } elseif ($step == 2) { $this->UnInstallDB([ 'savedata' => $_REQUEST['savedata'], 'savestat' => $_REQUEST['savestat'], ]); $this->UnInstallFiles(); $GLOBALS['errors'] = $this->errors; $APPLICATION->IncludeAdminFile(GetMessage('SEARCH_UNINSTALL_TITLE'), $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/search/install/unstep2.php'); } } public static function OnGetTableList() { return [ 'MODULE' => new search, 'TABLES' => [ 'b_search_content' => 'ID', 'b_search_content_right' => 'SEARCH_CONTENT_ID', 'b_search_content_site' => 'SEARCH_CONTENT_ID', 'b_search_content_stem' => 'SEARCH_CONTENT_ID', 'b_search_content_title' => 'SEARCH_CONTENT_ID', 'b_search_content_freq' => 'STEM', 'b_search_custom_rank' => 'ID', 'b_search_tags' => 'SEARCH_CONTENT_ID', 'b_search_suggest' => 'ID', 'b_search_phrase' => 'ID', 'b_search_user_right' => 'USER_ID', 'b_search_content_param' => 'SEARCH_CONTENT_ID', 'b_search_stem' => 'ID', 'b_search_content_text' => 'SEARCH_CONTENT_ID', ], ]; } public static function OnGetTableSchema() { return [ 'search' => [ 'b_search_content' => [ 'ID' => [ 'b_search_content_stem' => 'SEARCH_CONTENT_ID', 'b_search_content_text' => 'SEARCH_CONTENT_ID', 'b_search_content_param' => 'SEARCH_CONTENT_ID', 'b_search_content_right' => 'SEARCH_CONTENT_ID', 'b_search_content_site' => 'SEARCH_CONTENT_ID', 'b_search_content_title' => 'SEARCH_CONTENT_ID', 'b_search_tags' => 'SEARCH_CONTENT_ID', ] ], 'b_search_stem' => [ 'ID' => [ 'b_search_content_stem' => 'STEM', 'b_search_content_freq' => 'STEM', ], ], ], 'main' => [ 'b_user' => [ 'ID' => [ 'b_search_user_right' => 'USER_ID', ] ], 'b_lang' => [ 'LID' => [ 'b_search_content_site' => 'SITE_ID', 'b_search_content_title' => 'SITE_ID', 'b_search_content_freq' => 'SITE_ID', 'b_search_custom_rank' => 'SITE_ID', 'b_search_tags' => 'SITE_ID', 'b_search_suggest' => 'SITE_ID', 'b_search_phrase' => 'SITE_ID', ] ], 'b_language' => [ 'LID' => [ 'b_search_content_stem' => 'LANGUAGE_ID', 'b_search_content_freq' => 'LANGUAGE_ID', ] ], 'b_module' => [ 'ID' => [ 'b_search_custom_rank' => 'MODULE_ID', ] ], ], 'statistic' => [ 'b_stat_session' => [ 'ID' => [ 'b_search_phrase' => 'STAT_SESS_ID', ] ], ], ]; } }