/** * @param $query * @param null $var1 * @param null $var2 * @return bool|\CDBResult */ protected function query($query, $var1 = null, $var2 = null) { if (func_num_args() > 1) { $params = func_get_args(); $query = call_user_func_array('sprintf', $params); } $search = array('#TABLE1#' => $this->tableName, '#DBNAME#' => $this->dbName); if (Locale::isWin1251()) { $search['#CHARSET#'] = 'cp1251'; $search['#COLLATE#'] = 'cp1251_general_ci'; } else { $search['#CHARSET#'] = 'utf8'; $search['#COLLATE#'] = 'utf8_general_ci'; } $querySearch = array_keys($search); $queryReplace = array_values($search); $query = str_replace($querySearch, $queryReplace, $query); return $this->bitrixDb->Query($query); }
function InstallDB() { /** @global string $DBType */ global $DB, $DBType, $DBHost, $DBLogin, $DBPassword, $DBName, $APPLICATION; if (!is_object($APPLICATION)) { $APPLICATION = new CMain(); } $DB = new CDatabase(); $DB->DebugToFile = false; $DB->debug = true; if (!defined("DBPersistent")) { define("DBPersistent", false); } if (!$DB->Connect($DBHost, $DBName, $DBLogin, $DBPassword)) { $APPLICATION->ThrowException(GetMessage("MAIN_INSTALL_DB_ERROR")); return false; } $result = $DB->Query("SELECT * FROM b_module WHERE ID='main'", true, "", array("fixed_connection" => true)); $success = $result && $result->Fetch(); if ($success) { return true; } if ($DBType == "mysql" && defined("MYSQL_TABLE_TYPE") && strlen(MYSQL_TABLE_TYPE) > 0) { $DB->Query("SET storage_engine = '" . MYSQL_TABLE_TYPE . "'", true); } $errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/install/" . $DBType . "/install.sql"); if ($errors !== false) { $APPLICATION->ThrowException(implode("", $errors)); return false; } $this->InstallTasks(); $group = new CGroup(); $arGroups = array(array("~ID" => 1, "ACTIVE" => "Y", "C_SORT" => 1, "NAME" => GetMessage("MAIN_ADMIN_GROUP_NAME"), "ANONYMOUS" => "N", "DESCRIPTION" => GetMessage("MAIN_ADMIN_GROUP_DESC")), array("~ID" => 2, "ACTIVE" => "Y", "C_SORT" => 2, "NAME" => GetMessage("MAIN_EVERYONE_GROUP_NAME"), "ANONYMOUS" => "Y", "DESCRIPTION" => GetMessage("MAIN_EVERYONE_GROUP_DESC")), array("~ID" => 3, "ACTIVE" => "Y", "C_SORT" => 3, "NAME" => GetMessage("MAIN_VOTE_RATING_GROUP_NAME"), "ANONYMOUS" => "N", "DESCRIPTION" => GetMessage("MAIN_VOTE_RATING_GROUP_DESC"), "STRING_ID" => "RATING_VOTE"), array("~ID" => 4, "ACTIVE" => "Y", "C_SORT" => 4, "NAME" => GetMessage("MAIN_VOTE_AUTHORITY_GROUP_NAME"), "ANONYMOUS" => "N", "DESCRIPTION" => GetMessage("MAIN_VOTE_AUTHORITY_GROUP_DESC"), "STRING_ID" => "RATING_VOTE_AUTHORITY")); foreach ($arGroups as $arGroup) { $rsGroup = CGroup::GetByID($arGroup["~ID"]); if ($rsGroup->Fetch()) { continue; } //mssql does not allow insert identity by default if (strtolower($DB->type) == "mssql") { unset($arGroup["~ID"]); } $success = (bool) $group->Add($arGroup); if (!$success) { $APPLICATION->ThrowException($group->LAST_ERROR); return false; } } self::InstallRatings(); $arLanguages = array(array("LID" => LANGUAGE_ID, "ACTIVE" => "Y", "SORT" => 1, "DEF" => "Y", "NAME" => GetMessage("MAIN_DEFAULT_LANGUAGE_NAME"), "FORMAT_DATE" => GetMessage("MAIN_DEFAULT_LANGUAGE_FORMAT_DATE"), "FORMAT_DATETIME" => GetMessage("MAIN_DEFAULT_LANGUAGE_FORMAT_DATETIME"), "FORMAT_NAME" => GetMessage("MAIN_DEFAULT_LANGUAGE_FORMAT_NAME"), "CHARSET" => defined("BX_UTF") ? "UTF-8" : GetMessage("MAIN_DEFAULT_LANGUAGE_FORMAT_CHARSET"))); if (LANGUAGE_ID != "en") { $arLanguages[] = array("LID" => "en", "ACTIVE" => "Y", "SORT" => 2, "DEF" => "N", "NAME" => "English", "FORMAT_DATE" => "MM/DD/YYYY", "FORMAT_DATETIME" => "MM/DD/YYYY H:MI:SS T", "FORMAT_NAME" => "#NAME# #LAST_NAME#", "CHARSET" => defined("BX_UTF") ? "UTF-8" : "iso-8859-1"); } if (LANGUAGE_ID != "de" && file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/lang/de/install/index.php')) { $arLanguages[] = array("LID" => "de", "ACTIVE" => "Y", "SORT" => 3, "DEF" => "N", "NAME" => "German", "FORMAT_DATE" => "DD.MM.YYYY", "FORMAT_DATETIME" => "DD.MM.YYYY HH:MI:SS", "FORMAT_NAME" => "#NAME# #LAST_NAME#", "CHARSET" => defined("BX_UTF") ? "UTF-8" : "iso-8859-1"); } if (LANGUAGE_ID != "ru" && file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/lang/ru/install/index.php')) { $arLanguages[] = array("LID" => "ru", "ACTIVE" => "Y", "SORT" => 3, "DEF" => "N", "NAME" => "Russian", "FORMAT_DATE" => "DD.MM.YYYY", "FORMAT_DATETIME" => "DD.MM.YYYY HH:MI:SS", "FORMAT_NAME" => "#NAME# #LAST_NAME#", "CHARSET" => defined("BX_UTF") ? "UTF-8" : "windows-1251"); } $lang = new CLanguage(); foreach ($arLanguages as $arLanguage) { $rsLang = CLanguage::GetByID($arLanguage["LID"]); if ($rsLang->Fetch()) { continue; } $success = (bool) $lang->Add($arLanguage); if (!$success) { $APPLICATION->ThrowException($lang->LAST_ERROR); return false; } } $arSite = array("LID" => "s1", "ACTIVE" => "Y", "SORT" => 1, "DEF" => "Y", "NAME" => GetMessage("MAIN_DEFAULT_SITE_NAME"), "DIR" => "/", "FORMAT_DATE" => GetMessage("MAIN_DEFAULT_SITE_FORMAT_DATE"), "FORMAT_DATETIME" => GetMessage("MAIN_DEFAULT_SITE_FORMAT_DATETIME"), "FORMAT_NAME" => GetMessage("MAIN_DEFAULT_SITE_FORMAT_NAME"), "CHARSET" => defined("BX_UTF") ? "UTF-8" : GetMessage("MAIN_DEFAULT_SITE_FORMAT_CHARSET"), "LANGUAGE_ID" => LANGUAGE_ID); $rsSites = CSite::GetByID($arSite["LID"]); if (!$rsSites->Fetch()) { $site = new CSite(); $success = (bool) $site->Add($arSite); if (!$success) { $APPLICATION->ThrowException($site->LAST_ERROR); return false; } } RegisterModule("main"); RegisterModuleDependences('iblock', 'OnIBlockPropertyBuildList', 'main', 'CIBlockPropertyUserID', 'GetUserTypeDescription', 100, '/modules/main/tools/prop_userid.php'); RegisterModuleDependences('main', 'OnUserDelete', 'main', 'CFavorites', 'OnUserDelete', 100, "/modules/main/classes/" . strtolower($GLOBALS["DB"]->type) . "/favorites.php"); RegisterModuleDependences('main', 'OnLanguageDelete', 'main', 'CFavorites', 'OnLanguageDelete', 100, "/modules/main/classes/" . strtolower($GLOBALS["DB"]->type) . "/favorites.php"); RegisterModuleDependences('main', 'OnUserDelete', 'main', 'CUserOptions', 'OnUserDelete'); RegisterModuleDependences('main', 'OnChangeFile', 'main', 'CMain', 'OnChangeFileComponent'); RegisterModuleDependences('main', 'OnUserTypeRightsCheck', 'main', 'CUser', 'UserTypeRightsCheck'); RegisterModuleDependences('main', 'OnUserLogin', 'main', 'UpdateTools', 'CheckUpdates'); RegisterModuleDependences('main', 'OnModuleUpdate', 'main', 'UpdateTools', 'SetUpdateResult'); RegisterModuleDependences('main', 'OnUpdateCheck', 'main', 'UpdateTools', 'SetUpdateError'); RegisterModuleDependences('main', 'OnPanelCreate', 'main', 'CUndo', 'CheckNotifyMessage'); RegisterModuleDependences('main', 'OnAfterAddRating', 'main', 'CRatingsComponentsMain', 'OnAfterAddRating'); RegisterModuleDependences('main', 'OnAfterUpdateRating', 'main', 'CRatingsComponentsMain', 'OnAfterUpdateRating'); RegisterModuleDependences('main', 'OnSetRatingsConfigs', 'main', 'CRatingsComponentsMain', 'OnSetRatingConfigs'); RegisterModuleDependences('main', 'OnGetRatingsConfigs', 'main', 'CRatingsComponentsMain', 'OnGetRatingConfigs'); RegisterModuleDependences('main', 'OnGetRatingsObjects', 'main', 'CRatingsComponentsMain', 'OnGetRatingObject'); RegisterModuleDependences('main', 'OnGetRatingContentOwner', 'main', 'CRatingsComponentsMain', 'OnGetRatingContentOwner'); RegisterModuleDependences('main', 'OnAfterAddRatingRule', 'main', 'CRatingRulesMain', 'OnAfterAddRatingRule'); RegisterModuleDependences('main', 'OnAfterUpdateRatingRule', 'main', 'CRatingRulesMain', 'OnAfterUpdateRatingRule'); RegisterModuleDependences('main', 'OnGetRatingRuleObjects', 'main', 'CRatingRulesMain', 'OnGetRatingRuleObjects'); RegisterModuleDependences('main', 'OnGetRatingRuleConfigs', 'main', 'CRatingRulesMain', 'OnGetRatingRuleConfigs'); RegisterModuleDependences('main', 'OnAfterUserAdd', 'main', 'CRatings', 'OnAfterUserRegister'); RegisterModuleDependences('main', 'OnUserDelete', 'main', 'CRatings', 'OnUserDelete'); RegisterModuleDependences('main', 'OnUserDelete', 'main', 'CAccess', 'OnUserDelete'); RegisterModuleDependences('main', 'OnAfterGroupAdd', 'main', 'CGroupAuthProvider', 'OnAfterGroupAdd'); RegisterModuleDependences('main', 'OnBeforeGroupUpdate', 'main', 'CGroupAuthProvider', 'OnBeforeGroupUpdate'); RegisterModuleDependences('main', 'OnBeforeGroupDelete', 'main', 'CGroupAuthProvider', 'OnBeforeGroupDelete'); RegisterModuleDependences('main', 'OnAfterUserUpdate', 'main', 'CGroupAuthProvider', 'OnAfterUserUpdate'); RegisterModuleDependences('main', 'OnUserLogin', 'main', 'CGroupAuthProvider', 'OnUserLogin'); RegisterModuleDependences("main", "OnEventLogGetAuditTypes", "main", "CEventMain", "GetAuditTypes"); RegisterModuleDependences("main", "OnEventLogGetAuditHandlers", "main", "CEventMain", "MakeMainObject"); RegisterModuleDependences("perfmon", "OnGetTableSchema", "main", "CTableSchema", "OnGetTableSchema"); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeString", "GetUserTypeDescription", 110); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeInteger", "GetUserTypeDescription", 120); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeDouble", "GetUserTypeDescription", 130); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeDateTime", "GetUserTypeDescription", 140); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeBoolean", "GetUserTypeDescription", 150); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeFile", "GetUserTypeDescription", 160); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeEnum", "GetUserTypeDescription", 170); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeIBlockSection", "GetUserTypeDescription", 180); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeIBlockElement", "GetUserTypeDescription", 190); RegisterModuleDependences("main", "OnUserTypeBuildList", "main", "CUserTypeStringFormatted", "GetUserTypeDescription", 200); COption::SetOptionString('main', 'auth_comp2', 'Y'); COption::SetOptionString("main", "PARAM_MAX_SITES", "2"); COption::SetOptionString("main", "PARAM_MAX_USERS", "0"); COption::SetOptionString("main", "distributive6", "Y"); COption::SetOptionString("main", "~new_license11_sign", "Y"); COption::SetOptionString("main", "GROUP_DEFAULT_TASK", "1"); if (LANGUAGE_ID == "ru") { COption::SetOptionString("main", "vendor", "1c_bitrix"); } else { COption::SetOptionString("main", "vendor", "bitrix"); } COption::SetOptionString("main", "admin_lid", LANGUAGE_ID); COption::SetOptionString("main", "update_site", "www.bitrixsoft.com"); COption::SetOptionString("main", "update_site_ns", "Y"); COption::SetOptionString("main", "optimize_css_files", "Y"); COption::SetOptionString("main", "optimize_js_files", "Y"); CAgent::AddAgent("CEvent::CleanUpAgent();", "main", "Y", 86400); CAgent::AddAgent("CUser::CleanUpHitAuthAgent();", "main", "Y", 86400); CAgent::AddAgent("CCaptchaAgent::DeleteOldCaptcha(3600);", "main", "N", 3600); CAgent::AddAgent("CUndo::CleanUpOld();", "main", "Y", 86400); self::InstallDesktop(); self::InstallSmiles(); return true; }
/** * @param array $arNode * @param CDatabase $nodeDB */ function AdjustServerID($arNode, $nodeDB) { $rs = $nodeDB->Query("show variables like 'server_id'", false, '', array("fixed_connection" => true)); if ($ar = $rs->Fetch()) { if ($ar["Value"] != $arNode["SERVER_ID"]) { $ob = new CClusterDBNode(); $ob->Update($arNode["ID"], array("SERVER_ID" => $ar["Value"])); } } }
function CheckShortInstall() { global $DB, $DBType, $DBHost, $DBLogin, $DBPassword, $DBName, $DBDebug, $DBSQLServerType; if (defined("SHORT_INSTALL_CHECK")) { return true; } //PHP $requireStep = new RequirementStep(); if (!$requireStep->CheckRequirements($DBType)) { BXInstallServices::ShowStepErrors($requireStep); } //UTF-8 if (defined("BX_UTF") && !BXInstallServices::IsUTF8Support()) { BXInstallServices::ShowStepErrors(InstallGetMessage("INST_UTF8_NOT_SUPPORT")); } elseif (defined("BX_UTF") && $DBType == "mssql") { BXInstallServices::ShowStepErrors(InstallGetMessage("INST_UTF8_NOT_SUPPORT")); } //Check connection require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/" . $DBType . "/database.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/" . $DBType . "/main.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/tools.php"; IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/main.php"); $DB = new CDatabase(); if (!$DB->Connect($DBHost, $DBName, $DBLogin, $DBPassword)) { BXInstallServices::ShowStepErrors(InstallGetMessage("COULD_NOT_CONNECT") . " " . $DB->db_Error); } $databaseStep = new CreateDBStep(); $databaseStep->DB =& $DB; $databaseStep->dbType = $DBType; $databaseStep->dbName = $DBName; $databaseStep->filePermission = defined("BX_FILE_PERMISSIONS") ? BX_FILE_PERMISSIONS : 0; $databaseStep->folderPermission = defined("BX_DIR_PERMISSIONS") ? BX_DIR_PERMISSIONS : 0; $databaseStep->createDBType = defined("MYSQL_TABLE_TYPE") ? MYSQL_TABLE_TYPE : ""; $databaseStep->utf8 = defined("BX_UTF"); $databaseStep->createCharset = null; $databaseStep->needCodePage = false; if ($databaseStep->IsBitrixInstalled()) { BXInstallServices::ShowStepErrors($databaseStep); } //Database check if ($DBType == "mysql") { $dbResult = $DB->Query("select VERSION() as ver", true); if ($dbResult && ($arVersion = $dbResult->Fetch())) { $mysqlVersion = trim($arVersion["ver"]); if (!BXInstallServices::VersionCompare($mysqlVersion, "5.0.0")) { BXInstallServices::ShowStepErrors(InstallGetMessage("SC_DB_VERS_MYSQL_ER")); } $databaseStep->needCodePage = true; if (!$databaseStep->needCodePage && defined("BX_UTF")) { BXInstallServices::ShowStepErrors(InstallGetMessage("INS_CREATE_DB_CHAR_NOTE")); } } //Code page if ($databaseStep->needCodePage) { $codePage = false; if (LANGUAGE_ID == "ru") { $codePage = "cp1251"; } elseif ($databaseStep->createCharset != '') { $codePage = $databaseStep->createCharset; } else { $codePage = 'latin1'; } if ($databaseStep->utf8) { $DB->Query("ALTER DATABASE `" . $databaseStep->dbName . "` CHARACTER SET UTF8 COLLATE utf8_unicode_ci", true); } elseif ($codePage) { $DB->Query("ALTER DATABASE `" . $databaseStep->dbName . "` CHARACTER SET " . $codePage, true); } } if (strlen($databaseStep->createDBType) > 0) { $DB->Query("SET storage_engine = '" . $databaseStep->createDBType . "'", false); } //SQL mode $dbResult = $DB->Query("SELECT @@sql_mode", true); if ($dbResult && ($arResult = $dbResult->Fetch())) { $sqlMode = trim($arResult["@@sql_mode"]); if (strpos($sqlMode, "STRICT_TRANS_TABLES") !== false) { $databaseStep->sqlMode = preg_replace("~,?STRICT_TRANS_TABLES~i", "", $sqlMode); $databaseStep->sqlMode = ltrim($databaseStep->sqlMode, ","); } } } elseif ($DBType == "oracle" && $databaseStep->utf8) { $query = "SELECT * FROM nls_database_parameters WHERE PARAMETER='NLS_CHARACTERSET' OR PARAMETER='NLS_NCHAR_CHARACTERSET'"; $dbResult = $DB->Query($query, true); if ($dbResult && ($arResult = $dbResult->Fetch())) { $arOracleParams = array("NLS_CHARACTERSET" => "", "NLS_NCHAR_CHARACTERSET" => ""); foreach ($arResult as $arParam) { $arOracleParams[$arParam["PARAMETER"]] = $arParam["VALUE"]; } if ($arOracleParams["NLS_CHARACTERSET"] != "AL32UTF8" || $arOracleParams["NLS_NCHAR_CHARACTERSET"] != "UTF8") { BXInstallServices::ShowStepErrors(InstallGetMessage("INST_ORACLE_UTF_ERROR")); } } else { BXInstallServices::ShowStepErrors(InstallGetMessage("INST_ORACLE_CHARSET_ERROR")); } } //Create after_connect.php if not exists if (!file_exists($_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/php_interface/after_connect.php") && $databaseStep->CreateAfterConnect() === false) { BXInstallServices::ShowStepErrors($databaseStep); } if (!$databaseStep->CheckDBOperation()) { BXInstallServices::ShowStepErrors($databaseStep); } $filePath = $_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/php_interface/dbconn.php"; if ($fileContent = file_get_contents($filePath)) { $fileContent = "<" . "? define(\"SHORT_INSTALL_CHECK\", true);?" . ">" . $fileContent; file_put_contents($filePath, $fileContent); } return true; }