1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
site.php
См. документацию.
1<?php
2namespace Bitrix\Landing\Internals;
3
4use \Bitrix\Main\Localization\Loc;
5use \Bitrix\Main\Entity;
6use \Bitrix\Main\ModuleManager;
7use \Bitrix\Main\SystemException;
8use \Bitrix\Landing\Manager;
9use \Bitrix\Landing\Site;
10use \Bitrix\Landing\Domain;
11use \Bitrix\Landing\Rights;
12use \Bitrix\Landing\Role;
13use \Bitrix\Landing\Restriction;
14
15Loc::loadMessages(__FILE__);
16
33class SiteTable extends Entity\DataManager
34{
38 const ACTION_TYPE_ADD = 'add';
39
43 const ACTION_TYPE_UPDATE = 'update';
44
49 protected static $additionalFields = array();
50
55 protected static $disableCallback = false;
56
61 protected static $touchMode = false;
62
67 public static function getTableName()
68 {
69 return 'b_landing_site';
70 }
71
76 public static function getMap()
77 {
78 $types = \Bitrix\Landing\Site::getTypes();
79 $typesKeys = array_keys($types);
80
81 return array(
82 'ID' => new Entity\IntegerField('ID', array(
83 'primary' => true,
84 'autocomplete' => true,
85 'title' => 'ID'
86 )),
87 'CODE' => new Entity\StringField('CODE', array(
88 'title' => Loc::getMessage('LANDING_TABLE_FIELD_SITE_CODE'),
89 'required' => true
90 )),
91 'ACTIVE' => new Entity\StringField('ACTIVE', array(
92 'title' => Loc::getMessage('LANDING_TABLE_FIELD_SITE_ACTIVE'),
93 'default_value' => 'Y'
94 )),
95 'DELETED' => new Entity\StringField('DELETED', array(
96 'title' => Loc::getMessage('LANDING_TABLE_FIELD_LANDING_DELETED'),
97 'default_value' => 'N'
98 )),
99 'TITLE' => new Entity\StringField('TITLE', array(
100 'title' => Loc::getMessage('LANDING_TABLE_FIELD_SITE_TITLE'),
101 'required' => true,
102 'save_data_modification' => array('\Bitrix\Main\Text\Emoji', 'getSaveModificator'),
103 'fetch_data_modification' => array('\Bitrix\Main\Text\Emoji', 'getFetchModificator'),
104 )),
105 'XML_ID' => new Entity\StringField('XML_ID', array(
106 'title' => Loc::getMessage('LANDING_TABLE_FIELD_XML_ID')
107 )),
108 'DESCRIPTION' => new Entity\StringField('DESCRIPTION', array(
109 'title' => Loc::getMessage('LANDING_TABLE_FIELD_DESCRIPTION')
110 )),
111 'TYPE' => new Entity\EnumField('TYPE', array(
112 'title' => Loc::getMessage('LANDING_TABLE_FIELD_TYPE'),
113 'values' => $typesKeys,
114 'default_value' => array_shift($typesKeys)
115 )),
116 'TPL_ID' => new Entity\IntegerField('TPL_ID', array(
117 'title' => Loc::getMessage('LANDING_TABLE_FIELD_TPL_ID'),
118 'default_value' => 0
119 )),
120 'TPL_CODE' => new Entity\StringField('TPL_CODE', array(
121 'title' => Loc::getMessage('LANDING_TABLE_FIELD_TPL_CODE')
122 )),
123 'DOMAIN_ID' => new Entity\IntegerField('DOMAIN_ID', array(
124 'title' => Loc::getMessage('LANDING_TABLE_FIELD_DOMAIN_ID'),
125 //'required' => true
126 )),
127 'DOMAIN' => new Entity\ReferenceField(
128 'DOMAIN',
129 'Bitrix\Landing\Internals\DomainTable',
130 array('=this.DOMAIN_ID' => 'ref.ID')
131 ),
132 'SMN_SITE_ID' => new Entity\StringField('SMN_SITE_ID', array(
133 'title' => Loc::getMessage('LANDING_TABLE_FIELD_SMN_SITE_ID')
134 )),
135 'LANDING_ID_INDEX' => new Entity\IntegerField('LANDING_ID_INDEX', array(
136 'title' => Loc::getMessage('LANDING_TABLE_FIELD_LANDING_ID_INDEX')
137 )),
138 'LANDING_ID_404' => new Entity\IntegerField('LANDING_ID_404', array(
139 'title' => Loc::getMessage('LANDING_TABLE_FIELD_LANDING_ID_404')
140 )),
141 'LANDING_ID_503' => new Entity\IntegerField('LANDING_ID_503', array(
142 'title' => Loc::getMessage('LANDING_TABLE_FIELD_LANDING_ID_503')
143 )),
144 'LANG' => new Entity\IntegerField('LANG', array(
145 'title' => Loc::getMessage('LANDING_TABLE_FIELD_LANG')
146 )),
147 'SPECIAL' => new Entity\StringField('SPECIAL', array(
148 'title' => Loc::getMessage('LANDING_TABLE_FIELD_SPECIAL'),
149 'default_value' => 'N'
150 )),
151 'VERSION' => new Entity\IntegerField('VERSION', array(
152 'title' => Loc::getMessage('LANDING_TABLE_FIELD_SITE_VERSION'),
153 'default_value' => 2
154 )),
155 'CREATED_BY_ID' => new Entity\IntegerField('CREATED_BY_ID', array(
156 'title' => Loc::getMessage('LANDING_TABLE_FIELD_CREATED_BY_ID'),
157 'required' => true
158 )),
159 'CREATED_BY' => new Entity\ReferenceField(
160 'CREATED_BY',
161 'Bitrix\Main\UserTable',
162 array('=this.CREATED_BY_ID' => 'ref.ID')
163 ),
164 'MODIFIED_BY_ID' => new Entity\IntegerField('MODIFIED_BY_ID', array(
165 'title' => Loc::getMessage('LANDING_TABLE_FIELD_MODIFIED_BY_ID'),
166 'required' => true
167 )),
168 'MODIFIED_BY' => new Entity\ReferenceField(
169 'MODIFIED_BY',
170 'Bitrix\Main\UserTable',
171 array('=this.MODIFIED_BY_ID' => 'ref.ID')
172 ),
173 'DATE_CREATE' => new Entity\DatetimeField('DATE_CREATE', array(
174 'title' => Loc::getMessage('LANDING_TABLE_FIELD_DATE_CREATE'),
175 'required' => true
176 )),
177 'DATE_MODIFY' => new Entity\DatetimeField('DATE_MODIFY', array(
178 'title' => Loc::getMessage('LANDING_TABLE_FIELD_DATE_MODIFY'),
179 'required' => true
180 ))
181 );
182 }
183
188 protected static function getSiteController()
189 {
191 }
192
200 protected static function checkUniqueInDomain($code, $currentId, $domainId)
201 {
203 'select' => array(
204 'ID'
205 ),
206 'filter' => array(
207 '!ID' => $currentId,
208 'DOMAIN_ID' => $domainId,
209 '=CODE' => $code,
210 '=DELETED' => ['Y', 'N'],
211 'CHECK_PERMISSIONS' => 'N'
212 )
213 ));
214 return $res->fetch() ? false : true;
215 }
216
222 protected static function isB24Domain($domainName)
223 {
224 return Domain::getBitrix24Subdomain($domainName) !== null;
225 }
226
232 protected static function customizeControllerError(SystemException $ex)
233 {
234 $code = str_replace(' ', '', $ex->getMessage());
235 $code = mb_strtoupper($code);
236 $message = Loc::getMessage('LANDING_CONTROLLER_ERROR_' . $code);
237 $message = $message ? $message : $ex->getMessage();
238
239 return new Entity\EntityError(
240 $message,
241 'CONTROLLER_ERROR_' . $code
242 );
243 }
244
250 protected static function prepareLangForController(string $lang): string
251 {
252 $replaces = [
253 'in' => 'en',
254 'hi' => 'en',
255 ];
256
257 return in_array($lang, array_keys($replaces)) ? $replaces[$lang] : $lang;
258 }
259
265 public static function checkBitrixUse($domainName)
266 {
267 $isB24Domain = self::isB24Domain($domainName);
268 $disableMask = '/bitrix[^\.]*\.bitrix[^\.]+\.[a-z]+$/';
269 if (
270 Manager::isB24() &&
271 (
272 $isB24Domain && preg_match_all($disableMask, $domainName)
273 ||
274 !$isB24Domain && mb_strpos($domainName, 'bitrix') !== false
275 )
276 )
277 {
278 return true;
279 }
280 return false;
281 }
282
288 public static function setAccessFilter($params)
289 {
290 if (
291 isset($params['filter']['CHECK_PERMISSIONS']) &&
292 $params['filter']['CHECK_PERMISSIONS'] == 'N'
293 )
294 {
295 return $params;
296 }
297
298 // build filter
299 $allowedSites = Rights::getAllowedSites();
300 $buildFilter = Rights::getAccessFilter(
301 $allowedSites ? ['ID' => $allowedSites] : []
302 );
303 if (empty($buildFilter))
304 {
305 return $params;
306 }
307
308 // create runtime/filter keys if no exists
309 if (
310 !isset($params['filter']) ||
311 !is_array($params['filter'])
312 )
313 {
314 $params['filter'] = [];
315 }
316 if (
317 !isset($params['runtime']) ||
318 !is_array($params['runtime'])
319 )
320 {
321 $params['runtime'] = [];
322 }
323 if (
324 !isset($params['group']) ||
325 !is_array($params['group'])
326 )
327 {
328 $params['group'] = [];
329 }
330
331 //$tasks = Rights::getAccessTasksReferences();
332 //$readCode = Rights::ACCESS_TYPES['denied'];
333 $extendedRights = Rights::isExtendedMode();
334 static $expectedRoles = null;
335 if ($expectedRoles === null)
336 {
337 $expectedRoles = Role::getExpectedRoleIds();
338 }
339
340 // create runtime fields
341 $runtimeParams = [];
342 $runtimeParams[] = [
343 'LOGIC' => 'OR',
344 '=this.ID' => 'ref.ENTITY_ID',
345 '=ref.ENTITY_ID' => [0]
346 ];
347 if ($extendedRights)
348 {
349 $runtimeParams['=ref.ROLE_ID'] = [0];
350 }
351 else
352 {
353 $runtimeParams['=ref.ENTITY_TYPE'] = ['?', Rights::ENTITY_TYPE_SITE];
354 $runtimeParams['@ref.ROLE_ID'] = [implode(',', $expectedRoles)];
355 }
356 $params['runtime'][] = new Entity\ReferenceField(
357 'RIGHTS',
358 'Bitrix\Landing\Internals\RightsTable',
359 $runtimeParams,
360 ['join_type' => 'INNER']
361 );
362
363 $params['group'][] = 'ID';
364
365 // build filter
366 $params['filter'][] = $buildFilter;
367
368 return $params;
369 }
370
378 private static function getValueByCode($id, array $fields, $code)
379 {
380 static $data = [];
381
382 if (array_key_exists($id, $data))
383 {
384 return isset($data[$id][$code]) ? $data[$id][$code] : null;
385 }
386
387 if (array_key_exists($code, $fields))
388 {
389 return $fields[$code];
390 }
391
393 'select' => [
394 '*',
395 'DOMAIN_NAME' => 'DOMAIN.DOMAIN',
396 'DOMAIN_PROVIDER' => 'DOMAIN.PROVIDER'
397 ],
398 'filter' => [
399 'ID' => $id,
400 'CHECK_PERMISSIONS' => 'N',
401 '=DELETED' => ['Y', 'N']
402 ]
403 ]);
404 if ($row = $res->fetch())
405 {
406 $data[$id] = $row;
407 }
408
409 return isset($data[$id][$code]) ? $data[$id][$code] : null;
410 }
411
418 protected static function prepareChange(Entity\Event $event, $actionType)
419 {
420 $result = new Entity\EventResult();
421 $fields = $event->getParameter('fields');
422 $primary = $event->getParameter('primary');
423 $unsetFields = array();
424 $modifyFields = array();
425 $siteController = self::getSiteController();
426 $deleteMode = false;
427
428 self::$touchMode = isset($fields['TOUCH']) && $fields['TOUCH'] == 'Y';
429
430 if ($actionType == self::ACTION_TYPE_ADD)
431 {
432 //@tmp log
434 $fields['TITLE'] ?? 'Noname',
435 print_r([$fields, \Bitrix\Main\Diag\Helper::getBackTrace(15)], true),
436 'LANDING_SITE_CREATE'
437 );
438 }
439
440 // clear binding cache
441 if (
442 isset($fields['CODE']) ||
443 isset($fields['TITLE']) ||
444 isset($fields['DELETED'])
445 )
446 {
447 if ($primary)
448 {
450 $primary['ID']
451 );
452 }
453 }
454
455 if (
456 isset($fields['DOMAIN_ID']) &&
457 $fields['DOMAIN_ID'] === ''
458 )
459 {
460 unset($fields['DOMAIN_ID']);
461 $unsetFields[] = 'DOMAIN_ID';
462 }
463
464 // if delete, set unpublic always
465 if (isset($fields['DELETED']))
466 {
467 $deleteMode = true;
468 $modifyFields['ACTIVE'] = 'N';
469 $fields['ACTIVE'] = 'N';
470 // user try to restore site, check the limits
471 if ($primary && $fields['DELETED'] == 'N')
472 {
473 $fields['TYPE'] = self::getValueByCode(
474 $primary['ID'],
475 $fields,
476 'TYPE'
477 );
478 $check = Manager::checkFeature(
480 [
481 'type' => $fields['TYPE'],
482 'filter' => ['!ID' => $primary['ID']]
483 ]
484 );
485 if (!$check)
486 {
487 $result->setErrors([
489 Restriction\Manager::getSystemErrorMessage('limit_sites_number'),
490 'TOTAL_SITE_REACHED'
491 )
492 ]);
493 return $result;
494 }
495 }
496 else if ($primary && $fields['DELETED'] == 'Y')
497 {
498 $fields['DOMAIN_PROVIDER'] = self::getValueByCode(
499 $primary['ID'],
500 $fields,
501 'DOMAIN_PROVIDER'
502 );
503 if ($fields['DOMAIN_PROVIDER'] && ModuleManager::isModuleInstalled('bitrix24'))
504 {
505 $result->setErrors([
507 Loc::getMessage('LANDING_TABLE_ERROR_ACCESS_DENIED_DELETED'),
508 'ACCESS_DENIED_DELETED'
509 )
510 ]);
511 return $result;
512 }
513 }
514 }
515
516 // check that TYPE is valid and allowed
517 if (!$primary && isset($fields['TYPE']))
518 {
519 $allowedTypes = (array)\Bitrix\Landing\Site\Type::getFilterType();
520 if (!in_array($fields['TYPE'], $allowedTypes))
521 {
522 $result->setErrors(array(
524 Loc::getMessage('LANDING_TABLE_ERROR_ACCESS_DENIED_ADD'),
525 'ACCESS_DENIED'
526 )
527 ));
528 return $result;
529 }
530 }
531
532 // if domain id is not specified
533 if (!$primary && !array_key_exists('DOMAIN_ID', $fields))
534 {
536 $modifyFields['DOMAIN_ID'] = $fields['DOMAIN_ID'];
537 }
538
539 // check rights
540 if (isset($primary['ID']) && Rights::isOn())
541 {
543 $primary['ID']
544 );
545 $freeAccessFields = [
546 'CREATED_BY_ID',
547 'MODIFIED_BY_ID',
548 'DATE_CREATE',
549 'DATE_MODIFY',
550 'TOUCH'
551 ];
552 if (in_array(Rights::ACCESS_TYPES['sett'], $rights))
553 {
554 $freeAccessFields = $fields;
555 if (isset($freeAccessFields['ACTIVE']))
556 {
557 unset($freeAccessFields['ACTIVE']);
558 }
559 if (isset($freeAccessFields['DELETED']))
560 {
561 unset($freeAccessFields['DELETED']);
562 }
563 $freeAccessFields = array_keys($freeAccessFields);
564 }
565 if (in_array(Rights::ACCESS_TYPES['public'], $rights))
566 {
567 $freeAccessFields[] = 'ACTIVE';
568 }
569 if (in_array(Rights::ACCESS_TYPES['delete'], $rights))
570 {
571 $freeAccessFields[] = 'DELETED';
572 $freeAccessFields[] = 'DOMAIN_PROVIDER';
573 // allow unpublic in delete case
574 if ($deleteMode)
575 {
576 $freeAccessFields[] = 'ACTIVE';
577 }
578 }
579 foreach ($fields as $key => $val)
580 {
581 if (!in_array($key, $freeAccessFields))
582 {
583 $errMessage = Loc::getMessage(
584 'LANDING_TABLE_ERROR_ACCESS_DENIED_' . $key
585 );
586 if (!$errMessage)
587 {
588 $errMessage = Loc::getMessage(
589 'LANDING_TABLE_ERROR_ACCESS_DENIED'
590 );
591 }
592 $result->setErrors(array(
594 $errMessage,
595 'ACCESS_DENIED'
596 )
597 ));
598 return $result;
599 }
600 }
601 }
602 else if (Rights::isOn())
603 {
604 $hasAccess = Rights::hasAdditionalRight(
606 );
607 if (!$hasAccess)
608 {
609 $result->setErrors(array(
611 Loc::getMessage('LANDING_TABLE_ERROR_ACCESS_DENIED_ADD'),
612 'ACCESS_DENIED'
613 )
614 ));
615 return $result;
616 }
617 }
618
619 // additional fields save after
620 if (array_key_exists('ADDITIONAL_FIELDS', $fields))
621 {
622 self::$additionalFields = $fields['ADDITIONAL_FIELDS'];
623 $unsetFields[] = 'ADDITIONAL_FIELDS';
624 }
625 else
626 {
627 self::$additionalFields = array();
628 }
629
630 // check rights for site domain
631 if (
632 array_key_exists('DOMAIN_ID', $fields) &&
634 )
635 {
636 // for check rights call upper level
637 $res = Domain::getList(array(
638 'select' => array(
639 'ID'
640 ),
641 'filter' => array(
642 'ID' => $fields['DOMAIN_ID']
643 )
644 ));
645 if (!$res->fetch())
646 {
647 $result->unsetFields($unsetFields);
648 $result->setErrors(array(
650 Loc::getMessage('LANDING_TABLE_ERROR_DOMAIN_NOT_EXIST'),
651 'DOMAIN_NOT_FOUND'
652 )
653 ));
654 return $result;
655 }
656 }
657
658 // check active first (limit count)
659 if (
660 isset($fields['ACTIVE']) &&
661 $fields['ACTIVE'] == 'Y'
662 )
663 {
664 if ($primary)
665 {
666 $fields['TYPE'] = self::getValueByCode(
667 $primary['ID'],
668 $fields,
669 'TYPE'
670 );
671 }
672 else
673 {
674 $fields['TYPE'] = null;
675 }
676 $special = self::getValueByCode(
677 $primary['ID'],
678 $fields,
679 'SPECIAL'
680 );
681 if ($special == 'Y')
682 {
683 $canPublicSite = true;
684 }
685 else
686 {
687 $domainProvider = self::getValueByCode(
688 $primary['ID'],
689 $fields,
690 'DOMAIN_PROVIDER'
691 );
692 if ($domainProvider)
693 {
694 if (!Restriction\Manager::isAllowed('limit_free_domen', ['trueOnNotNull' => true]))
695 {
696 $result->unsetFields($unsetFields);
697 $result->setErrors(array(
699 Restriction\Manager::getSystemErrorMessage('limit_free_domen'),
700 'FREE_DOMAIN_IS_NOT_ALLOWED'
701 )
702 ));
703 return $result;
704 }
705 }
706 $canPublicSite = Manager::checkFeature(
708 $primary
709 ? array(
710 'filter' => array(
711 '!ID' => $primary['ID']
712 ),
713 'type' => $fields['TYPE']
714 )
715 : array(
716 'type' => $fields['TYPE']
717 )
718 );
719 }
720 if (!$canPublicSite)
721 {
723 ? 'PUBLIC_SITE_REACHED_FREE'
724 : 'PUBLIC_SITE_REACHED';
726 ? 'limit_sites_number_free'
727 : 'limit_sites_number';
728 $result->unsetFields($unsetFields);
729 $result->setErrors(array(
731 Restriction\Manager::getSystemErrorMessage($msgCode),
732 $errCode
733 )
734 ));
735 return $result;
736 }
737 }
738
739 // prepare CODE - base part of URL
740 if (array_key_exists('CODE', $fields))
741 {
742 $fields['CODE'] = trim(trim(trim($fields['CODE']), '/'));
743 if (mb_strpos($fields['CODE'], '/') !== false)
744 {
745 $result->unsetFields($unsetFields);
746 $result->setErrors(array(
748 Loc::getMessage('LANDING_TABLE_ERROR_SITE_SLASH_IS_NOT_ALLOWED'),
749 'SLASH_IS_NOT_ALLOWED'
750 )
751 ));
752 return $result;
753 }
754 // generate CODE from TITLE, if CODE is empty (in create)
755 if (!$fields['CODE'])
756 {
757 $fields['CODE'] = \CUtil::translit(
758 (array_key_exists('TITLE', $fields) && trim($fields['TITLE']))
759 ? $fields['TITLE'] : 'site',
760 LANGUAGE_ID
761 );
762 if (!$fields['CODE'])
763 {
764 $fields['CODE'] = randString(12);
765 }
766 }
767 // only digits is disallowed
768 if (preg_match('/^[\d]+$/', $fields['CODE']))
769 {
770 $fields['CODE'] = 'site' . $fields['CODE'];
771 }
772 $fields['CODE'] = mb_substr($fields['CODE'], 0, 253);
773 $domainId = null;
774 // get domain id if no exists
775 if (!array_key_exists('DOMAIN_ID', $fields) && $primary)
776 {
777 $domainId = self::getValueByCode(
778 $primary['ID'],
779 $fields,
780 'DOMAIN_ID'
781 );
782 }
783 else if (array_key_exists('DOMAIN_ID', $fields))
784 {
785 $domainId = $fields['DOMAIN_ID'];
786 }
787 // make CODE unique in one domain
788 if ($domainId !== null)
789 {
790 $checkCount = 1;
791 $originalCode = $fields['CODE'];
792 do
793 {
794 $unique = self::checkUniqueInDomain(
795 '/' . $fields['CODE'] . '/',
796 $primary ? $primary['ID'] : 0,
797 $domainId
798 );
799 if (!$unique)
800 {
801 $fields['CODE'] = $originalCode . (++$checkCount);
802 }
803 } while (!$unique);
804 }
805 $fields['CODE'] = '/' . $fields['CODE'] . '/';
806 $modifyFields['CODE'] = $fields['CODE'];
807 }
808
809 // create/get domain by name (reg in b24.site if Bitrix24)
810 if (
811 array_key_exists('DOMAIN_ID', $fields) &&
812 $fields['DOMAIN_ID'] !== 0 &&
813 (
814 preg_replace('/[\d]/', '', trim($fields['DOMAIN_ID'])) != '' ||
816 )
817 )
818 {
819 $domainId = 0;
820 $domainName = mb_strtolower(trim($fields['DOMAIN_ID']));
821 $domainNameOld = '';
822
823 // fix for full name
824 if ($domainName != '')
825 {
826 $puny = new \CBXPunycode;
827 $domainName = $puny->encode($domainName);
828 // check correct name
829 if (!preg_match('/^[a-z0-9\-\.]+\.[a-z0-9\-]{2,20}$/i', $domainName))
830 {
831 $result->unsetFields($unsetFields);
832 $result->setErrors(array(
834 Loc::getMessage('LANDING_TABLE_ERROR_DOMAIN_IS_INCORRECT2'),
835 'DOMAIN_IS_INCORRECT'
836 )
837 ));
838 return $result;
839 }
840 }
841
842 // if add - unset domain_id, else - get current domain of site
843 if ($actionType == self::ACTION_TYPE_ADD)
844 {
845 $modifyFields['DOMAIN_ID'] = 0;
846 }
847 else
848 {
849 if ($primary)
850 {
852 'select' => array(
853 'DOMAIN_ID',
854 'DOMAIN_NAME' => 'DOMAIN.DOMAIN'
855 ),
856 'filter' => array(
857 'ID' => $primary['ID'],
858 'CHECK_PERMISSIONS' => 'N'
859 )
860 ));
861 if ($row = $res->fetch())
862 {
863 $domainNameOld = mb_strtolower($row['DOMAIN_NAME']);
864 $domainId = $row['DOMAIN_ID'];
865 }
866 }
867 $unsetFields[] = 'DOMAIN_ID';
868 }
869
870 // check CODE unique in site group
871 if ($domainId && array_key_exists('CODE', $fields))
872 {
873 $unique = self::checkUniqueInDomain(
874 $fields['CODE'],
875 $primary ? $primary['ID'] : 0,
876 $domainId
877 );
878 if (!$unique)
879 {
880 $result->unsetFields($unsetFields);
881 $result->setErrors(array(
883 Loc::getMessage('LANDING_TABLE_ERROR_SITE_CODE_IS_NOT_UNIQUE2'),
884 'CODE_IS_NOT_UNIQUE'
885 )
886 ));
887 return $result;
888 }
889 }
890
891 // if domain name now changed
892 if (
893 $domainName != $domainNameOld ||
894 $actionType == self::ACTION_TYPE_ADD
895 )
896 {
897 $domainExist = false;
898
899 // check domain exist
900 if ($domainName != '')
901 {
902 $resDomain = Domain::getList(array(
903 'select' => array(
904 'ID'
905 ),
906 'filter' => array(
907 '=DOMAIN' => $domainName
908 )
909 ));
910 if ($rowDomain = $resDomain->fetch())
911 {
912 $domainExist = true;
913 $resSite = Site::getList(array(
914 'select' => array(
915 'ID'
916 ),
917 'filter' => array(
918 'DOMAIN_ID' => $rowDomain['ID'],
919 '=DELETED' => 'Y',
920 'CHECK_PERMISSIONS' => 'N'
921 )
922 ));
923 if ($resSite->fetch())
924 {
925 $result->setErrors(
926 array(
928 Loc::getMessage('LANDING_TABLE_ERROR_DOMAIN_EXIST_TRASH'),
929 'DOMAIN_EXIST_TRASH'
930 )
931 )
932 );
933 return $result;
934 }
935 }
937 {
938 try
939 {
940 //todo: revert changes after change .by domain
941 if (
942 !str_ends_with($domainName, '.b24site.online')
943 && !str_ends_with($domainName, '.b24shop.online')
944 )
945 {
946 $domainExist = $siteController::isDomainExists($domainName);
947 }
948 else
949 {
950 $byDomainName = '';
951 if (str_ends_with($domainName, '.b24site.online'))
952 {
953 $byDomainName = str_replace('.b24site.online', '.bitrix24site.by', $domainName);
954 }
955 if (str_ends_with($domainName, '.b24shop.online'))
956 {
957 $byDomainName = str_replace('.b24shop.online', '.bitrix24shop.by', $domainName);
958 }
959 if ($byDomainName !== '' && $siteController::isDomainExists($byDomainName))
960 {
961 $domainExist = true;
962 }
963 else
964 {
965 $domainExist = $siteController::isDomainExists($domainName);
966 }
967 }
968 }
969 catch (SystemException $ex)
970 {
971 $result->unsetFields($unsetFields);
972 $result->setErrors(array(
973 self::customizeControllerError($ex)
974 ));
975 return $result;
976 }
977 }
978 }
979 if ($domainExist)
980 {
981 $result->unsetFields($unsetFields);
982 if (self::checkBitrixUse($domainName))
983 {
984 $result->setErrors(
985 array(
987 Loc::getMessage('LANDING_TABLE_ERROR_DOMAIN_BITRIX_DISABLE'),
988 'DOMAIN_DISABLE'
989 )
990 )
991 );
992 }
993 else
994 {
995 $result->setErrors(
996 array(
998 Loc::getMessage('LANDING_TABLE_ERROR_DOMAIN_EXIST'),
999 'DOMAIN_EXIST'
1000 )
1001 )
1002 );
1003 }
1004
1005 return $result;
1006 }
1007
1008 // check available external service
1009 try
1010 {
1011 $siteController::isDomainExists('repo.bitrix24.site');
1012 }
1013 catch (SystemException $ex)
1014 {
1015 $result->unsetFields($unsetFields);
1016 $result->setErrors(array(
1017 self::customizeControllerError($ex)
1018 ));
1019 return $result;
1020 }
1021
1022 // handler on add / update
1024 $eventManager->addEventHandler(
1025 'landing',
1026 $actionType == self::ACTION_TYPE_ADD
1027 ? '\\' . __NAMESPACE__ . '\\Site::onAfterAdd'
1028 : '\\' . __NAMESPACE__ . '\\Site::onAfterUpdate',
1029 function(Entity\Event $event) use ($domainId, $domainName, $domainNameOld, $result, $unsetFields, $siteController)
1030 {
1031 $primary = $event->getParameter('primary');
1032 $fields = $event->getParameter('fields');
1033
1034 if ($primary)
1035 {
1036 // create domain
1037 if (!$domainId)
1038 {
1039 // action in b24
1040 if (Manager::isB24())
1041 {
1042 $publicUrl = Manager::getPublicationPath(
1043 $primary['ID']
1044 );
1045 try
1046 {
1047 $row = self::getList(array(
1048 'select' => array(
1049 'TYPE'
1050 ),
1051 'filter' => array(
1052 'ID' => $primary['ID']
1053 )
1054 ))->fetch();
1055 if ($row['TYPE'] == 'STORE')// fix for controller
1056 {
1057 $row['TYPE'] = 'shop';
1058 }
1059 if ($domainName)
1060 {
1061 $siteController::addDomain(
1062 $domainName,
1063 $publicUrl,
1064 'N',
1065 $row['TYPE'],
1066 self::prepareLangForController(Manager::getZone())
1067 );
1068 }
1069 else
1070 {
1071 $domainName = $siteController::addRandomDomain(
1072 $publicUrl,
1073 $row['TYPE'],
1074 self::prepareLangForController(Manager::getZone())
1075 );
1076 }
1077 }
1078 catch (SystemException $ex)
1079 {
1080 $result->unsetFields($unsetFields);
1081 $result->setErrors(array(
1082 self::customizeControllerError($ex)
1083 ));
1084 return $result;
1085 }
1086 }
1087 // add new domain
1088 if ($domainName)
1089 {
1090 $resDomain = Domain::add(array(
1091 'ACTIVE' => 'Y',
1092 'DOMAIN' => $domainName
1093 ));
1094 $domainId = $resDomain->getId();
1095 if ($domainId)
1096 {
1098 SiteTable::update($primary['ID'], array(
1099 'DOMAIN_ID' => $domainId
1100 ));
1102 }
1103 }
1104 }
1105 // update domain
1106 else
1107 {
1108 $res = Domain::update($domainId, array(
1109 'DOMAIN' => $domainName,
1110 'FAIL_COUNT' => null,
1111 'PROVIDER' => null
1112 ));
1113 if ($res->isSuccess())
1114 {
1115 if (Manager::isB24())
1116 {
1117 try
1118 {
1119 $publicUrl = Manager::getPublicationPath(
1120 $primary['ID']
1121 );
1122 $siteController::updateDomain(
1123 $domainNameOld,
1124 $domainName,
1125 $publicUrl
1126 );
1127 }
1128 catch (SystemException $ex)
1129 {
1130 $result->unsetFields($unsetFields);
1131 $result->setErrors(array(
1132 self::customizeControllerError($ex)
1133 ));
1134 return $result;
1135 }
1136 }
1137 }
1138 }
1139 }
1140 }
1141 );
1142 }
1143 }
1144
1145 $result->unsetFields($unsetFields);
1146 $result->modifyFields($modifyFields);
1147
1148 return $result;
1149 }
1150
1157 public static function switchDomain(int $siteId1, int $siteId2): bool
1158 {
1159 $result = false;
1160
1161 self::$disableCallback = true;
1162
1163 $domains = [];
1165 'select' => [
1166 'ID',
1167 'TYPE',
1168 'LANG',
1169 'DOMAIN_ID',
1170 'DOMAIN_NAME' => 'DOMAIN.DOMAIN'
1171 ],
1172 'filter' => [
1173 'ID' => [$siteId1, $siteId2]
1174 ]
1175 ]);
1176 while ($row = $res->fetch())
1177 {
1178 $domains[] = [
1179 'ID' => $row['ID'],
1180 'TYPE' => $row['TYPE'],
1181 'LANG' => $row['LANG'],
1182 'DOMAIN_ID' => $row['DOMAIN_ID'],
1183 'DOMAIN_NAME' => $row['DOMAIN_NAME']
1184 ];
1185 }
1186
1187 if (count($domains) == 2)
1188 {
1189 $res1 = self::update($domains[0]['ID'], [
1190 'DOMAIN_ID' => $domains[1]['DOMAIN_ID']
1191 ]);
1192 $res2 = self::update($domains[1]['ID'], [
1193 'DOMAIN_ID' => $domains[0]['DOMAIN_ID']
1194 ]);
1195 $result = $res1->isSuccess() && $res2->isSuccess();
1196 }
1197
1198 self::$disableCallback = false;
1199
1200 // switch domain for bitrix24
1201 if ($result && Manager::isB24())
1202 {
1203 $siteController = self::getSiteController();
1204 try
1205 {
1206 for ($i = 0; $i <= 1; $i++)
1207 {
1208 $siteController::deleteDomain($domains[$i]['DOMAIN_NAME']);
1209 $siteController::addDomain(
1210 $domains[$i]['DOMAIN_NAME'],
1211 Manager::getPublicationPath($domains[$i == 0 ? 1 : 0]['ID']),
1212 'Y',
1213 ($domains[$i]['TYPE'] == 'STORE') ? 'shop' : $domains[$i]['TYPE'],
1214 self::prepareLangForController($domains[$i]['LANG'] ?? Manager::getZone())
1215 );
1216 }
1217 }
1218 catch (SystemException $ex) {}
1219 }
1220
1221 return $result;
1222 }
1223
1229 public static function randomizeDomain(int $siteId): bool
1230 {
1232 'select' => [
1233 'ID',
1234 'TYPE',
1235 'DOMAIN_ID',
1236 'DOMAIN_NAME' => 'DOMAIN.DOMAIN'
1237 ],
1238 'filter' => [
1239 'ID' => $siteId
1240 ]
1241 ]);
1242 if ($row = $res->fetch())
1243 {
1244 $siteController = self::getSiteController();
1245 $publicUrl = Manager::getPublicationPath($row['ID']);
1246 try
1247 {
1248 $siteController::deleteDomain($row['DOMAIN_NAME']);
1249 $domainName = $siteController::addRandomDomain(
1250 $publicUrl,
1251 ($row['TYPE'] == 'STORE') ? 'shop' : $row['TYPE'],
1252 self::prepareLangForController(Manager::getZone())
1253 );
1254 if ($domainName)
1255 {
1256 $res = Domain::update($row['DOMAIN_ID'], [
1257 'DOMAIN' => $domainName,
1258 'FAIL_COUNT' => null,
1259 'PROVIDER' => null
1260 ]);
1261 return $res->isSuccess();
1262 }
1263 }
1264 catch (SystemException $ex) {}
1265 }
1266
1267 return false;
1268 }
1269
1275 public static function OnBeforeAdd(Entity\Event $event)
1276 {
1277 $result = new Entity\EventResult();
1278
1279 if (self::$disableCallback)
1280 {
1281 return $result;
1282 }
1283
1284 $fields = $event->getParameter('fields');
1285
1286 // check site limit
1287 if (
1290 array(
1291 'type' => $fields['TYPE']
1292 )
1293 )
1294 )
1295 {
1296 $result->unsetFields(array('ADDITIONAL_FIELDS'));
1297 $result->setErrors(array(
1298 new Entity\EntityError(
1299 Restriction\Manager::getSystemErrorMessage('limit_sites_number'),
1300 'SITE_LIMIT_REACHED'
1301 )
1302 ));
1303 return $result;
1304 }
1305
1306 return self::prepareChange($event, self::ACTION_TYPE_ADD);
1307 }
1308
1314 public static function OnBeforeUpdate(Entity\Event $event)
1315 {
1316 if (self::$disableCallback)
1317 {
1318 return new Entity\EventResult();
1319 }
1320
1321 return self::prepareChange($event, self::ACTION_TYPE_UPDATE);
1322 }
1323
1329 protected static function saveAdditionalFields(Entity\Event $event)
1330 {
1331 $result = new Entity\EventResult();
1332
1333 if (!empty(self::$additionalFields))
1334 {
1335 $primary = $event->getParameter('primary');
1336 Site::saveAdditionalFields(
1337 $primary['ID'],
1338 self::$additionalFields
1339 );
1340 }
1341
1342 return $result;
1343 }
1344
1350 public static function getList(array $params = array())
1351 {
1352 if (
1353 !isset($params['filter']) ||
1354 !is_array($params['filter'])
1355 )
1356 {
1357 $params['filter'] = array();
1358 }
1359 if (
1360 !isset($params['filter']['DELETED']) &&
1361 !isset($params['filter']['=DELETED'])
1362 )
1363 {
1364 $params['filter']['=DELETED'] = 'N';
1365 }
1366 if (isset($params['filter']['CHECK_PERMISSIONS']))
1367 {
1368 unset($params['filter']['CHECK_PERMISSIONS']);
1369 }
1370
1371 // strict filter by type
1372 $type = null;
1373 if (isset($params['filter']['TYPE']))
1374 {
1375 $type = $params['filter']['TYPE'];
1376 unset($params['filter']['TYPE']);
1377 }
1378 if (isset($params['filter']['=TYPE']))
1379 {
1380 $type = $params['filter']['=TYPE'];
1381 unset($params['filter']['=TYPE']);
1382 }
1384 $params['filter']['=TYPE'] = (!is_array($type) && in_array($type, (array)$allowedTypes))
1385 ? $type
1386 : $allowedTypes;
1387
1388 return parent::getList($params);
1389 }
1390
1396 public static function OnAfterAdd(Entity\Event $event)
1397 {
1398 if (self::$disableCallback)
1399 {
1400 return true;
1401 }
1402
1403 return self::saveAdditionalFields($event);
1404 }
1405
1411 public static function OnAfterUpdate(Entity\Event $event)
1412 {
1413 if (self::$disableCallback)
1414 {
1415 return true;
1416 }
1417
1418 // for B24 we must update domain
1419 if (Manager::isB24() && !self::$touchMode)
1420 {
1421 static $domainUpdated = [];
1422
1423 $primary = $event->getParameter('primary');
1424
1425 if (!in_array($primary['ID'], $domainUpdated))
1426 {
1427 $domainUpdated[] = $primary['ID'];
1428 $siteController = self::getSiteController();
1430 'select' => [
1431 'ACTIVE', 'DELETED',
1432 'DOMAIN_NAME' => 'DOMAIN.DOMAIN',
1433 'LANG'
1434 ],
1435 'filter' => [
1436 'ID' => $primary['ID'],
1437 '=DELETED' => ['Y', 'N'],
1438 'CHECK_PERMISSIONS' => 'N',
1439 '>DOMAIN_ID' => 0
1440 ]
1441 ]);
1442 if ($row = $res->fetch())
1443 {
1444 try
1445 {
1446 // now external domains always are active
1447 $siteController::activateDomain(
1448 $row['DOMAIN_NAME'],
1449 'Y',
1450 self::prepareLangForController($row['LANG'] ?? Manager::getZone())
1451 );
1452 }
1453 catch (\Bitrix\Main\SystemException $ex) {}
1454 }
1455 }
1456 }
1457
1458 return self::saveAdditionalFields($event);
1459 }
1460
1466 public static function OnBeforeDelete(Entity\Event $event)
1467 {
1468 if (self::$disableCallback)
1469 {
1470 return true;
1471 }
1472
1473 $result = new Entity\EventResult();
1474 $primary = $event->getParameter('primary');
1475 $siteController = self::getSiteController();
1476
1477 if ($primary)
1478 {
1479 // check delete access
1480 $hasAccess = Rights::hasAccessForSite(
1481 $primary['ID'],
1482 Rights::ACCESS_TYPES['delete'],
1483 true
1484 );
1485 if (!$hasAccess)
1486 {
1487 $result->setErrors(array(
1488 new Entity\EntityError(
1489 Loc::getMessage('LANDING_TABLE_ERROR_ACCESS_DENIED_DELETED'),
1490 'ACCESS_DENIED'
1491 )
1492 ));
1493 return $result;
1494 }
1495 // check if site is not empty
1497 'select' => array(
1498 'ID'
1499 ),
1500 'filter' => array(
1501 'SITE_ID' => $primary['ID'],
1502 'CHECK_PERMISSIONS' => 'N'
1503 )
1504 ));
1505 if ($res->fetch())
1506 {
1507 $result->setErrors(array(
1508 new Entity\EntityError(
1509 Loc::getMessage('LANDING_TABLE_ERROR_SITE_IS_NOT_EMPTY'),
1510 'SITE_IS_NOT_EMPTY'
1511 )
1512 ));
1513 return $result;
1514 }
1515 // check lock status
1516 if (\Bitrix\Landing\Lock::isSiteDeleteLocked($primary['ID']))
1517 {
1518 $result->setErrors(array(
1519 new Entity\EntityError(
1520 Loc::getMessage('LANDING_TABLE_ERROR_SITE_IS_LOCK'),
1521 'SITE_IS_LOCK'
1522 )
1523 ));
1524 return $result;
1525 }
1526
1527 // delete in b24.site
1528 if (Manager::isB24())
1529 {
1531 'select' => array(
1532 'DOMAIN_ID',
1533 'DOMAIN_NAME' => 'DOMAIN.DOMAIN',
1534 'DOMAIN_PROVIDER' => 'DOMAIN.PROVIDER'
1535 ),
1536 'filter' => array(
1537 'ID' => $primary['ID'],
1538 'DELETED' => ['Y', 'N'],
1539 'CHECK_PERMISSIONS' => 'N'
1540 )
1541 ));
1542 if ($row = $res->fetch())
1543 {
1544 if ($row['DOMAIN_PROVIDER'] && ModuleManager::isModuleInstalled('bitrix24'))
1545 {
1546 $result->setErrors([
1547 new Entity\EntityError(
1548 Loc::getMessage('LANDING_TABLE_ERROR_ACCESS_DENIED_DELETED'),
1549 'ACCESS_DENIED_DELETED'
1550 )
1551 ]);
1552 return $result;
1553 }
1554
1555 $domainId = $row['DOMAIN_ID'];
1556 $domainName = $row['DOMAIN_NAME'];
1558 $eventManager->addEventHandler(
1559 'landing',
1560 '\\' . __NAMESPACE__ . '\\Site::onAfterDelete',
1561 function(Entity\Event $event) use ($domainId, $domainName, $result, $siteController)
1562 {
1564 'select' => array(
1565 'ID'
1566 ),
1567 'filter' => array(
1568 'DOMAIN_ID' => $domainId,
1569 'DELETED' => ['Y', 'N']
1570 )
1571 ));
1572 if (!$res->fetch())
1573 {
1574 DomainTable::delete($domainId);
1575 try
1576 {
1577 $siteController::deleteDomain($domainName);
1578 }
1579 catch (SystemException $ex)
1580 {
1581 $result->setErrors(array(
1582 self::customizeControllerError($ex)
1583 ));
1584 return $result;
1585 }
1586 }
1587 }
1588 );
1589 }
1590 }
1591 }
1592
1593 return $result;
1594 }
1595
1601 public static function onAfterDelete(Entity\Event $event)
1602 {
1603 $result = new Entity\EventResult();
1604 $primary = $event->getParameter('primary');
1605
1606 if (self::$disableCallback)
1607 {
1608 return $result;
1609 }
1610
1611 // delete all inner landings
1612 if ($primary)
1613 {
1615
1617 'select' => array(
1618 'ID'
1619 ),
1620 'filter' => array(
1621 'SITE_ID' => $primary['ID']
1622 )
1623 ));
1624 while ($row = $res->fetch())
1625 {
1626 \Bitrix\Landing\Landing::delete($row['ID'], true);
1627 }
1628
1631 \Bitrix\Landing\Hook::deleteForSite($primary['ID']);
1632 \Bitrix\Landing\TemplateRef::setForSite($primary['ID'], []);
1637 BindingTable::siteClear($primary['ID']);
1638
1640 {
1641 \Bitrix\AI\Context::clearContext([
1642 "image_site_{$primary['ID']}",
1643 "text_site_{$primary['ID']}",
1644 ]);
1645 }
1646
1647 Rights::setOn();
1648 }
1649
1650 return $result;
1651 }
1652}
$type
Определения options.php:106
static onSiteChange(int $siteId)
Определения entity.php:390
static log($itemId, $itemDesc, $typeId='LANDING_LOG')
Определения debug.php:24
static deleteFromSite($id, $fileId=array())
Определения file.php:255
static deleteForSite(int $siteId)
Определения folder.php:17
static siteClear($siteId)
Определения binding.php:105
static getList(array $params=array())
Определения landing.php:602
static customizeControllerError(SystemException $ex)
Определения site.php:232
static switchDomain(int $siteId1, int $siteId2)
Определения site.php:1157
static getMap()
Определения site.php:76
static getList(array $params=array())
Определения site.php:1350
static prepareChange(Entity\Event $event, $actionType)
Определения site.php:418
static OnBeforeDelete(Entity\Event $event)
Определения site.php:1466
static OnAfterUpdate(Entity\Event $event)
Определения site.php:1411
static OnBeforeAdd(Entity\Event $event)
Определения site.php:1275
static isB24Domain($domainName)
Определения site.php:222
static $additionalFields
Определения site.php:49
static setAccessFilter($params)
Определения site.php:288
static checkUniqueInDomain($code, $currentId, $domainId)
Определения site.php:200
static saveAdditionalFields(Entity\Event $event)
Определения site.php:1329
static OnBeforeUpdate(Entity\Event $event)
Определения site.php:1314
const ACTION_TYPE_UPDATE
Определения site.php:43
static OnAfterAdd(Entity\Event $event)
Определения site.php:1396
static $disableCallback
Определения site.php:55
static prepareLangForController(string $lang)
Определения site.php:250
static $touchMode
Определения site.php:61
static getSiteController()
Определения site.php:188
const ACTION_TYPE_ADD
Определения site.php:38
static randomizeDomain(int $siteId)
Определения site.php:1229
static onAfterDelete(Entity\Event $event)
Определения site.php:1601
static checkBitrixUse($domainName)
Определения site.php:265
static getTableName()
Определения site.php:67
static isSiteDeleteLocked(int $siteId)
Определения lock.php:86
static isB24()
Определения manager.php:1135
static getPublicationPath($siteCode=null, $siteId=null, $createPubPath=false)
Определения manager.php:401
const FEATURE_CREATE_SITE
Определения manager.php:36
static isFreePublicAllowed()
Определения manager.php:1298
static licenseIsFreeSite(string $type)
Определения manager.php:1288
static getZone()
Определения manager.php:930
static getExternalSiteController()
Определения manager.php:1379
const FEATURE_PUBLICATION_SITE
Определения manager.php:40
static checkFeature(string $feature, array $params=array())
Определения manager.php:836
static setOperationsForSite($siteId, array $rights=[])
Определения rights.php:677
static isOn()
Определения rights.php:125
const ADDITIONAL_RIGHTS
Определения rights.php:33
static getAccessFilter(array $additionalFilterOr=[])
Определения rights.php:726
static getOperationsForSite($siteId)
Определения rights.php:520
static isExtendedMode()
Определения rights.php:783
static setOff()
Определения rights.php:89
static getAllowedSites()
Определения rights.php:158
static setOn()
Определения rights.php:98
const ENTITY_TYPE_SITE
Определения rights.php:16
static hasAdditionalRight($code, $type=null, bool $checkExtraRights=false, bool $strict=false)
Определения rights.php:1027
const ACCESS_TYPES
Определения rights.php:21
static hasAccessForSite($siteId, $accessType, $deleted=false)
Определения rights.php:546
static getExpectedRoleIds()
Определения role.php:558
static removeAgreementsForSite(int $siteId, ?string $code=null)
Определения cookies.php:256
static getFilterType($strict=false)
Определения type.php:203
static getDomainId()
Определения type.php:174
static deleteForSite($id)
Определения syspage.php:182
static setForSite($id, array $data=array())
Определения templateref.php:116
static removeForSite($siteId)
Определения urlrewrite.php:119
Определения event.php:5
static getInstance()
Определения eventmanager.php:31
static includeModule($moduleName)
Определения loader.php:67
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
static getList(array $parameters=array())
Определения datamanager.php:431
static update($primary, array $data)
Определения datamanager.php:1256
Определения site.php:31
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
if(!defined('SITE_ID')) $lang
Определения include.php:91
$siteId
Определения ajax.php:8
randString($pass_len=10, $pass_chars=false)
Определения tools.php:2154
Определения cookies.php:2
Определения agent.php:3
Определения cachetracker.php:2
Определения ufield.php:9
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
return false
Определения prolog_main_admin.php:185
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$val
Определения options.php:1793
$eventManager
Определения include.php:412
$rights
Определения options.php:4
$fields
Определения yandex_run.php:501