1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
CollabEntityFactory.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Collab\Entity;
6
7use Bitrix\Calendar\Integration\SocialNetwork\Collab\Entity\EventEntity;
8use Bitrix\Calendar\Integration\SocialNetwork\Collab\Entity\SectionEntity;
9use Bitrix\Disk\Integration\Collab\Entity\FileEntity;
10use Bitrix\Forum\Integration\Socialnetwork\Collab\Entity\CommentEntity;
11use Bitrix\Main\Loader;
12use Bitrix\Main\ObjectException;
13use Bitrix\Socialnetwork\Collab\Entity\Type\EntityType;
14use Bitrix\Tasks\Integration\SocialNetwork\Collab\Entity\CheckList\TaskCheckListEntity;
15use Bitrix\Tasks\Integration\SocialNetwork\Collab\Entity\TaskEntity;
16use ReflectionClass;
17
19{
20 public static function getById(int $id, EntityType|string $type): ?CollabEntity
21 {
22 return static::get($type, $id);
23 }
24
25 public static function getByInternalObject(mixed $internalObject, EntityType|string $type): ?CollabEntity
26 {
27 return static::get($type, internalObject: $internalObject);
28 }
29
30 private static function get(EntityType|string $type, int $id = null, mixed $internalObject = null): ?CollabEntity
31 {
32 $entityType = is_string($type) ? EntityType::tryFrom($type) : $type;
33 if ($entityType === null)
34 {
35 return null;
36 }
37
38 $config = static::getClassAndModule($entityType);
39 if ($config === null)
40 {
41 return null;
42 }
43
44 [$class, $module] = $config;
45 if (!Loader::includeModule($module))
46 {
47 return null;
48 }
49
50 if ($internalObject !== null && static::hasGetIdMethod($internalObject))
51 {
52 $id = (int)$internalObject->getId();
53 }
54
55 if ($id === null || $id <= 0)
56 {
57 return null;
58 }
59
60 try
61 {
62 return new $class($id);
63 }
64 catch (ObjectException)
65 {
66 return null;
67 }
68 }
69
70 private static function hasGetIdMethod(mixed $internalObject): bool
71 {
72 if (!is_object($internalObject))
73 {
74 return false;
75 }
76
77 $reflection = new ReflectionClass($internalObject);
78
79 return $reflection->hasMethod('getId') && $reflection->getMethod('getId')->isPublic();
80 }
81
82 private static function getClassAndModule(EntityType $type): ?array
83 {
84 return match($type)
85 {
86 EntityType::Task => [TaskEntity::class, 'tasks'],
87 EntityType::CalendarSection => [SectionEntity::class, 'calendar'],
88 EntityType::CalendarEvent => [EventEntity::class, 'calendar'],
89 EntityType::Comment => [CommentEntity::class, 'forum'],
90 EntityType::File => [FileEntity::class, 'disk'],
91 EntityType::TaskCheckList => [TaskCheckListEntity::class, 'tasks'],
92 };
93 }
94}
$type
Определения options.php:106
static getByInternalObject(mixed $internalObject, EntityType|string $type)
Определения CollabEntityFactory.php:25
static getById(int $id, EntityType|string $type)
Определения CollabEntityFactory.php:20
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$config
Определения quickway.php:69