1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
blockrepo.php
См. документацию.
1<?php
2
4
19
24{
28 public const BLOCKS_DIR = 'blocks';
29
33 public const FAVOURITE_BLOCKS_LIMIT = 5000;
34
39
43 public const NEW_BLOCK_LT = 1209600;//86400 * 14
44
48 private const SECTION_LAST = 'last';
49
53 private const TYPE_STORE = 'STORE';
54
58 private const SITE_TYPE_DEFAULT = 'PAGE';
59
63 private const BLOCKS_TAG = 'landing_blocks';
64
70 public const FILTER_DEFAULTS = 'default';
71 public const FILTER_SKIP_COMMON_BLOCKS = 'skip_common_blocks';
72 public const FILTER_SKIP_SYSTEM_BLOCKS = 'skip_system_blocks';
73 public const FILTER_SKIP_HIDDEN_BLOCKS = 'skip_hidden_blocks';
74 private const AVAILABLE_FILTERS = [
75 self::FILTER_SKIP_COMMON_BLOCKS,
76 self::FILTER_SKIP_SYSTEM_BLOCKS,
77 self::FILTER_SKIP_HIDDEN_BLOCKS,
78 ];
79 private const DEFAULT_ACTIVE_FILTERS = [
80 self::FILTER_SKIP_SYSTEM_BLOCKS,
81 self::FILTER_SKIP_HIDDEN_BLOCKS,
82 ];
83
85 private array $filters = self::DEFAULT_ACTIVE_FILTERS;
86
91 private array $repository = [];
92
93 private ?string $siteType;
94
95 public function __construct()
96 {
97 if (Type::getCurrentScopeId())
98 {
99 $this->siteType = Type::getCurrentScopeId();
100 }
101 else
102 {
103 $this->setSiteType(Landing::getSiteType() ?: self::SITE_TYPE_DEFAULT);
104 }
105
106 $this->sendSetFiltersEvent();
107 }
108
114 public function setSiteType(string $type): static
115 {
116 $this->siteType = $type;
117 if (!in_array($this->siteType, array_keys(Site::getTypes())))
118 {
119 $this->siteType = self::SITE_TYPE_DEFAULT;
120 }
121
122 Type::setScope($this->siteType);
123
124 return $this;
125 }
126
127 private function sendSetFiltersEvent(): void
128 {
129 $event = new Event('landing', 'onBlockRepoSetFilters');
130 $event->send();
131
132 $enable = [];
133 $disable = [];
134
135 foreach ($event->getResults() as $result)
136 {
137 if ($result->getType() !== EventResult::ERROR)
138 {
139 $modified = $result->getModified();
140
141 $enable = array_merge($enable, (array)($modified['ENABLE'] ?? []));
142 $disable = array_merge($disable, (array)($modified['DISABLE'] ?? []));
143 }
144 }
145
146 foreach (array_unique($enable) as $filter)
147 {
148 $this->enableFilter($filter);
149 }
150 foreach (array_unique($disable) as $filter)
151 {
152 $this->disableFilter($filter);
153 }
154 }
155
161 public function enableFilter(string $filter): BlockRepo
162 {
163 if ($filter === self::FILTER_DEFAULTS)
164 {
165 $this->filters = self::DEFAULT_ACTIVE_FILTERS;
166 }
167 elseif (in_array($filter, self::AVAILABLE_FILTERS))
168 {
169 $this->filters[] = $filter;
170 $this->filters = array_unique($this->filters);
171 }
172
173 return $this;
174 }
175
181 public function disableFilter(string $filter): BlockRepo
182 {
183 if (in_array($filter, self::AVAILABLE_FILTERS))
184 {
185 $this->filters = array_filter(
186 $this->filters,
187 function ($currentFilter) use ($filter) {
188 return $currentFilter !== $filter;
189 }
190 );
191 }
192
193 return $this;
194 }
195
201 public function isFilterActive(string $filter): bool
202 {
203 return in_array($filter, $this->filters);
204 }
205
211 public function isBlockInRepo(string $code): bool
212 {
213 $repo = $this->getRepository();
214 foreach ($repo as $sectionCode => $category)
215 {
216 if ($sectionCode === self::SECTION_LAST)
217 {
218 continue;
219 }
220
221 $blocks = array_keys(($category['items'] ?? []));
222 if (in_array($code, $blocks, true))
223 {
224 return true;
225 }
226 }
227
228 return false;
229 }
230
235 public function getRepository(): array
236 {
237 // static cache
238 if (!empty($this->repository))
239 {
240 return $this->getPreparedRepository();
241 }
242
243 return $this->loadRepositoryData()->getPreparedRepository();
244 }
245
246 private function loadRepositoryData(): static
247 {
248 // config
249 $disableNamespace = (array)Config::get('disable_namespace');
250 $enableNamespace = Config::get('enable_namespace');
251 $enableNamespace = $enableNamespace ? (array)$enableNamespace : [];
252
253 // system cache begin
254 $cache = new \CPHPCache();
255 $cacheTime = 86400;
256 $cacheStarted = false;
257 $cacheId = LANGUAGE_ID;
258 $cacheId .= 'user:' . Manager::getUserId();
259 $cacheId .= 'version:2';
260 $cacheId .= 'disable:' . implode(',', $disableNamespace);
261 $cacheId .= 'enable:' . implode(',', $enableNamespace);
262 $cacheId .= 'specType:' . ($this->siteType ?? '');
263 $cachePath = 'landing/blocks';
264 if ($cache->initCache($cacheTime, $cacheId, $cachePath))
265 {
266 $this->repository = $cache->getVars();
267 if (is_array($this->repository) && !empty($this->repository))
268 {
269 return $this->fillLastUsedBlocks();
270 }
271 }
272 if ($cache->startDataCache($cacheTime, $cacheId, $cachePath))
273 {
274 $cacheStarted = true;
275 if (Cache::isCaching())
276 {
277 Manager::getCacheManager()->startTagCache($cachePath);
278 Manager::getCacheManager()->registerTag(self::BLOCKS_TAG);
279 }
280 }
281
282 // not in cache - init
283 $blocks = [];
284 $sections = [];
285
286 // general paths and namespaces
288 $namespaces = self::getNamespaces();
289
290 //get all blocks with description-file
291 sort($namespaces);
292 foreach ($namespaces as $subdir)
293 {
294 foreach ($paths as $path)
295 {
297 if (
298 is_dir($path . '/' . $subdir)
299 && ($handle = opendir($path . '/' . $subdir))
300 )
301 {
302 // sections
303 $sectionsPath = $path . '/' . $subdir . '/.sections.php';
304 if (file_exists($sectionsPath))
305 {
306 $sections = array_merge(
307 $sections,
308 (array)include $sectionsPath
309 );
310 }
311 if (!isset($sections[self::SECTION_LAST]))
312 {
313 $sections[self::SECTION_LAST] = [
314 'name' => Loc::getMessage('LD_BLOCK_SECTION_LAST'),
315 ];
316 }
317 // blocks
318 while ((($entry = readdir($handle)) !== false))
319 {
320 $descriptionPath = $path . '/' . $subdir . '/' . $entry . '/.description.php';
321 $previewPathJpg = $path . '/' . $subdir . '/' . $entry . '/' . Block::PREVIEW_FILE_NAME;
322 if ($entry !== '.' && $entry !== '..' && file_exists($descriptionPath))
323 {
324 Loc::loadLanguageFile($descriptionPath);
325 $description = include $descriptionPath;
326 if (isset($description['block']['name']))
327 {
328 $previewFileName = Manager::getUrlFromFile(
330 self::BLOCKS_DIR . '/' . $subdir . '/' . $entry . '/' . Block::PREVIEW_FILE_NAME
331 )
332 );
333 $blocks[$entry] = [
334 'id' => isset($description['block']['id'])
335 ? (string)$description['block']['id']
336 : null,
337 'name' => $description['block']['name'],
338 'namespace' => $subdir,
339 'new' => self::isNewBlock($entry),
340 'version' => $description['block']['version'] ?? null,
341 'type' => $description['block']['type'] ?? [],
342 'section' => $description['block']['section'] ?? 'other',
343 'system' => (bool)($description['block']['system'] ?? false),
344 'description' => $description['block']['description'] ?? '',
345 'preview' => file_exists($previewPathJpg)
346 ? $previewFileName
347 : '',
348 'restricted' => false,
349 'repo_id' => false,
350 'app_code' => false,
351 'only_for_license' => $description['block']['only_for_license'] ?? '',
352 ];
353 }
354 }
355 }
356 }
357 }
358 }
359
360 // rest repo
361 $blocksRepo = Repo::getRepository();
362 // get apps by blocks
363 $apps = [];
364 foreach ($blocksRepo as $block)
365 {
366 if ($block['app_code'])
367 {
368 $apps[] = $block['app_code'];
369 }
370 }
371 if ($apps)
372 {
373 $apps = array_unique($apps);
374 $apps = Repo::getAppByCode($apps);
375 // mark repo blocks expired
376 foreach ($blocksRepo as &$block)
377 {
378 if (
379 $block['app_code']
380 && isset($apps[$block['app_code']])
381 && $apps[$block['app_code']]['PAYMENT_ALLOW'] == 'N'
382 )
383 {
384 $block['app_expired'] = true;
385 }
386 }
387 unset($block);
388 }
389 $blocks += $blocksRepo;
390
391 // favorites block
392 $currentUser = Manager::getUserId();
393 $favoriteBlocks = [];
394 $favoriteMyBlocks = [];
395 $res = Internals\BlockTable::getList([
396 'select' => [
397 'ID', 'CODE', 'FAVORITE_META', 'CREATED_BY_ID',
398 ],
399 'filter' => [
400 'LID' => 0,
401 '=DELETED' => 'N',
402 ],
403 'order' => [
404 'ID' => 'desc',
405 ],
406 'limit' => self::FAVOURITE_BLOCKS_LIMIT,
407 ]);
408 $countFavoriteBlocks = 0;
409 while ($row = $res->fetch())
410 {
411 $countFavoriteBlocks++;
412 if (isset($blocks[$row['CODE']]))
413 {
414 if (!is_array($row['FAVORITE_META']))
415 {
416 continue;
417 }
418 $meta = $row['FAVORITE_META'];
419 $meta['preview'] = $meta['preview'] ?? 0;
420 $meta['favorite'] = true;
421 $meta['favoriteMy'] = ((int)$row['CREATED_BY_ID'] === $currentUser);
422 if ($meta['preview'] > 0 && $countFavoriteBlocks < self::FAVOURITE_BLOCKS_LIMIT_WITH_PREVIEW)
423 {
424 $meta['preview'] = File::getFilePath($meta['preview']);
425 }
426 else
427 {
428 unset($meta['preview']);
429 }
430 if (isset($meta['section']))
431 {
432 $meta['section'] = (array)$meta['section'];
433 }
434
435 $item = array_merge(
436 $blocks[$row['CODE']],
437 $meta
438 );
439 $code = $row['CODE'] . '@' . $row['ID'];
440 if ($item['type'] === 'null')
441 {
442 $item['type'] = [];
443 }
444
445 $meta['favoriteMy']
446 ? ($favoriteMyBlocks[$code] = $item)
447 : ($favoriteBlocks[$code] = $item);
448 }
449 }
450 $blocks = $favoriteMyBlocks + $blocks + $favoriteBlocks;
451
452 // create new section in repo
453 $createNewSection = function ($item)
454 {
455 // todo: filter here?
456 return [
457 'name' => isset($item['name'])
458 ? (string)$item['name']
459 : (string)$item,
460 'meta' => $item['meta'] ?? [],
461 'new' => false,
462 'type' => $item['type'] ?? null,
463 'specialType' => $item['specialType'] ?? null,
464 'separator' => false,
465 'app_code' => false,
466 'items' => [],
467 ];
468 };
469
470 // set by sections
471 $createdSects = [];
472 foreach ($sections as $code => $item)
473 {
474 $title = $item['name'] ?? $item;
475 $title = (string)$title;
476 $title = trim($title);
477 $this->repository[$code] = $createNewSection($item);
478 $createdSects[$title] = $code;
479 }
480 foreach ($blocks as $key => $block)
481 {
482 if (!is_array($block['section']))
483 {
484 $block['section'] = [$block['section']];
485 }
486 foreach ($block['section'] as $section)
487 {
488 $section = trim($section);
489 if (!$section)
490 {
491 $section = 'other';
492 }
493 // adding new sections (actual for repo blocks)
494 // todo: not add new section if can't
495 if (!isset($this->repository[$section]))
496 {
497 if (isset($createdSects[$section]))
498 {
499 $section = $createdSects[$section];
500 }
501 else
502 {
503 $this->repository[$section] = $createNewSection($section);
504 }
505 }
506 $this->repository[$section]['items'][$key] = $block;
507 if ($block['new'])
508 {
509 $this->repository[$section]['new'] = true;
510 }
511 }
512 }
513
514 // add apps sections
515 if (!empty($blocksRepo) && !empty($apps))
516 {
517 $this->repository['separator_apps'] = [
518 'name' => Loc::getMessage('LANDING_BLOCK_SEPARATOR_PARTNER_2_MSGVER_1'),
519 'separator' => true,
520 'items' => [],
521 ];
522 foreach ($apps as $app)
523 {
524 $this->repository[$app['CODE']] = [
525 'name' => $app['APP_NAME'],
526 'new' => false,
527 'separator' => false,
528 'app_code' => $app['CODE'],
529 'items' => [],
530 ];
531 }
532 // add blocks to the app sections
533 foreach ($blocksRepo as $key => $block)
534 {
535 if ($block['app_code'])
536 {
537 $this->repository[$block['app_code']]['items'][$key] = $block;
538 }
539 }
540 }
541
542 // sort by id
543 foreach ($this->repository as $codeCat => &$blocksCat)
544 {
545 $codeCat = mb_strtoupper($codeCat);
546 uasort($blocksCat['items'], function ($item1, $item2) use ($codeCat)
547 {
548 if ($item1['repo_id'])
549 {
550 return 1;
551 }
552 if ($item2['repo_id'])
553 {
554 return 0;
555 }
556 if (
557 ($item1['id'] && $item2['id'])
558 && mb_strpos($item1['id'], 'BX_' . $codeCat . '_') === 0
559 && mb_strpos($item2['id'], 'BX_' . $codeCat . '_') === 0
560 )
561 {
562 return ($item1['id'] > $item2['id']) ? 1 : -1;
563 }
564
565 return 0;
566 });
567 }
568 unset($blocksCat);
569
570 // system cache end
571 if ($cacheStarted)
572 {
573 $cache->endDataCache($this->repository);
574 if (Cache::isCaching())
575 {
576 Manager::getCacheManager()->endTagCache();
577 }
578 }
579
580 return $this->fillLastUsedBlocks();
581 }
582
583 private function fillLastUsedBlocks(): static
584 {
585 $request = Application::getInstance()->getContext()->getRequest();
586 if ($request->get('landing_mode') !== 'edit')
587 {
588 return $this;
589 }
590
591 static $lastUsedItems = null;
592 if ($lastUsedItems !== null)
593 {
594 $this->repository[self::SECTION_LAST]['items'] = $lastUsedItems;
595
596 return $this;
597 }
598
599 $this->repository[self::SECTION_LAST]['items'] = [];
600 $lastUsed = Block::getLastUsed();
601 if (count($lastUsed) > 0)
602 {
603 foreach ($lastUsed as $code)
604 {
605 $this->repository[self::SECTION_LAST]['items'][$code] = [];
606 }
607 foreach ($this->repository as $catCode => &$cat)
608 {
609 foreach ($cat['items'] as $code => &$block)
610 {
611 if (
612 in_array($code, $lastUsed)
613 && $catCode != self::SECTION_LAST
614 && !empty($block)
615 )
616 {
617 $block['section'][] = self::SECTION_LAST;
618 $this->repository[self::SECTION_LAST]['items'][$code] = $block;
619 }
620 }
621 unset($block);
622 }
623 unset($cat);
624
625 // clear last-section
626 foreach ($this->repository[self::SECTION_LAST]['items'] as $code => $block)
627 {
628 if (!$block)
629 {
630 unset($this->repository[self::SECTION_LAST]['items'][$code]);
631 }
632 }
633 }
634
635 $lastUsedItems = $this->repository[self::SECTION_LAST]['items'];
636
637 return $this;
638 }
639
640 private function getPreparedRepository(): array
641 {
642 $prepared = $this->filterRepository($this->repository);
643
644 $event = new Event('landing', 'onBlockGetRepository', [
645 'blocks' => $prepared,
646 ]);
647 $event->send();
648 foreach ($event->getResults() as $result)
649 {
650 if ($result->getResultType() != EventResult::ERROR)
651 {
652 if (($modified = $result->getModified()))
653 {
654 if (isset($modified['blocks']))
655 {
656 $prepared = array_merge($prepared, $modified['blocks']);
657 }
658 }
659 }
660 }
661
662 return $prepared;
663 }
664
670 private function filterRepository(array $repository): array
671 {
679 $prepareType = function (string|array $item): ?array
680 {
681 $type = (array)$item;
682 $type = array_map('strtoupper', $type);
683 if (in_array('PAGE', $type))
684 {
685 $type[] = 'SMN';
686 }
687 if (
688 in_array('NULL', $type)
689 || in_array('', $type)
690 )
691 {
692 return null;
693 }
694
695 return $type;
696 };
697
698 $filtered = [];
699
700 $isStoreEnabled = Manager::isStoreEnabled();
701 $version = Manager::getVersion();
702 $license = Loader::includeModule('bitrix24') ? \CBitrix24::getLicenseType() : null;
703
704 foreach ($repository as $sectionCode => $section)
705 {
706 $sectionTypes = $prepareType($section['type'] ?? []);
707
708 if (
709 $this->isFilterActive(self::FILTER_SKIP_COMMON_BLOCKS)
710 && empty($sectionTypes)
711 && $sectionCode !== self::SECTION_LAST
712 )
713 {
714 continue;
715 }
716
717 if (
718 $this->isFilterActive(self::FILTER_SKIP_HIDDEN_BLOCKS)
719 && $sectionTypes === null
720 )
721 {
722 continue;
723 }
724
725 if (
726 is_array($sectionTypes)
727 && !empty($sectionTypes)
728 && !in_array($this->siteType, $sectionTypes, true))
729 {
730 continue;
731 }
732
733 if ($sectionTypes === [self::TYPE_STORE] && !$isStoreEnabled)
734 {
735 continue;
736 }
737
738 $filtered[$sectionCode] = $section;
739 $filtered[$sectionCode]['items'] = [];
740
741 foreach ($section["items"] ?? [] as $blockCode => $block)
742 {
743 $blockTypes = $prepareType($block['type'] ?? []);
744
745 if (
746 $this->isFilterActive(self::FILTER_SKIP_COMMON_BLOCKS)
747 && empty($blockTypes)
748 )
749 {
750 continue;
751 }
752
753 if (
754 $this->isFilterActive(self::FILTER_SKIP_HIDDEN_BLOCKS)
755 && $blockTypes === null
756 )
757 {
758 continue;
759 }
760
761 if (
762 is_array($blockTypes)
763 && !empty($blockTypes)
764 && !in_array($this->siteType, $blockTypes, true)
765 )
766 {
767 continue;
768 }
769
770 if (!empty($block['only_for_license']) && $block['only_for_license'] !== $license)
771 {
772 continue;
773 }
774
775 if (
776 $this->isFilterActive(self::FILTER_SKIP_SYSTEM_BLOCKS)
777 && isset($block['system'])
778 && $block['system'] === true
779 )
780 {
781 continue;
782 }
783
784 $block['requires_updates'] =
785 ($block['version'] ?? null)
786 && version_compare($version, $block['version']) < 0;
787
788 $filtered[$sectionCode]['items'][$blockCode] = $block;
789 }
790
791 if (empty($filtered[$sectionCode]['items']))
792 {
793 unset($filtered[$sectionCode]);
794 }
795 }
796
797 return $filtered;
798 }
799
803 public function clearCache(): static
804 {
805 if (Cache::isCaching())
806 {
807 Manager::getCacheManager()->clearByTag(self::BLOCKS_TAG);
808 }
809
810 return $this;
811 }
812
817 public static function getGeneralPaths(): ?array
818 {
819 static $paths = null;
820
821 if (!$paths)
822 {
823 $paths = [
824 BX_ROOT . '/' . self::BLOCKS_DIR,
825 \getLocalPath(self::BLOCKS_DIR),
826 ];
827 if ($paths[0] == $paths[1])
828 {
829 unset($paths[1]);
830 }
831 }
832
833 return $paths;
834 }
835
840 public static function getNamespaces(): array
841 {
842 static $namespaces = [];
843
844 if ($namespaces)
845 {
846 return $namespaces;
847 }
848
850 $disableNamespace = (array)Config::get('disable_namespace');
851 $enableNamespace = Config::get('enable_namespace');
852 $enableNamespace = $enableNamespace ? (array)$enableNamespace : [];
853
854 $namespaces = [];
855 foreach ($paths as $path)
856 {
857 if ($path !== false)
858 {
860 // read all subdirs ($namespaces) in block dir
861 if (($handle = opendir($path)))
862 {
863 while ((($entry = readdir($handle)) !== false))
864 {
865 if (!empty($enableNamespace))
866 {
867 if (in_array($entry, $enableNamespace))
868 {
869 $namespaces[] = $entry;
870 }
871 }
872 elseif (
873 $entry != '.' && $entry != '..'
874 && is_dir($path . '/' . $entry)
875 && !in_array($entry, $disableNamespace)
876 )
877 {
878 $namespaces[] = $entry;
879 }
880 }
881 }
882 }
883 }
884 $namespaces = array_unique($namespaces);
885
886 return $namespaces;
887 }
888
894 protected static function isNewBlock(string $block): bool
895 {
896 static $newBlocks = null;
897
898 if ($newBlocks === null)
899 {
900 $newBlocks = unserialize(Manager::getOption('new_blocks'), ['allowed_classes' => false]);
901 if (!is_array($newBlocks))
902 {
903 $newBlocks = [];
904 }
905 if (
906 !isset($newBlocks['date'])
907 || ((time() - $newBlocks['date']) > self::NEW_BLOCK_LT)
908 )
909 {
910 $newBlocks = [];
911 }
912 if (isset($newBlocks['items']))
913 {
914 $newBlocks = $newBlocks['items'];
915 }
916 }
917
918 return in_array($block, $newBlocks);
919 }
920}
$path
Определения access_edit.php:21
$type
Определения options.php:106
const BX_ROOT
Определения bx_root.php:3
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
const FILTER_SKIP_COMMON_BLOCKS
Определения blockrepo.php:71
isBlockInRepo(string $code)
Определения blockrepo.php:211
static isNewBlock(string $block)
Определения blockrepo.php:894
const BLOCKS_DIR
Определения blockrepo.php:28
static getNamespaces()
Определения blockrepo.php:840
const FILTER_SKIP_HIDDEN_BLOCKS
Определения blockrepo.php:73
const NEW_BLOCK_LT
Определения blockrepo.php:43
disableFilter(string $filter)
Определения blockrepo.php:181
const FAVOURITE_BLOCKS_LIMIT_WITH_PREVIEW
Определения blockrepo.php:38
setSiteType(string $type)
Определения blockrepo.php:114
isFilterActive(string $filter)
Определения blockrepo.php:201
const FILTER_SKIP_SYSTEM_BLOCKS
Определения blockrepo.php:72
enableFilter(string $filter)
Определения blockrepo.php:161
const FILTER_DEFAULTS
Определения blockrepo.php:70
static getGeneralPaths()
Определения blockrepo.php:817
const FAVOURITE_BLOCKS_LIMIT
Определения blockrepo.php:33
static isCaching()
Определения cache.php:37
static getFilePath($fileId)
Определения file.php:600
static getOption($code, $default=null)
Определения manager.php:160
static getVersion()
Определения manager.php:1255
static getDocRoot()
Определения manager.php:180
static isStoreEnabled()
Определения manager.php:1223
static getUserId()
Определения manager.php:107
static getCacheManager()
Определения manager.php:89
static getUrlFromFile($file)
Определения manager.php:1082
static getAppByCode($code)
Определения repo.php:302
static getRepository()
Определения repo.php:72
setScope($scope)
Определения controller.php:373
static get()
Определения currentuser.php:33
Определения event.php:5
Определения loader.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
$handle
Определения include.php:55
$result
Определения get_property_values.php:14
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
$filter
Определения iblock_catalog_list.php:54
$app
Определения proxy.php:8
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
if(file_exists(( $_fname=__DIR__ . "/classes/general/update_db_updater.php"))) if(($_fname=getLocalPath("init.php")) !==false) if(( $_fname=getLocalPath("php_interface/init.php", BX_PERSONAL_ROOT)) !==false) if(($_fname=getLocalPath("php_interface/" . SITE_ID . "/init.php", BX_PERSONAL_ROOT)) !==false) if((!(defined("STATISTIC_ONLY") &&STATISTIC_ONLY &&!str_starts_with( $GLOBALS["APPLICATION"]->GetCurPage(), BX_ROOT . "/admin/"))) &&COption::GetOptionString("main", "include_charset", "Y")=="Y" &&LANG_CHARSET !='') if(COption::GetOptionString("main", "set_p3p_header", "Y")=="Y") $license
Определения include.php:158
getLocalPath($path, $baseFolder="/bitrix")
Определения tools.php:5092
Определения base.php:2
Определения cache.php:2
Определения cookies.php:2
Определения Image.php:9
$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
</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
$title
Определения pdf.php:123
$paths
Определения options.php:2080