3declare(strict_types=1);
5namespace Bitrix\Socialnetwork\Internals\Registry;
7use Bitrix\Main\ArgumentException;
8use Bitrix\Main\ObjectPropertyException;
9use Bitrix\Main\SystemException;
10use Bitrix\Main\Type\DateTime;
11use Bitrix\Socialnetwork\Collab\Collab;
12use Bitrix\Socialnetwork\Collab\Integration\IM\Dialog;
13use Bitrix\Socialnetwork\Internals\Member\MemberEntityCollection;
14use Bitrix\Socialnetwork\Internals\Registry\Event\GroupLoadedEvent;
15use Bitrix\Socialnetwork\Internals\site\SiteEntityCollection;
16use Bitrix\Socialnetwork\Item\Workgroup;
17use Bitrix\Socialnetwork\Item\Workgroup\Type;
18use Bitrix\Socialnetwork\Space\Member;
19use Bitrix\Socialnetwork\UserToGroupTable;
20use Bitrix\Socialnetwork\WorkgroupTable;
21use Bitrix\Socialnetwork\Integration\Im\Chat;
29 private static ?
self $instance =
null;
33 if (static::$instance ===
null)
35 static::$instance =
new static();
38 return static::$instance;
58 if (isset(static::$storage[$groupId]))
62 return static::$storage[$groupId];
65 $this->
load($groupId);
67 return static::$storage[$groupId];
72 unset(static::$storage[$groupId]);
82 protected function load(
int $groupId): void
87 static::$storage[$groupId] =
null;
105 $fields = WorkgroupTable::getByPrimary($groupId,
$select)->fetchObject()?->collectValues();
138 $groupType = Type::tryFrom((
string)
$fields[
'TYPE']);
140 if ($groupType === Type::Collab)
184 $chat = Chat\Workgroup::getChatData([
186 'skipAvailabilityCheck' =>
true,
189 $chatId = (int)($chat[$id] ?? 0);
193 $fields[
'DIALOG_ID'] = Dialog::getDialogId($chatId);
205 if ($users->isEmpty())
210 $users = array_map(
static fn (
Member $member):
array => $member->collectValues(), iterator_to_array($users));
213 $memberIds = array_column($members,
'USER_ID');
215 $fields[
'MEMBERS'] = $memberIds;
218 $ordinaryMembersIds = array_column($ordinaryMembers,
'USER_ID');
220 $fields[
'ORDINARY_MEMBERS'] = $ordinaryMembersIds;
223 $requestedIds = array_column($requested,
'USER_ID');
225 $fields[
'INVITED_MEMBERS'] = $requestedIds;
228 $moderatorsIds = array_column($moderators,
'USER_ID');
230 $fields[
'MODERATOR_MEMBERS'] = $moderatorsIds;
245 $entity = WorkgroupTable::getEntity();
258 if ($field->getDataType() ===
'boolean')
fillDates(array &$fields)
onObjectLoaded(Workgroup $group)
fillUserFields(array &$fields)
fillStorage(array $fields)
fillChatId(array &$fields)
fillUserMembers(array &$fields)
onObjectAlreadyLoaded(?Workgroup $group)
fillSites(array &$fields)
remapBooleanFields(array &$fields)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
if(empty($signedUserToken)) $key