1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
site.php
См. документацию.
1<?php
2
9
10use Bitrix\Main;
15
16IncludeModuleLangFile(__FILE__);
17
19{
20 public static $MAIN_LANGS_CACHE = [];
21 public static $MAIN_LANGS_ADMIN_CACHE = [];
22
24
25 public static function InDir($strDir)
26 {
28 global $APPLICATION;
29 return (str_starts_with($APPLICATION->GetCurPage(true), $strDir));
30 }
31
32 public static function InPeriod($iUnixTimestampFrom, $iUnixTimestampTo)
33 {
34 if ($iUnixTimestampFrom > 0 && time() < $iUnixTimestampFrom)
35 {
36 return false;
37 }
38 if ($iUnixTimestampTo > 0 && time() > $iUnixTimestampTo)
39 {
40 return false;
41 }
42
43 return true;
44 }
45
46 public static function InGroup($arGroups)
47 {
48 global $USER;
49 $arUserGroups = $USER->GetUserGroupArray();
50 if (!empty(array_intersect($arUserGroups, $arGroups)))
51 {
52 return true;
53 }
54 return false;
55 }
56
60 public static function GetWeekStart()
61 {
62 return Main\Context::getCurrent()->getCulture()->getWeekStart();
63 }
64
65 public static function GetDateFormat($type = "FULL", $lang = false, $bSearchInSitesOnly = false)
66 {
67 $fullFormat = (strtoupper($type) == 'FULL');
68
69 if ($lang === false && defined("LANG"))
70 {
71 $lang = LANG;
72 }
73
74 $format = '';
75 if ($lang !== false)
76 {
77 if (defined("SITE_ID") && $lang == SITE_ID)
78 {
79 if ($fullFormat && defined("FORMAT_DATETIME"))
80 {
81 return FORMAT_DATETIME;
82 }
83 if (!$fullFormat && defined("FORMAT_DATE"))
84 {
85 return FORMAT_DATE;
86 }
87 }
88
89 $formatKey = ($fullFormat ? 'FORMAT_DATETIME' : 'FORMAT_DATE');
90
91 if (!$bSearchInSitesOnly && defined("ADMIN_SECTION") && ADMIN_SECTION === true)
92 {
93 if (!isset(static::$MAIN_LANGS_ADMIN_CACHE[$lang]))
94 {
96 if ($res = $res->Fetch())
97 {
98 static::$MAIN_LANGS_ADMIN_CACHE[$res["LID"]] = $res;
99 }
100 }
101
102 if (isset(static::$MAIN_LANGS_ADMIN_CACHE[$lang]))
103 {
104 $format = mb_strtoupper(static::$MAIN_LANGS_ADMIN_CACHE[$lang][$formatKey]);
105 }
106 }
107
108 // if LANG is not found in LangAdmin:
109 if ($format == '')
110 {
111 if (!isset(static::$MAIN_LANGS_CACHE[$lang]))
112 {
114 if ($res = $res->Fetch())
115 {
116 static::$MAIN_LANGS_CACHE[$res["LID"]] = $res;
117
118 if (defined("ADMIN_SECTION") && ADMIN_SECTION === true)
119 {
120 static::$MAIN_LANGS_ADMIN_CACHE[$res["LID"]] = $res;
121 }
122 }
123 }
124
125 if (isset(static::$MAIN_LANGS_ADMIN_CACHE[$lang]))
126 {
127 $format = mb_strtoupper(static::$MAIN_LANGS_CACHE[$lang][$formatKey]);
128 }
129 }
130 }
131
132 if ($format == '')
133 {
134 $format = ($fullFormat ? "DD.MM.YYYY HH:MI:SS" : "DD.MM.YYYY");
135 }
136
137 return $format;
138 }
139
140 public static function GetTimeFormat($lang = false, $bSearchInSitesOnly = false)
141 {
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]));
145 }
146
147 public function CheckFields($arFields, $ID = false)
148 {
150 global $APPLICATION, $DB;
151
152 $this->LAST_ERROR = "";
153 $arMsg = [];
154
155 if (isset($arFields["NAME"]) && mb_strlen($arFields["NAME"]) < 2)
156 {
157 $this->LAST_ERROR .= GetMessage("BAD_SITE_NAME") . " ";
158 $arMsg[] = ["id" => "NAME", "text" => GetMessage("BAD_SITE_NAME")];
159 }
160 if (($ID === false || isset($arFields["LID"])) && mb_strlen($arFields["LID"]) <> 2)
161 {
162 $this->LAST_ERROR .= GetMessage("BAD_SITE_LID") . " ";
163 $arMsg[] = ["id" => "LID", "text" => GetMessage("BAD_SITE_LID")];
164 }
165 if (isset($arFields["LID"]) && preg_match("/[^a-z0-9_]/i", $arFields["LID"]))
166 {
167 $this->LAST_ERROR .= GetMessage("MAIN_SITE_LATIN") . " ";
168 $arMsg[] = ["id" => "LID", "text" => GetMessage("MAIN_SITE_LATIN")];
169 }
170 if (isset($arFields["DIR"]) && $arFields["DIR"] == '')
171 {
172 $this->LAST_ERROR .= GetMessage("BAD_LANG_DIR") . " ";
173 $arMsg[] = ["id" => "DIR", "text" => GetMessage("BAD_LANG_DIR")];
174 }
175 if ($ID === false && !isset($arFields["LANGUAGE_ID"]))
176 {
177 $this->LAST_ERROR .= GetMessage("MAIN_BAD_LANGUAGE_ID") . " ";
178 $arMsg[] = ["id" => "LANGUAGE_ID", "text" => GetMessage("MAIN_BAD_LANGUAGE_ID")];
179 }
180 if (isset($arFields["LANGUAGE_ID"]))
181 {
182 $dbl_check = CLanguage::GetByID($arFields["LANGUAGE_ID"]);
183 if (!$dbl_check->Fetch())
184 {
185 $this->LAST_ERROR .= GetMessage("MAIN_BAD_LANGUAGE_ID_BAD") . " ";
186 $arMsg[] = ["id" => "LANGUAGE_ID", "text" => GetMessage("MAIN_BAD_LANGUAGE_ID_BAD")];
187 }
188 }
189 if ($ID === false && !isset($arFields["CULTURE_ID"]))
190 {
191 $this->LAST_ERROR .= GetMessage("lang_check_culture_not_set") . " ";
192 $arMsg[] = ["id" => "CULTURE_ID", "text" => GetMessage("lang_check_culture_not_set")];
193 }
194 if (isset($arFields["CULTURE_ID"]))
195 {
196 if (CultureTable::getRowById($arFields["CULTURE_ID"]) === null)
197 {
198 $this->LAST_ERROR .= GetMessage("lang_check_culture_incorrect") . " ";
199 $arMsg[] = ["id" => "CULTURE_ID", "text" => GetMessage("lang_check_culture_incorrect")];
200 }
201 }
202 if (isset($arFields["SORT"]) && $arFields["SORT"] == '')
203 {
204 $this->LAST_ERROR .= GetMessage("BAD_SORT") . " ";
205 $arMsg[] = ["id" => "SORT", "text" => GetMessage("BAD_SORT")];
206 }
207 if (isset($arFields["TEMPLATE"]))
208 {
209 $isOK = false;
210 $check_templ = [];
211 $dupError = "";
212 foreach ($arFields["TEMPLATE"] as $val)
213 {
214 if ($val["TEMPLATE"] <> '' && getLocalPath("templates/" . $val["TEMPLATE"], BX_PERSONAL_ROOT) !== false)
215 {
216 if (in_array($val["TEMPLATE"] . ", " . $val["CONDITION"], $check_templ))
217 {
218 $dupError = " " . GetMessage("MAIN_BAD_TEMPLATE_DUP");
219 $isOK = false;
220 break;
221 }
222 $check_templ[] = $val["TEMPLATE"] . ", " . $val["CONDITION"];
223 $isOK = true;
224 }
225 }
226 if (!$isOK)
227 {
228 $this->LAST_ERROR .= GetMessage("MAIN_BAD_TEMPLATE") . $dupError;
229 $arMsg[] = ["id" => "SITE_TEMPLATE", "text" => GetMessage("MAIN_BAD_TEMPLATE") . $dupError];
230 }
231 }
232
233 if ($ID === false)
234 {
235 $events = GetModuleEvents("main", "OnBeforeSiteAdd", true);
236 }
237 else
238 {
239 $events = GetModuleEvents("main", "OnBeforeSiteUpdate", true);
240 }
241 foreach ($events as $arEvent)
242 {
243 $bEventRes = ExecuteModuleEventEx($arEvent, [&$arFields]);
244 if ($bEventRes === false)
245 {
246 if ($err = $APPLICATION->GetException())
247 {
248 $this->LAST_ERROR .= $err->GetString() . " ";
249 $arMsg[] = ["id" => "EVENT_ERROR", "text" => $err->GetString()];
250 }
251 else
252 {
253 $this->LAST_ERROR .= "Unknown error. ";
254 $arMsg[] = ["id" => "EVENT_ERROR", "text" => "Unknown error. "];
255 }
256 break;
257 }
258 }
259
260 if (!empty($arMsg))
261 {
262 $e = new CAdminException($arMsg);
263 $APPLICATION->ThrowException($e);
264 }
265
266 if ($this->LAST_ERROR <> '')
267 {
268 return false;
269 }
270
271 if ($ID === false)
272 {
273 $r = $DB->Query("SELECT 'x' FROM b_lang WHERE LID='" . $DB->ForSQL($arFields["LID"], 2) . "'");
274 if ($r->Fetch())
275 {
276 $this->LAST_ERROR .= GetMessage("BAD_SITE_DUP") . " ";
277 $e = new CAdminException([["id" => "LID", "text" => GetMessage("BAD_SITE_DUP")]]);
278 $APPLICATION->ThrowException($e);
279 return false;
280 }
281 }
282
283 return true;
284 }
285
286 public static function SaveDomains($LID, $domains)
287 {
288 SiteDomainTable::deleteByFilter(['=LID' => $LID]);
289
290 $domains = str_replace("\r", "\n", $domains);
291 $arDomains = explode("\n", $domains);
292 foreach ($arDomains as $i => $domain)
293 {
294 $domain = preg_replace("#^(http://|https://)#", "", rtrim(trim(mb_strtolower($domain)), "/"));
295
296 $arErrors = [];
297 if ($domainTmp = CBXPunycode::ToASCII($domain, $arErrors))
298 {
299 $domain = $domainTmp;
300 }
301
302 $arDomains[$i] = $domain;
303 }
304 $arDomains = array_unique($arDomains);
305
306 $bIsDomain = false;
307 foreach ($arDomains as $domain)
308 {
309 if ($domain <> '')
310 {
311 SiteDomainTable::add([
312 'LID' => $LID,
313 'DOMAIN' => $domain,
314 ]);
315 $bIsDomain = true;
316 }
317 }
318 SiteTable::update($LID, ['DOMAIN_LIMITED' => ($bIsDomain ? "Y" : "N")]);
319 }
320
321 public function Add($arFields)
322 {
323 global $DB, $CACHE_MANAGER;
324
325 if (!$this->CheckFields($arFields))
326 {
327 return false;
328 }
329
330 if (isset($arFields["ACTIVE"]) && $arFields["ACTIVE"] != "Y")
331 {
332 $arFields["ACTIVE"] = "N";
333 }
334
335 if (isset($arFields["DEF"]))
336 {
337 if ($arFields["DEF"] == "Y")
338 {
339 $DB->Query("UPDATE b_lang SET DEF='N' WHERE DEF='Y'");
340 }
341 else
342 {
343 $arFields["DEF"] = "N";
344 }
345 }
346
347 $arInsert = $DB->PrepareInsert("b_lang", $arFields);
348
349 $strSql =
350 "INSERT INTO b_lang(" . $arInsert[0] . ") " .
351 "VALUES(" . $arInsert[1] . ")";
352
353 $DB->Query($strSql);
354
355 if (CACHED_b_lang !== false)
356 {
357 $CACHE_MANAGER->CleanDir("b_lang");
358 }
359
360 if (isset($arFields["DIR"]))
361 {
362 CheckDirPath($_SERVER["DOCUMENT_ROOT"] . $arFields["DIR"]);
363 }
364
365 if (isset($arFields["DOMAINS"]))
366 {
367 self::SaveDomains($arFields["LID"], $arFields["DOMAINS"]);
368 }
369
370 if (isset($arFields["TEMPLATE"]))
371 {
372 foreach ($arFields["TEMPLATE"] as $arTemplate)
373 {
374 if (trim($arTemplate["TEMPLATE"]) <> '')
375 {
376 SiteTemplateTable::add([
377 'SITE_ID' => $arFields["LID"],
378 'CONDITION' => trim($arTemplate["CONDITION"]),
379 'SORT' => $arTemplate["SORT"],
380 'TEMPLATE' => trim($arTemplate["TEMPLATE"]),
381 ]);
382 }
383 }
384 }
385
387
388 return $arFields["LID"];
389 }
390
391 public function Update($ID, $arFields)
392 {
393 global $DB, $CACHE_MANAGER;
394
395 unset(static::$MAIN_LANGS_CACHE[$ID]);
396 unset(static::$MAIN_LANGS_ADMIN_CACHE[$ID]);
397
398 if (!$this->CheckFields($arFields, $ID))
399 {
400 return false;
401 }
402
403 if (isset($arFields["ACTIVE"]) && $arFields["ACTIVE"] != "Y")
404 {
405 $arFields["ACTIVE"] = "N";
406 }
407
408 if (isset($arFields["DEF"]))
409 {
410 if ($arFields["DEF"] == "Y")
411 {
412 $DB->Query("UPDATE b_lang SET DEF='N' WHERE DEF='Y'");
413 }
414 else
415 {
416 $arFields["DEF"] = "N";
417 }
418 }
419
420 $strUpdate = $DB->PrepareUpdate("b_lang", $arFields);
421 if ($strUpdate <> '')
422 {
423 $strSql = "UPDATE b_lang SET " . $strUpdate . " WHERE LID='" . $DB->ForSql($ID, 2) . "'";
424 $DB->Query($strSql);
425 }
426
427 if (CACHED_b_lang !== false)
428 {
429 $CACHE_MANAGER->CleanDir("b_lang");
430 }
431
432 if (isset($arFields["DIR"]))
433 {
434 CheckDirPath($_SERVER["DOCUMENT_ROOT"] . $arFields["DIR"]);
435 }
436
437 if (isset($arFields["DOMAINS"]))
438 {
439 self::SaveDomains($ID, $arFields["DOMAINS"]);
440 }
441
442 if (isset($arFields["TEMPLATE"]))
443 {
444 SiteTemplateTable::deleteByFilter(['=SITE_ID' => $ID]);
445
446 foreach ($arFields["TEMPLATE"] as $arTemplate)
447 {
448 if (trim($arTemplate["TEMPLATE"]) <> '')
449 {
450 SiteTemplateTable::add([
451 'SITE_ID' => $ID,
452 'CONDITION' => trim($arTemplate["CONDITION"]),
453 'SORT' => $arTemplate["SORT"],
454 'TEMPLATE' => trim($arTemplate["TEMPLATE"]),
455 ]);
456 }
457 }
458 }
459
461
462 return true;
463 }
464
465 public static function Delete($ID)
466 {
469
470 $APPLICATION->ResetException();
471
472 foreach (GetModuleEvents("main", "OnBeforeLangDelete", true) as $arEvent)
473 {
474 if (ExecuteModuleEventEx($arEvent, [$ID]) === false)
475 {
476 $err = GetMessage("MAIN_BEFORE_DEL_ERR1") . ' ' . $arEvent['TO_NAME'];
477 if ($ex = $APPLICATION->GetException())
478 {
479 $err .= ': ' . $ex->GetString();
480 }
481 $APPLICATION->throwException($err);
482 return false;
483 }
484 }
485
486 foreach (GetModuleEvents("main", "OnBeforeSiteDelete", true) as $arEvent)
487 {
488 if (ExecuteModuleEventEx($arEvent, [$ID]) === false)
489 {
490 $err = GetMessage("MAIN_BEFORE_DEL_ERR1") . ' ' . $arEvent['TO_NAME'];
491 if ($ex = $APPLICATION->GetException())
492 {
493 $err .= ': ' . $ex->GetString();
494 }
495 $APPLICATION->throwException($err);
496 return false;
497 }
498 }
499
500 foreach (GetModuleEvents("main", "OnLangDelete", true) as $arEvent)
501 {
502 ExecuteModuleEventEx($arEvent, [$ID]);
503 }
504
505 foreach (GetModuleEvents("main", "OnSiteDelete", true) as $arEvent)
506 {
507 ExecuteModuleEventEx($arEvent, [$ID]);
508 }
509
510 if (!$DB->Query("DELETE FROM b_event_message_site WHERE SITE_ID='" . $DB->ForSQL($ID, 2) . "'"))
511 {
512 return false;
513 }
514
515 if (!$DB->Query("UPDATE b_event_message SET LID=NULL WHERE LID='" . $DB->ForSQL($ID, 2) . "'"))
516 {
517 return false;
518 }
519
520 SiteDomainTable::deleteByFilter(['=LID' => $ID]);
521
522 SiteTemplateTable::deleteByFilter(['=SITE_ID' => $ID]);
523
524 $result = $DB->Query("DELETE FROM b_lang WHERE LID='" . $DB->ForSQL($ID, 2) . "'", true);
525
526 if (CACHED_b_lang !== false)
527 {
528 $CACHE_MANAGER->CleanDir("b_lang");
529 }
530
532
533 return $result;
534 }
535
540 public static function GetTemplateList($site_id)
541 {
542 return SiteTemplateTable::getList([
543 'filter' => ['=SITE_ID' => $site_id],
544 'order' => ['SORT' => 'ASC'],
545 'cache' => ['ttl' => 86400],
546 ]);
547 }
548
549 public static function GetDefList()
550 {
551 return static::GetList('def_list', 'asc', ['ACTIVE' => 'Y']);
552 }
553
557 public static function GetSiteDocRoot($site)
558 {
559 return SiteTable::getDocumentRoot($site === false ? null : $site);
560 }
561
562 public static function GetSiteByFullPath($path, $bOneResult = true)
563 {
564 $res = [];
565
566 if (($p = realpath($path)))
567 {
568 $path = $p;
569 }
570 $path = str_replace("\\", "/", $path);
571 $path = mb_strtolower($path) . "/";
572
573 $db_res = CSite::GetList("lendir", "desc");
574 while ($ar_res = $db_res->Fetch())
575 {
576 $abspath = $ar_res["ABS_DOC_ROOT"] . $ar_res["DIR"];
577 if (($p = realpath($abspath)))
578 {
579 $abspath = $p;
580 }
581 $abspath = str_replace("\\", "/", $abspath);
582 $abspath = mb_strtolower($abspath);
583 if (mb_substr($abspath, -1) <> "/")
584 {
585 $abspath .= "/";
586 }
587 if (mb_strpos($path, $abspath) === 0)
588 {
589 if ($bOneResult)
590 {
591 return $ar_res["ID"];
592 }
593 $res[] = $ar_res["ID"];
594 }
595 }
596
597 if (!empty($res))
598 {
599 return $res;
600 }
601
602 return false;
603 }
604
605 public static function GetList($by = "sort", $order = "asc", $arFilter = [])
606 {
607 global $DB, $CACHE_MANAGER;
608
609 if (CACHED_b_lang !== false)
610 {
611 $cacheId = "b_lang" . md5($by . "." . $order . "." . serialize($arFilter));
612 if ($CACHE_MANAGER->Read(CACHED_b_lang, $cacheId, "b_lang"))
613 {
614 $arResult = $CACHE_MANAGER->Get($cacheId);
615
616 $res = new CDBResult;
617 $res->InitFromArray($arResult);
618 $res = new _CLangDBResult($res);
619 return $res;
620 }
621 }
622
623 $strSqlSearch = "";
624 $bIncDomain = false;
625 if (is_array($arFilter))
626 {
627 foreach ($arFilter as $key => $val)
628 {
629 if ((string)$val == '')
630 {
631 continue;
632 }
633 $val = $DB->ForSql($val);
634 switch (strtoupper($key))
635 {
636 case "ACTIVE":
637 if ($val == "Y" || $val == "N")
638 {
639 $strSqlSearch .= " AND L.ACTIVE='" . $val . "'\n";
640 }
641 break;
642 case "DEFAULT":
643 if ($val == "Y" || $val == "N")
644 {
645 $strSqlSearch .= " AND L.DEF='" . $val . "'\n";
646 }
647 break;
648 case "NAME":
649 $strSqlSearch .= " AND UPPER(L.NAME) LIKE UPPER('" . $val . "')\n";
650 break;
651 case "DOMAIN":
652 $bIncDomain = true;
653 $strSqlSearch .= " AND UPPER(D.DOMAIN) LIKE UPPER('" . $val . "')\n";
654 break;
655 case "IN_DIR":
656 $strSqlSearch .= " AND UPPER('" . $val . "') LIKE " . $DB->Concat("UPPER(L.DIR)", "'%'") . "\n";
657 break;
658 case "ID":
659 case "LID":
660 $strSqlSearch .= " AND L.LID='" . $val . "'\n";
661 break;
662 case "LANGUAGE_ID":
663 $strSqlSearch .= " AND L.LANGUAGE_ID='" . $val . "'\n";
664 break;
665 }
666 }
667 }
668
669 $strSql = "
670 SELECT " . ($bIncDomain ? " DISTINCT " : "") . "
671 L.*,
672 L.LID ID,
673 L.LID SITE_ID,
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
677 FROM
678 b_culture C,
679 b_lang L " . ($bIncDomain ? "LEFT JOIN b_lang_domain D ON D.LID=L.LID " : "") . "
680 WHERE
681 C.ID=L.CULTURE_ID
682 " . $strSqlSearch . "
683 ";
684
685 $by = strtolower($by);
686 $order = strtolower($order);
687
688 if ($by == "lid" || $by == "id")
689 {
690 $strSqlOrder = " ORDER BY L.LID ";
691 }
692 elseif ($by == "active")
693 {
694 $strSqlOrder = " ORDER BY L.ACTIVE ";
695 }
696 elseif ($by == "name")
697 {
698 $strSqlOrder = " ORDER BY L.NAME ";
699 }
700 elseif ($by == "dir")
701 {
702 $strSqlOrder = " ORDER BY L.DIR ";
703 }
704 elseif ($by == "lendir")
705 {
706 $strSqlOrder = " ORDER BY " . $DB->IsNull($DB->Length("L.DOC_ROOT"), "0") . ($order == "desc" ? " desc" : "") . ", " . $DB->Length("L.DIR");
707 }
708 elseif ($by == "def")
709 {
710 $strSqlOrder = " ORDER BY L.DEF ";
711 }
712 elseif ($by == "def_list")
713 {
714 $strSqlOrder = " ORDER BY L.DEF desc, L.SORT ";
715 }
716 else
717 {
718 $strSqlOrder = " ORDER BY L.SORT ";
719 }
720
721 if ($order == "desc")
722 {
723 $strSqlOrder .= " desc ";
724 }
725
726 $strSql .= $strSqlOrder;
727 if (CACHED_b_lang === false)
728 {
729 $res = $DB->Query($strSql);
730 }
731 else
732 {
733 $arResult = [];
734 $res = $DB->Query($strSql);
735 while ($ar = $res->Fetch())
736 {
737 $arResult[] = $ar;
738 }
739
740 $CACHE_MANAGER->Set($cacheId, $arResult);
741
742 $res = new CDBResult;
743 $res->InitFromArray($arResult);
744 }
745 $res = new _CLangDBResult($res);
746 return $res;
747 }
748
749 public static function GetByID($ID)
750 {
751 return CSite::GetList('', '', ["LID" => $ID]);
752 }
753
754 public static function GetArrayByID($ID)
755 {
756 $res = self::GetByID($ID);
757 return $res->Fetch();
758 }
759
760 public static function GetDefSite($LID = false)
761 {
762 if ($LID <> '')
763 {
764 $dbSite = CSite::GetByID($LID);
765 if ($dbSite->Fetch())
766 {
767 return $LID;
768 }
769 }
770
771 $dbDefSites = CSite::GetDefList();
772 if ($arDefSite = $dbDefSites->Fetch())
773 {
774 return $arDefSite["LID"];
775 }
776
777 return false;
778 }
779
780 public static function IsDistinctDocRoots($arFilter = [])
781 {
782 $s = false;
783 $res = CSite::GetList('', '', $arFilter);
784 while ($ar = $res->Fetch())
785 {
786 if ($s !== false && $s != $ar["ABS_DOC_ROOT"])
787 {
788 return true;
789 }
790 $s = $ar["ABS_DOC_ROOT"];
791 }
792 return false;
793 }
794
796 // Returns drop down list with langs
798 public static function SelectBox($sFieldName, $sValue, $sDefaultValue = "", $sFuncName = "", $field = "class=\"typeselect\"")
799 {
800 $l = CLang::GetList();
801 $s = '<select name="' . $sFieldName . '" ' . $field;
802 $s1 = '';
803 if ($sFuncName <> '')
804 {
805 $s .= ' OnChange="' . $sFuncName . '"';
806 }
807 $s .= '>' . "\n";
808 $found = false;
809 while (($l_arr = $l->Fetch()))
810 {
811 $found = ($l_arr["LID"] == $sValue);
812 $s1 .= '<option value="' . $l_arr["LID"] . '"' . ($found ? ' selected' : '') . '>[' . htmlspecialcharsex($l_arr["LID"]) . ']&nbsp;' . htmlspecialcharsex($l_arr["NAME"]) . '</option>' . "\n";
813 }
814 if ($sDefaultValue <> '')
815 {
816 $s .= "<option value='NOT_REF' " . ($found ? "" : "selected") . ">" . htmlspecialcharsex($sDefaultValue) . "</option>";
817 }
818 return $s . $s1 . '</select>';
819 }
820
821 public static function SelectBoxMulti($sFieldName, $Value)
822 {
823 $l = CLang::GetList();
824 if (is_array($Value))
825 {
826 $arValue = $Value;
827 }
828 else
829 {
830 $arValue = [$Value];
831 }
832
833 $s = '<div class="adm-list">';
834 while ($l_arr = $l->Fetch())
835 {
836 $s .=
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"]) . ']&nbsp;' . htmlspecialcharsex($l_arr["NAME"]) . '</label></div>' .
840 '</div>';
841 }
842
843 $s .= '</div>';
844
845 return $s;
846 }
847
848 public static function GetNameTemplates()
849 {
850 return [
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'),
864 ];
865 }
866
878 public static function GetNameFormat($dummy = null, $site_id = "")
879 {
880 static $siteFormat = [];
881 $format = '';
882
883 $context = Main\Context::getCurrent();
884
885 if ($site_id == "" || $context->getSite() == $site_id)
886 {
887 // from current site or language
888 $format = $context->getCulture()->getFormatName();
889 }
890
891 //site value
892 if ($format == "")
893 {
894 if (!isset($siteFormat[$site_id]))
895 {
897 if ($res = $db_res->Fetch())
898 {
899 $format = $res["FORMAT_NAME"];
900 $siteFormat[$site_id] = $format;
901 }
902 }
903 else
904 {
905 $format = $siteFormat[$site_id];
906 }
907 }
908
909 //if not found - trying to get value for the language
910 if ($format == "")
911 {
912 $format = $context->getCulture()->getFormatName();
913 }
914
915 //if not found - trying to get default values
916 if ($format == "")
917 {
918 $format = self::GetDefaultNameFormat();
919 }
920
921 $format = str_replace(["#NOBR#", "#/NOBR#"], "", $format);
922
923 return $format;
924 }
925
932 public static function GetDefaultNameFormat()
933 {
934 return '#NAME# #LAST_NAME#';
935 }
936
937 public static function GetCurTemplate()
938 {
941
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],
947 ]);
948
949 $siteTemplate = "";
950 while ($ar = $dbr->fetch())
951 {
952 $strCondition = trim($ar["CONDITION"]);
953 if ($strCondition <> '' && (!@eval("return " . $strCondition . ";")))
954 {
955 continue;
956 }
957 if (($path = getLocalPath("templates/" . $ar["TEMPLATE"], BX_PERSONAL_ROOT)) !== false && is_dir($_SERVER["DOCUMENT_ROOT"] . $path))
958 {
959 $siteTemplate = $ar["TEMPLATE"];
960 break;
961 }
962 }
963
964 if ($siteTemplate == "")
965 {
966 $siteTemplate = ".default";
967 }
968
969 $event = new Main\Event("main", "OnGetCurrentSiteTemplate", ["template" => $siteTemplate]);
970 $event->send();
971
972 foreach ($event->getResults() as $evenResult)
973 {
974 if (($result = $evenResult->getParameters()) <> '')
975 {
976 //only the first result matters
977 $siteTemplate = $result;
978 break;
979 }
980 }
981
982 return $siteTemplate;
983 }
984}
985
986class CAllLang extends CAllSite
987{
988}
989
990class CSite extends CAllSite
991{
992}
993
994class CLang extends CSite
995{
996}
$path
Определения access_edit.php:21
$type
Определения options.php:106
$db_res
Определения options_user_settings.php:8
$ar_res
Определения options_user_settings_set.php:16
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
Определения langdbresult.php:6
Определения event.php:5
static update($primary, array $data)
Определения datamanager.php:1256
Определения site.php:31
static cleanCache()
Определения site.php:286
static getDocumentRoot($siteId=null)
Определения site.php:36
Определения site.php:987
static GetByID($ID)
Определения language.php:99
Определения site.php:19
static GetTimeFormat($lang=false, $bSearchInSitesOnly=false)
Определения site.php:140
CheckFields($arFields, $ID=false)
Определения site.php:147
static GetDefaultNameFormat()
Определения site.php:932
static Delete($ID)
Определения site.php:465
static InPeriod($iUnixTimestampFrom, $iUnixTimestampTo)
Определения site.php:32
static GetByID($ID)
Определения site.php:749
static GetWeekStart()
Определения site.php:60
static GetNameFormat($dummy=null, $site_id="")
Определения site.php:878
static GetDefSite($LID=false)
Определения site.php:760
static SelectBoxMulti($sFieldName, $Value)
Определения site.php:821
static GetDateFormat($type="FULL", $lang=false, $bSearchInSitesOnly=false)
Определения site.php:65
static GetArrayByID($ID)
Определения site.php:754
static InDir($strDir)
Определения site.php:25
static GetSiteDocRoot($site)
Определения site.php:557
$LAST_ERROR
Определения site.php:23
static IsDistinctDocRoots($arFilter=[])
Определения site.php:780
static GetDefList()
Определения site.php:549
static GetNameTemplates()
Определения site.php:848
static GetTemplateList($site_id)
Определения site.php:540
static GetSiteByFullPath($path, $bOneResult=true)
Определения site.php:562
static SelectBox($sFieldName, $sValue, $sDefaultValue="", $sFuncName="", $field="class=\"typeselect\"")
Определения site.php:798
Add($arFields)
Определения site.php:321
static GetCurTemplate()
Определения site.php:937
Update($ID, $arFields)
Определения site.php:391
static GetList($by="sort", $order="asc", $arFilter=[])
Определения site.php:605
static InGroup($arGroups)
Определения site.php:46
static SaveDomains($LID, $domains)
Определения site.php:286
static $MAIN_LANGS_ADMIN_CACHE
Определения site.php:21
static $MAIN_LANGS_CACHE
Определения site.php:20
static ToASCII($domainName, &$arErrors)
Определения punycode.php:44
Определения dbresult.php:88
Определения site.php:995
Определения site.php:991
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$arTemplate
Определения component_props.php:26
$arFields
Определения dblapprove.php:5
$arGroups
Определения options.php:1766
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
$p
Определения group_list_element_edit.php:23
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$context
Определения csv_new_setup.php:223
const FORMAT_DATETIME
Определения include.php:64
if(!defined('SITE_ID')) $lang
Определения include.php:91
const FORMAT_DATE
Определения include.php:63
$l
Определения options.php:783
CheckDirPath($path)
Определения tools.php:2707
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
getLocalPath($path, $baseFolder="/bitrix")
Определения tools.php:5092
$order
Определения payment.php:8
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
const ADMIN_SECTION
Определения rss.php:2
$i
Определения factura.php:643
$val
Определения options.php:1793
$site_id
Определения sonet_set_content_view.php:9
const SITE_ID
Определения sonet_set_content_view.php:12
$arFilter
Определения user_search.php:106
$site
Определения yandex_run.php:614