25 public static function InDir($strDir)
29 return (str_starts_with(
$APPLICATION->GetCurPage(
true), $strDir));
32 public static function InPeriod($iUnixTimestampFrom, $iUnixTimestampTo)
34 if ($iUnixTimestampFrom > 0 && time() < $iUnixTimestampFrom)
38 if ($iUnixTimestampTo > 0 && time() > $iUnixTimestampTo)
49 $arUserGroups =
$USER->GetUserGroupArray();
50 if (!empty(array_intersect($arUserGroups,
$arGroups)))
62 return Main\Context::getCurrent()->getCulture()->getWeekStart();
67 $fullFormat = (strtoupper(
$type) ==
'FULL');
69 if (
$lang ===
false && defined(
"LANG"))
79 if ($fullFormat && defined(
"FORMAT_DATETIME"))
83 if (!$fullFormat && defined(
"FORMAT_DATE"))
89 $formatKey = ($fullFormat ?
'FORMAT_DATETIME' :
'FORMAT_DATE');
91 if (!$bSearchInSitesOnly && defined(
"ADMIN_SECTION") &&
ADMIN_SECTION ===
true)
93 if (!isset(static::$MAIN_LANGS_ADMIN_CACHE[
$lang]))
98 static::$MAIN_LANGS_ADMIN_CACHE[
$res[
"LID"]] =
$res;
102 if (isset(static::$MAIN_LANGS_ADMIN_CACHE[
$lang]))
104 $format = mb_strtoupper(static::$MAIN_LANGS_ADMIN_CACHE[
$lang][$formatKey]);
111 if (!isset(static::$MAIN_LANGS_CACHE[
$lang]))
116 static::$MAIN_LANGS_CACHE[
$res[
"LID"]] =
$res;
120 static::$MAIN_LANGS_ADMIN_CACHE[
$res[
"LID"]] =
$res;
125 if (isset(static::$MAIN_LANGS_ADMIN_CACHE[
$lang]))
127 $format = mb_strtoupper(static::$MAIN_LANGS_CACHE[
$lang][$formatKey]);
134 $format = ($fullFormat ?
"DD.MM.YYYY HH:MI:SS" :
"DD.MM.YYYY");
142 $dateTimeFormat = self::GetDateFormat(
'FULL',
$lang, $bSearchInSitesOnly);
143 preg_match(
'~[HG]~', $dateTimeFormat, $chars, PREG_OFFSET_CAPTURE);
144 return trim(mb_substr($dateTimeFormat, $chars[0][1]));
152 $this->LAST_ERROR =
"";
157 $this->LAST_ERROR .=
GetMessage(
"BAD_SITE_NAME") .
" ";
158 $arMsg[] = [
"id" =>
"NAME",
"text" =>
GetMessage(
"BAD_SITE_NAME")];
162 $this->LAST_ERROR .=
GetMessage(
"BAD_SITE_LID") .
" ";
163 $arMsg[] = [
"id" =>
"LID",
"text" =>
GetMessage(
"BAD_SITE_LID")];
167 $this->LAST_ERROR .=
GetMessage(
"MAIN_SITE_LATIN") .
" ";
168 $arMsg[] = [
"id" =>
"LID",
"text" =>
GetMessage(
"MAIN_SITE_LATIN")];
172 $this->LAST_ERROR .=
GetMessage(
"BAD_LANG_DIR") .
" ";
173 $arMsg[] = [
"id" =>
"DIR",
"text" =>
GetMessage(
"BAD_LANG_DIR")];
177 $this->LAST_ERROR .=
GetMessage(
"MAIN_BAD_LANGUAGE_ID") .
" ";
178 $arMsg[] = [
"id" =>
"LANGUAGE_ID",
"text" =>
GetMessage(
"MAIN_BAD_LANGUAGE_ID")];
183 if (!$dbl_check->Fetch())
185 $this->LAST_ERROR .=
GetMessage(
"MAIN_BAD_LANGUAGE_ID_BAD") .
" ";
186 $arMsg[] = [
"id" =>
"LANGUAGE_ID",
"text" =>
GetMessage(
"MAIN_BAD_LANGUAGE_ID_BAD")];
191 $this->LAST_ERROR .=
GetMessage(
"lang_check_culture_not_set") .
" ";
192 $arMsg[] = [
"id" =>
"CULTURE_ID",
"text" =>
GetMessage(
"lang_check_culture_not_set")];
196 if (CultureTable::getRowById(
$arFields[
"CULTURE_ID"]) ===
null)
198 $this->LAST_ERROR .=
GetMessage(
"lang_check_culture_incorrect") .
" ";
199 $arMsg[] = [
"id" =>
"CULTURE_ID",
"text" =>
GetMessage(
"lang_check_culture_incorrect")];
204 $this->LAST_ERROR .=
GetMessage(
"BAD_SORT") .
" ";
205 $arMsg[] = [
"id" =>
"SORT",
"text" =>
GetMessage(
"BAD_SORT")];
214 if (
$val[
"TEMPLATE"] <>
'' &&
getLocalPath(
"templates/" .
$val[
"TEMPLATE"], BX_PERSONAL_ROOT) !==
false)
216 if (in_array(
$val[
"TEMPLATE"] .
", " .
$val[
"CONDITION"], $check_templ))
218 $dupError =
" " .
GetMessage(
"MAIN_BAD_TEMPLATE_DUP");
222 $check_templ[] =
$val[
"TEMPLATE"] .
", " .
$val[
"CONDITION"];
228 $this->LAST_ERROR .=
GetMessage(
"MAIN_BAD_TEMPLATE") . $dupError;
229 $arMsg[] = [
"id" =>
"SITE_TEMPLATE",
"text" =>
GetMessage(
"MAIN_BAD_TEMPLATE") . $dupError];
241 foreach ($events as $arEvent)
244 if ($bEventRes ===
false)
248 $this->LAST_ERROR .= $err->GetString() .
" ";
249 $arMsg[] = [
"id" =>
"EVENT_ERROR",
"text" => $err->GetString()];
253 $this->LAST_ERROR .=
"Unknown error. ";
254 $arMsg[] = [
"id" =>
"EVENT_ERROR",
"text" =>
"Unknown error. "];
266 if ($this->LAST_ERROR <>
'')
273 $r =
$DB->Query(
"SELECT 'x' FROM b_lang WHERE LID='" .
$DB->ForSQL(
$arFields[
"LID"], 2) .
"'");
276 $this->LAST_ERROR .=
GetMessage(
"BAD_SITE_DUP") .
" ";
288 SiteDomainTable::deleteByFilter([
'=LID' => $LID]);
290 $domains = str_replace(
"\r",
"\n", $domains);
291 $arDomains = explode(
"\n", $domains);
292 foreach ($arDomains as
$i => $domain)
294 $domain = preg_replace(
"#^(http://|https://)#",
"", rtrim(trim(mb_strtolower($domain)),
"/"));
299 $domain = $domainTmp;
302 $arDomains[
$i] = $domain;
304 $arDomains = array_unique($arDomains);
307 foreach ($arDomains as $domain)
311 SiteDomainTable::add([
339 $DB->Query(
"UPDATE b_lang SET DEF='N' WHERE DEF='Y'");
350 "INSERT INTO b_lang(" . $arInsert[0] .
") " .
351 "VALUES(" . $arInsert[1] .
")";
355 if (CACHED_b_lang !==
false)
376 SiteTemplateTable::add([
395 unset(static::$MAIN_LANGS_CACHE[
$ID]);
396 unset(static::$MAIN_LANGS_ADMIN_CACHE[
$ID]);
412 $DB->Query(
"UPDATE b_lang SET DEF='N' WHERE DEF='Y'");
421 if ($strUpdate <>
'')
423 $strSql =
"UPDATE b_lang SET " . $strUpdate .
" WHERE LID='" .
$DB->ForSql(
$ID, 2) .
"'";
427 if (CACHED_b_lang !==
false)
444 SiteTemplateTable::deleteByFilter([
'=SITE_ID' =>
$ID]);
450 SiteTemplateTable::add([
472 foreach (
GetModuleEvents(
"main",
"OnBeforeLangDelete",
true) as $arEvent)
476 $err =
GetMessage(
"MAIN_BEFORE_DEL_ERR1") .
' ' . $arEvent[
'TO_NAME'];
479 $err .=
': ' . $ex->GetString();
486 foreach (
GetModuleEvents(
"main",
"OnBeforeSiteDelete",
true) as $arEvent)
490 $err =
GetMessage(
"MAIN_BEFORE_DEL_ERR1") .
' ' . $arEvent[
'TO_NAME'];
493 $err .=
': ' . $ex->GetString();
510 if (!
$DB->Query(
"DELETE FROM b_event_message_site WHERE SITE_ID='" .
$DB->ForSQL(
$ID, 2) .
"'"))
515 if (!
$DB->Query(
"UPDATE b_event_message SET LID=NULL WHERE LID='" .
$DB->ForSQL(
$ID, 2) .
"'"))
520 SiteDomainTable::deleteByFilter([
'=LID' =>
$ID]);
522 SiteTemplateTable::deleteByFilter([
'=SITE_ID' =>
$ID]);
524 $result =
$DB->Query(
"DELETE FROM b_lang WHERE LID='" .
$DB->ForSQL(
$ID, 2) .
"'",
true);
526 if (CACHED_b_lang !==
false)
542 return SiteTemplateTable::getList([
543 'filter' => [
'=SITE_ID' =>
$site_id],
544 'order' => [
'SORT' =>
'ASC'],
545 'cache' => [
'ttl' => 86400],
551 return static::GetList(
'def_list',
'asc', [
'ACTIVE' =>
'Y']);
577 if ((
$p = realpath($abspath)))
581 $abspath = str_replace(
"\\",
"/", $abspath);
582 $abspath = mb_strtolower($abspath);
583 if (mb_substr($abspath, -1) <>
"/")
587 if (mb_strpos(
$path, $abspath) === 0)
609 if (CACHED_b_lang !==
false)
611 $cacheId =
"b_lang" . md5($by .
"." .
$order .
"." . serialize(
$arFilter));
629 if ((
string)
$val ==
'')
634 switch (strtoupper(
$key))
639 $strSqlSearch .=
" AND L.ACTIVE='" .
$val .
"'\n";
645 $strSqlSearch .=
" AND L.DEF='" .
$val .
"'\n";
649 $strSqlSearch .=
" AND UPPER(L.NAME) LIKE UPPER('" .
$val .
"')\n";
653 $strSqlSearch .=
" AND UPPER(D.DOMAIN) LIKE UPPER('" .
$val .
"')\n";
656 $strSqlSearch .=
" AND UPPER('" .
$val .
"') LIKE " .
$DB->Concat(
"UPPER(L.DIR)",
"'%'") .
"\n";
660 $strSqlSearch .=
" AND L.LID='" .
$val .
"'\n";
663 $strSqlSearch .=
" AND L.LANGUAGE_ID='" .
$val .
"'\n";
670 SELECT " . ($bIncDomain ?
" DISTINCT " :
"") .
"
674 " .
$DB->Length(
"L.DIR") .
",
675 " .
$DB->IsNull(
$DB->Length(
"L.DOC_ROOT"),
"0") .
",
676 C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION
679 b_lang L " . ($bIncDomain ?
"LEFT JOIN b_lang_domain D ON D.LID=L.LID " :
"") .
"
682 " . $strSqlSearch .
"
685 $by = strtolower($by);
688 if ($by ==
"lid" || $by ==
"id")
690 $strSqlOrder =
" ORDER BY L.LID ";
694 $strSqlOrder =
" ORDER BY L.ACTIVE ";
698 $strSqlOrder =
" ORDER BY L.NAME ";
702 $strSqlOrder =
" ORDER BY L.DIR ";
706 $strSqlOrder =
" ORDER BY " .
$DB->IsNull(
$DB->Length(
"L.DOC_ROOT"),
"0") . (
$order ==
"desc" ?
" desc" :
"") .
", " .
$DB->Length(
"L.DIR");
710 $strSqlOrder =
" ORDER BY L.DEF ";
712 elseif ($by ==
"def_list")
714 $strSqlOrder =
" ORDER BY L.DEF desc, L.SORT ";
718 $strSqlOrder =
" ORDER BY L.SORT ";
723 $strSqlOrder .=
" desc ";
726 $strSql .= $strSqlOrder;
727 if (CACHED_b_lang ===
false)
757 return $res->Fetch();
765 if ($dbSite->Fetch())
772 if ($arDefSite = $dbDefSites->Fetch())
774 return $arDefSite[
"LID"];
786 if ($s !==
false && $s !=
$ar[
"ABS_DOC_ROOT"])
790 $s =
$ar[
"ABS_DOC_ROOT"];
798 public static function SelectBox($sFieldName, $sValue, $sDefaultValue =
"", $sFuncName =
"", $field =
"class=\"typeselect\"")
801 $s =
'<select name="' . $sFieldName .
'" ' . $field;
803 if ($sFuncName <>
'')
805 $s .=
' OnChange="' . $sFuncName .
'"';
809 while (($l_arr =
$l->Fetch()))
811 $found = ($l_arr[
"LID"] == $sValue);
812 $s1 .=
'<option value="' . $l_arr[
"LID"] .
'"' . ($found ?
' selected' :
'') .
'>[' . htmlspecialcharsex($l_arr[
"LID"]) .
'] ' . htmlspecialcharsex($l_arr[
"NAME"]) .
'</option>' .
"\n";
814 if ($sDefaultValue <>
'')
816 $s .=
"<option value='NOT_REF' " . ($found ?
"" :
"selected") .
">" . htmlspecialcharsex($sDefaultValue) .
"</option>";
818 return $s . $s1 .
'</select>';
824 if (is_array($Value))
833 $s =
'<div class="adm-list">';
834 while ($l_arr =
$l->Fetch())
837 '<div class="adm-list-item">' .
838 '<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>' .
839 '<div class="adm-list-label"><label for="' . htmlspecialcharsex($l_arr[
"LID"]) .
'">[' . htmlspecialcharsex($l_arr[
"LID"]) .
'] ' . htmlspecialcharsex($l_arr[
"NAME"]) .
'</label></div>' .
851 '#NAME# #LAST_NAME#' =>
GetMessage(
'MAIN_NAME_JOHN_SMITH'),
852 '#LAST_NAME# #NAME#' =>
GetMessage(
'MAIN_NAME_SMITH_JOHN'),
853 '#TITLE# #LAST_NAME#' =>
GetMessage(
"MAIN_NAME_MR_SMITH"),
854 '#NAME# #SECOND_NAME_SHORT# #LAST_NAME#' =>
GetMessage(
'MAIN_NAME_JOHN_L_SMITH'),
855 '#LAST_NAME# #NAME# #SECOND_NAME#' =>
GetMessage(
'MAIN_NAME_SMITH_JOHN_LLOYD'),
856 '#LAST_NAME#, #NAME# #SECOND_NAME#' =>
GetMessage(
'MAIN_NAME_SMITH_COMMA_JOHN_LLOYD'),
857 '#NAME# #SECOND_NAME# #LAST_NAME#' =>
GetMessage(
'MAIN_NAME_JOHN_LLOYD_SMITH'),
858 '#NAME_SHORT# #SECOND_NAME_SHORT# #LAST_NAME#' =>
GetMessage(
'MAIN_NAME_J_L_SMITH'),
859 '#NAME_SHORT# #LAST_NAME#' =>
GetMessage(
'MAIN_NAME_J_SMITH'),
860 '#LAST_NAME# #NAME_SHORT#' =>
GetMessage(
'MAIN_NAME_SMITH_J'),
861 '#LAST_NAME# #NAME_SHORT# #SECOND_NAME_SHORT#' =>
GetMessage(
'MAIN_NAME_SMITH_J_L'),
862 '#LAST_NAME#, #NAME_SHORT#' =>
GetMessage(
'MAIN_NAME_SMITH_COMMA_J'),
863 '#LAST_NAME#, #NAME_SHORT# #SECOND_NAME_SHORT#' =>
GetMessage(
'MAIN_NAME_SMITH_COMMA_J_L'),
880 static $siteFormat = [];
883 $context = Main\Context::getCurrent();
888 $format =
$context->getCulture()->getFormatName();
899 $format =
$res[
"FORMAT_NAME"];
912 $format =
$context->getCulture()->getFormatName();
918 $format = self::GetDefaultNameFormat();
921 $format = str_replace([
"#NOBR#",
"#/NOBR#"],
"", $format);
934 return '#NAME# #LAST_NAME#';
942 $dbr = SiteTemplateTable::getList([
943 'select' => [
'CONDITION',
'TEMPLATE'],
944 'filter' => [
'=SITE_ID' =>
SITE_ID],
945 'order' => [
'SITE_ID' =>
'ASC',
'EMPTY_CONDITION' =>
'DESC',
'SORT' =>
'ASC'],
946 'cache' => [
'ttl' => 86400],
950 while (
$ar = $dbr->fetch())
952 $strCondition = trim(
$ar[
"CONDITION"]);
953 if ($strCondition <>
'' && (!@eval(
"return " . $strCondition .
";")))
959 $siteTemplate =
$ar[
"TEMPLATE"];
964 if ($siteTemplate ==
"")
966 $siteTemplate =
".default";
969 $event =
new Main\Event(
"main",
"OnGetCurrentSiteTemplate", [
"template" => $siteTemplate]);
972 foreach (
$event->getResults() as $evenResult)
974 if ((
$result = $evenResult->getParameters()) <>
'')
982 return $siteTemplate;
static update($primary, array $data)
static getDocumentRoot($siteId=null)
static GetTimeFormat($lang=false, $bSearchInSitesOnly=false)
CheckFields($arFields, $ID=false)
static GetDefaultNameFormat()
static InPeriod($iUnixTimestampFrom, $iUnixTimestampTo)
static GetNameFormat($dummy=null, $site_id="")
static GetDefSite($LID=false)
static SelectBoxMulti($sFieldName, $Value)
static GetDateFormat($type="FULL", $lang=false, $bSearchInSitesOnly=false)
static GetSiteDocRoot($site)
static IsDistinctDocRoots($arFilter=[])
static GetNameTemplates()
static GetTemplateList($site_id)
static GetSiteByFullPath($path, $bOneResult=true)
static SelectBox($sFieldName, $sValue, $sDefaultValue="", $sFuncName="", $field="class=\"typeselect\"")
static GetList($by="sort", $order="asc", $arFilter=[])
static InGroup($arGroups)
static SaveDomains($LID, $domains)
static $MAIN_LANGS_ADMIN_CACHE
static ToASCII($domainName, &$arErrors)
$_SERVER["DOCUMENT_ROOT"]
if(!defined('SITE_ID')) $lang
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
getLocalPath($path, $baseFolder="/bitrix")
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key