18 private const CHAT_ENTITY_TYPE =
'SONET_GROUP';
26 if (!Loader::includeModule(
'im'))
33 $factory =
new static($group);
35 $fields = match ($factory->group->getType())
37 Type::Project, Type::Scrum => $factory->getProjectChatFields(),
38 Type::Collab => $factory->getCollabChatFields(),
39 default => $factory->getGroupChatFields(),
42 $chatResult = Chat\ChatFactory::getInstance()->addChat(
$fields);
44 $result->addErrors($chatResult->getErrors());
51 return match ($groupType)
53 Type::Project, Type::Scrum => Loc::getMessage(
'SOCIALNETWORK_WORKGROUP_CHAT_FACTORY_TITLE_PROJECT', [
54 '#GROUP_NAME#' => $groupTitle,
55 ], static::getLanguageId()),
57 Type::Collab => $groupTitle,
59 default => Loc::getMessage(
'SOCIALNETWORK_WORKGROUP_CHAT_FACTORY_TITLE', [
60 '#GROUP_NAME#' => $groupTitle,
61 ], static::getLanguageId()),
65 private function __construct(
Workgroup $group)
67 $this->group = $group;
70 private static function getLanguageId(): string
72 $currentSite = CSite::getById(
SITE_ID)->fetch();
74 return (
string)($currentSite ? $currentSite[
'LANGUAGE_ID'] : LANGUAGE_ID);
77 private function getCollabChatFields():
array
79 return array_merge($this->getCommonFields(), self::getUniqueCollabChatFields());
84 return match (
$type) {
85 Type::Collab => self::getUniqueCollabChatFields(),
86 default => self::getUniqueGroupChatFields(),
94 $fields[
'TYPE'] = Chat::IM_TYPE_CHAT;
95 $fields[
'SKIP_ADD_MESSAGE'] =
'Y';
104 $fields[
'TYPE'] = Chat::IM_TYPE_COLLAB;
105 $fields[
'SKIP_ADD_MESSAGE'] =
'N';
106 $fields[
'MANAGE_USERS_DELETE'] = Chat::MANAGE_RIGHTS_OWNER;
107 $fields[
'MANAGE_UI'] = Chat::MANAGE_RIGHTS_OWNER;
112 private function getGroupChatFields():
array
114 $fields = $this->getCommonFields();
121 private function getProjectChatFields():
array
123 $fields = $this->getCommonFields();
130 private function getCommonFields():
array
133 'TITLE' => static::getChatTitle($this->group->getName(), $this->group->getType()),
134 'DESCRIPTION' => $this->group->getDescription(),
135 'ENTITY_TYPE' => self::CHAT_ENTITY_TYPE,
136 'ENTITY_ID' => $this->group->getId(),
137 'SKIP_ADD_MESSAGE' =>
'Y',
138 'AUTHOR_ID' => $this->group->getOwnerId(),
139 'USERS' => $this->getMembers(),
143 if ($this->group->getImageId() > 0)
145 $fields[
'AVATAR_ID'] = $this->group->getImageId();
146 $fields[
'AVATAR'] = $this->group->getImageId();
152 private function getMembers():
array
154 $members = $this->group->getUserMemberIds();
157 $members[] = $this->group->getOwnerId();