Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/main/classes/general/ |
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/main/classes/general/site.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2023 Bitrix */ use Bitrix\Main; use Bitrix\Main\Localization\CultureTable; use Bitrix\Main\SiteTable; IncludeModuleLangFile(__FILE__); class CAllSite { public static $MAIN_LANGS_CACHE = []; public static $MAIN_LANGS_ADMIN_CACHE = []; public $LAST_ERROR; public static function InDir($strDir) { /** @global CMain $APPLICATION */ global $APPLICATION; return (mb_substr($APPLICATION->GetCurPage(true), 0, mb_strlen($strDir)) == $strDir); } public static function InPeriod($iUnixTimestampFrom, $iUnixTimestampTo) { if ($iUnixTimestampFrom > 0 && time() < $iUnixTimestampFrom) { return false; } if ($iUnixTimestampTo > 0 && time() > $iUnixTimestampTo) { return false; } return true; } public static function InGroup($arGroups) { global $USER; $arUserGroups = $USER->GetUserGroupArray(); if (!empty(array_intersect($arUserGroups, $arGroups))) { return true; } return false; } /** * @deprecated Use Context culture. */ public static function GetWeekStart() { return Main\Context::getCurrent()->getCulture()->getWeekStart(); } public static function GetDateFormat($type = "FULL", $lang = false, $bSearchInSitesOnly = false) { $fullFormat = (strtoupper($type) == 'FULL'); if ($lang === false && defined("LANG")) { $lang = LANG; } $format = ''; if ($lang !== false) { if (defined("SITE_ID") && $lang == SITE_ID) { if ($fullFormat && defined("FORMAT_DATETIME")) { return FORMAT_DATETIME; } if (!$fullFormat && defined("FORMAT_DATE")) { return FORMAT_DATE; } } $formatKey = ($fullFormat ? 'FORMAT_DATETIME' : 'FORMAT_DATE'); if (!$bSearchInSitesOnly && defined("ADMIN_SECTION") && ADMIN_SECTION === true) { if (!isset(static::$MAIN_LANGS_ADMIN_CACHE[$lang])) { $res = CLanguage::GetByID($lang); if ($res = $res->Fetch()) { static::$MAIN_LANGS_ADMIN_CACHE[$res["LID"]] = $res; } } if (isset(static::$MAIN_LANGS_ADMIN_CACHE[$lang])) { $format = mb_strtoupper(static::$MAIN_LANGS_ADMIN_CACHE[$lang][$formatKey]); } } // if LANG is not found in LangAdmin: if ($format == '') { if (!isset(static::$MAIN_LANGS_CACHE[$lang])) { $res = CLang::GetByID($lang); if ($res = $res->Fetch()) { static::$MAIN_LANGS_CACHE[$res["LID"]] = $res; if (defined("ADMIN_SECTION") && ADMIN_SECTION === true) { static::$MAIN_LANGS_ADMIN_CACHE[$res["LID"]] = $res; } } } if (isset(static::$MAIN_LANGS_ADMIN_CACHE[$lang])) { $format = mb_strtoupper(static::$MAIN_LANGS_CACHE[$lang][$formatKey]); } } } if ($format == '') { $format = ($fullFormat ? "DD.MM.YYYY HH:MI:SS" : "DD.MM.YYYY"); } return $format; } public static function GetTimeFormat($lang = false, $bSearchInSitesOnly = false) { $dateTimeFormat = self::GetDateFormat('FULL', $lang, $bSearchInSitesOnly); preg_match('~[HG]~', $dateTimeFormat, $chars, PREG_OFFSET_CAPTURE); return trim(mb_substr($dateTimeFormat, $chars[0][1])); } public function CheckFields($arFields, $ID = false) { /** @global CMain $APPLICATION */ global $APPLICATION, $DB; $this->LAST_ERROR = ""; $arMsg = []; if (isset($arFields["NAME"]) && mb_strlen($arFields["NAME"]) < 2) { $this->LAST_ERROR .= GetMessage("BAD_SITE_NAME") . " "; $arMsg[] = ["id" => "NAME", "text" => GetMessage("BAD_SITE_NAME")]; } if (($ID === false || isset($arFields["LID"])) && mb_strlen($arFields["LID"]) <> 2) { $this->LAST_ERROR .= GetMessage("BAD_SITE_LID") . " "; $arMsg[] = ["id" => "LID", "text" => GetMessage("BAD_SITE_LID")]; } if (isset($arFields["LID"]) && preg_match("/[^a-z0-9_]/i", $arFields["LID"])) { $this->LAST_ERROR .= GetMessage("MAIN_SITE_LATIN") . " "; $arMsg[] = ["id" => "LID", "text" => GetMessage("MAIN_SITE_LATIN")]; } if (isset($arFields["DIR"]) && $arFields["DIR"] == '') { $this->LAST_ERROR .= GetMessage("BAD_LANG_DIR") . " "; $arMsg[] = ["id" => "DIR", "text" => GetMessage("BAD_LANG_DIR")]; } if ($ID === false && !isset($arFields["LANGUAGE_ID"])) { $this->LAST_ERROR .= GetMessage("MAIN_BAD_LANGUAGE_ID") . " "; $arMsg[] = ["id" => "LANGUAGE_ID", "text" => GetMessage("MAIN_BAD_LANGUAGE_ID")]; } if (isset($arFields["LANGUAGE_ID"])) { $dbl_check = CLanguage::GetByID($arFields["LANGUAGE_ID"]); if (!$dbl_check->Fetch()) { $this->LAST_ERROR .= GetMessage("MAIN_BAD_LANGUAGE_ID_BAD") . " "; $arMsg[] = ["id" => "LANGUAGE_ID", "text" => GetMessage("MAIN_BAD_LANGUAGE_ID_BAD")]; } } if ($ID === false && !isset($arFields["CULTURE_ID"])) { $this->LAST_ERROR .= GetMessage("lang_check_culture_not_set") . " "; $arMsg[] = ["id" => "CULTURE_ID", "text" => GetMessage("lang_check_culture_not_set")]; } if (isset($arFields["CULTURE_ID"])) { if (CultureTable::getRowById($arFields["CULTURE_ID"]) === null) { $this->LAST_ERROR .= GetMessage("lang_check_culture_incorrect") . " "; $arMsg[] = ["id" => "CULTURE_ID", "text" => GetMessage("lang_check_culture_incorrect")]; } } if (isset($arFields["SORT"]) && $arFields["SORT"] == '') { $this->LAST_ERROR .= GetMessage("BAD_SORT") . " "; $arMsg[] = ["id" => "SORT", "text" => GetMessage("BAD_SORT")]; } if (isset($arFields["TEMPLATE"])) { $isOK = false; $check_templ = []; $dupError = ""; foreach ($arFields["TEMPLATE"] as $val) { if ($val["TEMPLATE"] <> '' && getLocalPath("templates/" . $val["TEMPLATE"], BX_PERSONAL_ROOT) !== false) { if (in_array($val["TEMPLATE"] . ", " . $val["CONDITION"], $check_templ)) { $dupError = " " . GetMessage("MAIN_BAD_TEMPLATE_DUP"); $isOK = false; break; } $check_templ[] = $val["TEMPLATE"] . ", " . $val["CONDITION"]; $isOK = true; } } if (!$isOK) { $this->LAST_ERROR .= GetMessage("MAIN_BAD_TEMPLATE") . $dupError; $arMsg[] = ["id" => "SITE_TEMPLATE", "text" => GetMessage("MAIN_BAD_TEMPLATE") . $dupError]; } } if ($ID === false) { $events = GetModuleEvents("main", "OnBeforeSiteAdd", true); } else { $events = GetModuleEvents("main", "OnBeforeSiteUpdate", true); } foreach ($events as $arEvent) { $bEventRes = ExecuteModuleEventEx($arEvent, [&$arFields]); if ($bEventRes === false) { if ($err = $APPLICATION->GetException()) { $this->LAST_ERROR .= $err->GetString() . " "; $arMsg[] = ["id" => "EVENT_ERROR", "text" => $err->GetString()]; } else { $this->LAST_ERROR .= "Unknown error. "; $arMsg[] = ["id" => "EVENT_ERROR", "text" => "Unknown error. "]; } break; } } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); } if ($this->LAST_ERROR <> '') { return false; } if ($ID === false) { $r = $DB->Query("SELECT 'x' FROM b_lang WHERE LID='" . $DB->ForSQL($arFields["LID"], 2) . "'"); if ($r->Fetch()) { $this->LAST_ERROR .= GetMessage("BAD_SITE_DUP") . " "; $e = new CAdminException([["id" => "LID", "text" => GetMessage("BAD_SITE_DUP")]]); $APPLICATION->ThrowException($e); return false; } } return true; } public static function SaveDomains($LID, $domains) { global $DB, $CACHE_MANAGER; if (CACHED_b_lang_domain !== false) { $CACHE_MANAGER->CleanDir("b_lang_domain"); } $DB->Query("DELETE FROM b_lang_domain WHERE LID='" . $DB->ForSQL($LID) . "'"); $domains = str_replace("\r", "\n", $domains); $arDomains = explode("\n", $domains); foreach ($arDomains as $i => $domain) { $domain = preg_replace("#^(http://|https://)#", "", rtrim(trim(mb_strtolower($domain)), "/")); $arErrors = []; if ($domainTmp = CBXPunycode::ToASCII($domain, $arErrors)) { $domain = $domainTmp; } $arDomains[$i] = $domain; } $arDomains = array_unique($arDomains); $bIsDomain = false; foreach ($arDomains as $domain) { if ($domain <> '') { $DB->Query("INSERT INTO b_lang_domain(LID, DOMAIN) VALUES('" . $DB->ForSQL($LID, 2) . "', '" . $DB->ForSQL($domain, 255) . "')"); $bIsDomain = true; } } $DB->Query("UPDATE b_lang SET DOMAIN_LIMITED='" . ($bIsDomain ? "Y" : "N") . "' WHERE LID='" . $DB->ForSql($LID) . "'"); Main\SiteDomainTable::cleanCache(); } public function Add($arFields) { global $DB, $DOCUMENT_ROOT, $CACHE_MANAGER; if (!$this->CheckFields($arFields)) { return false; } if (isset($arFields["ACTIVE"]) && $arFields["ACTIVE"] != "Y") { $arFields["ACTIVE"] = "N"; } if (isset($arFields["DEF"])) { if ($arFields["DEF"] == "Y") { $DB->Query("UPDATE b_lang SET DEF='N' WHERE DEF='Y'"); } else { $arFields["DEF"] = "N"; } } $arInsert = $DB->PrepareInsert("b_lang", $arFields); $strSql = "INSERT INTO b_lang(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")"; $DB->Query($strSql); if (CACHED_b_lang !== false) { $CACHE_MANAGER->CleanDir("b_lang"); } if (isset($arFields["DIR"])) { CheckDirPath($DOCUMENT_ROOT . $arFields["DIR"]); } if (isset($arFields["DOMAINS"])) { self::SaveDomains($arFields["LID"], $arFields["DOMAINS"]); } if (isset($arFields["TEMPLATE"])) { foreach ($arFields["TEMPLATE"] as $arTemplate) { if (trim($arTemplate["TEMPLATE"]) <> '') { $arInsert = $DB->PrepareInsert("b_site_template", [ 'SITE_ID' => $arFields["LID"], 'CONDITION' => trim($arTemplate["CONDITION"]), 'SORT' => $arTemplate["SORT"], 'TEMPLATE' => trim($arTemplate["TEMPLATE"]), ]); $strSql = "INSERT INTO b_site_template(" . $arInsert[0] . ") VALUES (" . $arInsert[1] . ")"; $DB->Query($strSql); } } if (CACHED_b_site_template !== false) { $CACHE_MANAGER->Clean("b_site_template"); } } SiteTable::cleanCache(); return $arFields["LID"]; } public function Update($ID, $arFields) { global $DB, $CACHE_MANAGER; unset(static::$MAIN_LANGS_CACHE[$ID]); unset(static::$MAIN_LANGS_ADMIN_CACHE[$ID]); if (!$this->CheckFields($arFields, $ID)) { return false; } if (isset($arFields["ACTIVE"]) && $arFields["ACTIVE"] != "Y") { $arFields["ACTIVE"] = "N"; } if (isset($arFields["DEF"])) { if ($arFields["DEF"] == "Y") { $DB->Query("UPDATE b_lang SET DEF='N' WHERE DEF='Y'"); } else { $arFields["DEF"] = "N"; } } $strUpdate = $DB->PrepareUpdate("b_lang", $arFields); if ($strUpdate <> '') { $strSql = "UPDATE b_lang SET " . $strUpdate . " WHERE LID='" . $DB->ForSql($ID, 2) . "'"; $DB->Query($strSql); } if (CACHED_b_lang !== false) { $CACHE_MANAGER->CleanDir("b_lang"); } if (isset($arFields["DIR"])) { CheckDirPath($_SERVER["DOCUMENT_ROOT"] . $arFields["DIR"]); } if (isset($arFields["DOMAINS"])) { self::SaveDomains($ID, $arFields["DOMAINS"]); } if (isset($arFields["TEMPLATE"])) { $DB->Query("DELETE FROM b_site_template WHERE SITE_ID='" . $DB->ForSQL($ID) . "'"); foreach ($arFields["TEMPLATE"] as $arTemplate) { if (trim($arTemplate["TEMPLATE"]) <> '') { $arInsert = $DB->PrepareInsert("b_site_template", [ 'SITE_ID' => $ID, 'CONDITION' => trim($arTemplate["CONDITION"]), 'SORT' => $arTemplate["SORT"], 'TEMPLATE' => trim($arTemplate["TEMPLATE"]), ]); $strSql = "INSERT INTO b_site_template(" . $arInsert[0] . ") VALUES (" . $arInsert[1] . ")"; $DB->Query($strSql); } } if (CACHED_b_site_template !== false) { $CACHE_MANAGER->Clean("b_site_template"); } } SiteTable::cleanCache(); return true; } public static function Delete($ID) { /** @global CMain $APPLICATION */ global $DB, $APPLICATION, $CACHE_MANAGER; $APPLICATION->ResetException(); foreach (GetModuleEvents("main", "OnBeforeLangDelete", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, [$ID]) === false) { $err = GetMessage("MAIN_BEFORE_DEL_ERR1") . ' ' . $arEvent['TO_NAME']; if ($ex = $APPLICATION->GetException()) { $err .= ': ' . $ex->GetString(); } $APPLICATION->throwException($err); return false; } } foreach (GetModuleEvents("main", "OnBeforeSiteDelete", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, [$ID]) === false) { $err = GetMessage("MAIN_BEFORE_DEL_ERR1") . ' ' . $arEvent['TO_NAME']; if ($ex = $APPLICATION->GetException()) { $err .= ': ' . $ex->GetString(); } $APPLICATION->throwException($err); return false; } } foreach (GetModuleEvents("main", "OnLangDelete", true) as $arEvent) { ExecuteModuleEventEx($arEvent, [$ID]); } foreach (GetModuleEvents("main", "OnSiteDelete", true) as $arEvent) { ExecuteModuleEventEx($arEvent, [$ID]); } if (!$DB->Query("DELETE FROM b_event_message_site WHERE SITE_ID='" . $DB->ForSQL($ID, 2) . "'")) { return false; } if (!$DB->Query("DELETE FROM b_lang_domain WHERE LID='" . $DB->ForSQL($ID, 2) . "'")) { return false; } if (CACHED_b_lang_domain !== false) { $CACHE_MANAGER->CleanDir("b_lang_domain"); } if (!$DB->Query("UPDATE b_event_message SET LID=NULL WHERE LID='" . $DB->ForSQL($ID, 2) . "'")) { return false; } if (!$DB->Query("DELETE FROM b_site_template WHERE SITE_ID='" . $DB->ForSQL($ID, 2) . "'")) { return false; } if (CACHED_b_site_template !== false) { $CACHE_MANAGER->Clean("b_site_template"); } $result = $DB->Query("DELETE FROM b_lang WHERE LID='" . $DB->ForSQL($ID, 2) . "'", true); if (CACHED_b_lang !== false) { $CACHE_MANAGER->CleanDir("b_lang"); } SiteTable::cleanCache(); Main\SiteDomainTable::cleanCache(); return $result; } public static function GetTemplateList($site_id) { global $DB; $strSql = "SELECT * " . "FROM b_site_template " . "WHERE SITE_ID='" . $DB->ForSQL($site_id, 2) . "' " . "ORDER BY SORT"; $dbr = $DB->Query($strSql); return $dbr; } public static function GetDefList() { return static::GetList('def_list', 'asc', ['ACTIVE' => 'Y']); } /** * @deprecated Use SiteTable::getDocumentRoot() */ public static function GetSiteDocRoot($site) { return SiteTable::getDocumentRoot($site === false ? null : $site); } public static function GetSiteByFullPath($path, $bOneResult = true) { $res = []; if (($p = realpath($path))) { $path = $p; } $path = str_replace("\\", "/", $path); $path = mb_strtolower($path) . "/"; $db_res = CSite::GetList("lendir", "desc"); while ($ar_res = $db_res->Fetch()) { $abspath = $ar_res["ABS_DOC_ROOT"] . $ar_res["DIR"]; if (($p = realpath($abspath))) { $abspath = $p; } $abspath = str_replace("\\", "/", $abspath); $abspath = mb_strtolower($abspath); if (mb_substr($abspath, -1) <> "/") { $abspath .= "/"; } if (mb_strpos($path, $abspath) === 0) { if ($bOneResult) { return $ar_res["ID"]; } $res[] = $ar_res["ID"]; } } if (!empty($res)) { return $res; } return false; } public static function GetList($by = "sort", $order = "asc", $arFilter = []) { global $DB, $CACHE_MANAGER; if (CACHED_b_lang !== false) { $cacheId = "b_lang" . md5($by . "." . $order . "." . serialize($arFilter)); if ($CACHE_MANAGER->Read(CACHED_b_lang, $cacheId, "b_lang")) { $arResult = $CACHE_MANAGER->Get($cacheId); $res = new CDBResult; $res->InitFromArray($arResult); $res = new _CLangDBResult($res); return $res; } } $strSqlSearch = ""; $bIncDomain = false; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if ((string)$val == '') { continue; } $val = $DB->ForSql($val); switch (strtoupper($key)) { case "ACTIVE": if ($val == "Y" || $val == "N") { $strSqlSearch .= " AND L.ACTIVE='" . $val . "'\n"; } break; case "DEFAULT": if ($val == "Y" || $val == "N") { $strSqlSearch .= " AND L.DEF='" . $val . "'\n"; } break; case "NAME": $strSqlSearch .= " AND UPPER(L.NAME) LIKE UPPER('" . $val . "')\n"; break; case "DOMAIN": $bIncDomain = true; $strSqlSearch .= " AND UPPER(D.DOMAIN) LIKE UPPER('" . $val . "')\n"; break; case "IN_DIR": $strSqlSearch .= " AND UPPER('" . $val . "') LIKE " . $DB->Concat("UPPER(L.DIR)", "'%'") . "\n"; break; case "ID": case "LID": $strSqlSearch .= " AND L.LID='" . $val . "'\n"; break; case "LANGUAGE_ID": $strSqlSearch .= " AND L.LANGUAGE_ID='" . $val . "'\n"; break; } } } $strSql = " SELECT " . ($bIncDomain ? " DISTINCT " : "") . " L.*, L.LID ID, L.LID SITE_ID, " . $DB->Length("L.DIR") . ", " . $DB->IsNull($DB->Length("L.DOC_ROOT"), "0") . ", C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION FROM b_culture C, b_lang L " . ($bIncDomain ? "LEFT JOIN b_lang_domain D ON D.LID=L.LID " : "") . " WHERE C.ID=L.CULTURE_ID " . $strSqlSearch . " "; $by = strtolower($by); $order = strtolower($order); if ($by == "lid" || $by == "id") { $strSqlOrder = " ORDER BY L.LID "; } elseif ($by == "active") { $strSqlOrder = " ORDER BY L.ACTIVE "; } elseif ($by == "name") { $strSqlOrder = " ORDER BY L.NAME "; } elseif ($by == "dir") { $strSqlOrder = " ORDER BY L.DIR "; } elseif ($by == "lendir") { $strSqlOrder = " ORDER BY " . $DB->IsNull($DB->Length("L.DOC_ROOT"), "0") . ($order == "desc" ? " desc" : "") . ", " . $DB->Length("L.DIR"); } elseif ($by == "def") { $strSqlOrder = " ORDER BY L.DEF "; } elseif ($by == "def_list") { $strSqlOrder = " ORDER BY L.DEF desc, L.SORT "; } else { $strSqlOrder = " ORDER BY L.SORT "; } if ($order == "desc") { $strSqlOrder .= " desc "; } $strSql .= $strSqlOrder; if (CACHED_b_lang === false) { $res = $DB->Query($strSql); } else { $arResult = []; $res = $DB->Query($strSql); while ($ar = $res->Fetch()) { $arResult[] = $ar; } $CACHE_MANAGER->Set($cacheId, $arResult); $res = new CDBResult; $res->InitFromArray($arResult); } $res = new _CLangDBResult($res); return $res; } public static function GetByID($ID) { return CSite::GetList('', '', ["LID" => $ID]); } public static function GetArrayByID($ID) { $res = self::GetByID($ID); return $res->Fetch(); } public static function GetDefSite($LID = false) { if ($LID <> '') { $dbSite = CSite::GetByID($LID); if ($dbSite->Fetch()) { return $LID; } } $dbDefSites = CSite::GetDefList(); if ($arDefSite = $dbDefSites->Fetch()) { return $arDefSite["LID"]; } return false; } public static function IsDistinctDocRoots($arFilter = []) { $s = false; $res = CSite::GetList('', '', $arFilter); while ($ar = $res->Fetch()) { if ($s !== false && $s != $ar["ABS_DOC_ROOT"]) { return true; } $s = $ar["ABS_DOC_ROOT"]; } return false; } /////////////////////////////////////////////////////////////////// // Returns drop down list with langs /////////////////////////////////////////////////////////////////// public static function SelectBox($sFieldName, $sValue, $sDefaultValue = "", $sFuncName = "", $field = "class=\"typeselect\"") { $l = CLang::GetList(); $s = '<select name="' . $sFieldName . '" ' . $field; $s1 = ''; if ($sFuncName <> '') { $s .= ' OnChange="' . $sFuncName . '"'; } $s .= '>' . "\n"; $found = false; while (($l_arr = $l->Fetch())) { $found = ($l_arr["LID"] == $sValue); $s1 .= '<option value="' . $l_arr["LID"] . '"' . ($found ? ' selected' : '') . '>[' . htmlspecialcharsex($l_arr["LID"]) . '] ' . htmlspecialcharsex($l_arr["NAME"]) . '</option>' . "\n"; } if ($sDefaultValue <> '') { $s .= "<option value='NOT_REF' " . ($found ? "" : "selected") . ">" . htmlspecialcharsex($sDefaultValue) . "</option>"; } return $s . $s1 . '</select>'; } public static function SelectBoxMulti($sFieldName, $Value) { $l = CLang::GetList(); if (is_array($Value)) { $arValue = $Value; } else { $arValue = [$Value]; } $s = '<div class="adm-list">'; while ($l_arr = $l->Fetch()) { $s .= '<div class="adm-list-item">' . '<div class="adm-list-control"><input type="checkbox" name="' . $sFieldName . '[]" value="' . htmlspecialcharsex($l_arr["LID"]) . '" id="' . htmlspecialcharsex($l_arr["LID"]) . '" class="typecheckbox"' . (in_array($l_arr["LID"], $arValue) ? ' checked' : '') . '></div>' . '<div class="adm-list-label"><label for="' . htmlspecialcharsex($l_arr["LID"]) . '">[' . htmlspecialcharsex($l_arr["LID"]) . '] ' . htmlspecialcharsex($l_arr["NAME"]) . '</label></div>' . '</div>'; } $s .= '</div>'; return $s; } public static function GetNameTemplates() { return [ '#NAME# #LAST_NAME#' => GetMessage('MAIN_NAME_JOHN_SMITH'), '#LAST_NAME# #NAME#' => GetMessage('MAIN_NAME_SMITH_JOHN'), '#TITLE# #LAST_NAME#' => GetMessage("MAIN_NAME_MR_SMITH"), '#NAME# #SECOND_NAME_SHORT# #LAST_NAME#' => GetMessage('MAIN_NAME_JOHN_L_SMITH'), '#LAST_NAME# #NAME# #SECOND_NAME#' => GetMessage('MAIN_NAME_SMITH_JOHN_LLOYD'), '#LAST_NAME#, #NAME# #SECOND_NAME#' => GetMessage('MAIN_NAME_SMITH_COMMA_JOHN_LLOYD'), '#NAME# #SECOND_NAME# #LAST_NAME#' => GetMessage('MAIN_NAME_JOHN_LLOYD_SMITH'), '#NAME_SHORT# #SECOND_NAME_SHORT# #LAST_NAME#' => GetMessage('MAIN_NAME_J_L_SMITH'), '#NAME_SHORT# #LAST_NAME#' => GetMessage('MAIN_NAME_J_SMITH'), '#LAST_NAME# #NAME_SHORT#' => GetMessage('MAIN_NAME_SMITH_J'), '#LAST_NAME# #NAME_SHORT# #SECOND_NAME_SHORT#' => GetMessage('MAIN_NAME_SMITH_J_L'), '#LAST_NAME#, #NAME_SHORT#' => GetMessage('MAIN_NAME_SMITH_COMMA_J'), '#LAST_NAME#, #NAME_SHORT# #SECOND_NAME_SHORT#' => GetMessage('MAIN_NAME_SMITH_COMMA_J_L'), ]; } /** * Returns current name template * * If site is not defined - will look for name template for current language. * If there is no value for language - returns pre-defined value @param null $dummy Unused * @param string $site_id - use to get value for the specific site * @return string ex: #LAST_NAME# #NAME# * @see CSite::GetDefaultNameFormat * FORMAT_NAME constant can be set in dbconn.php * */ public static function GetNameFormat($dummy = null, $site_id = "") { static $siteFormat = []; $format = ''; $context = Main\Context::getCurrent(); if ($site_id == "" || $context->getSite() == $site_id) { // from current site or language $format = $context->getCulture()->getFormatName(); } //site value if ($format == "") { if (!isset($siteFormat[$site_id])) { $db_res = CSite::GetByID($site_id); if ($res = $db_res->Fetch()) { $format = $res["FORMAT_NAME"]; $siteFormat[$site_id] = $format; } } else { $format = $siteFormat[$site_id]; } } //if not found - trying to get value for the language if ($format == "") { $format = $context->getCulture()->getFormatName(); } //if not found - trying to get default values if ($format == "") { $format = self::GetDefaultNameFormat(); } $format = str_replace(["#NOBR#", "#/NOBR#"], "", $format); return $format; } /** * Returns default name template * By default: Russian #LAST_NAME# #NAME#, English #NAME# #LAST_NAME# * * @return string - one of two possible default values */ public static function GetDefaultNameFormat() { return '#NAME# #LAST_NAME#'; } public static function GetCurTemplate() { /** @noinspection PhpUnusedLocalVariableInspection */ global $APPLICATION, $USER, $CACHE_MANAGER; $connection = Main\Application::getConnection(); $helper = $connection->getSqlHelper(); $conditionQuoted = $helper->quote("CONDITION"); $siteTemplate = ""; if (CACHED_b_site_template === false) { $strSql = " SELECT " . $conditionQuoted . ", TEMPLATE FROM b_site_template WHERE SITE_ID='" . SITE_ID . "' ORDER BY CASE WHEN " . $helper->getIsNullFunction($helper->getLengthFunction($conditionQuoted), 0) . "=0 THEN 2 ELSE 1 END, SORT "; $dbr = $connection->query($strSql); while ($ar = $dbr->fetch()) { $strCondition = trim($ar["CONDITION"]); if ($strCondition <> '' && (!@eval("return " . $strCondition . ";"))) { continue; } if (($path = getLocalPath("templates/" . $ar["TEMPLATE"], BX_PERSONAL_ROOT)) !== false && is_dir($_SERVER["DOCUMENT_ROOT"] . $path)) { $siteTemplate = $ar["TEMPLATE"]; break; } } } else { if ($CACHE_MANAGER->Read(CACHED_b_site_template, "b_site_template")) { $arSiteTemplateBySite = $CACHE_MANAGER->Get("b_site_template"); } else { $dbr = $connection->query(" SELECT " . $conditionQuoted . ", TEMPLATE, SITE_ID FROM b_site_template ORDER BY SITE_ID, CASE WHEN " . $helper->getIsNullFunction($helper->getLengthFunction($conditionQuoted), 0) . "=0 THEN 2 ELSE 1 END, SORT "); $arSiteTemplateBySite = []; while ($ar = $dbr->fetch()) { $arSiteTemplateBySite[$ar['SITE_ID']][] = $ar; } $CACHE_MANAGER->Set("b_site_template", $arSiteTemplateBySite); } if (isset($arSiteTemplateBySite[SITE_ID]) && is_array($arSiteTemplateBySite[SITE_ID])) { foreach ($arSiteTemplateBySite[SITE_ID] as $ar) { $strCondition = trim($ar["CONDITION"]); if ($strCondition <> '' && (!@eval("return " . $strCondition . ";"))) { continue; } if (($path = getLocalPath("templates/" . $ar["TEMPLATE"], BX_PERSONAL_ROOT)) !== false && is_dir($_SERVER["DOCUMENT_ROOT"] . $path)) { $siteTemplate = $ar["TEMPLATE"]; break; } } } } if ($siteTemplate == "") { $siteTemplate = ".default"; } $event = new Main\Event("main", "OnGetCurrentSiteTemplate", ["template" => $siteTemplate]); $event->send(); foreach ($event->getResults() as $evenResult) { if (($result = $evenResult->getParameters()) <> '') { //only the first result matters $siteTemplate = $result; break; } } return $siteTemplate; } } class CAllLang extends CAllSite { } class CSite extends CAllSite { } class CLang extends CSite { }