8namespace Bitrix\Socialnetwork\Integration\Im\Chat;
10use Bitrix\Im\Model\ChatTable;
11use Bitrix\Main\Entity\Query;
12use Bitrix\Main\Localization\Loc;
13use Bitrix\Main\Config\Option;
14use Bitrix\Main\Loader;
15use Bitrix\Socialnetwork\Integration\Im\ChatFactory;
16use Bitrix\Socialnetwork\Internals\Registry\GroupRegistry;
17use Bitrix\Socialnetwork\Item;
18use Bitrix\Socialnetwork\Provider\GroupProvider;
19use Bitrix\Socialnetwork\UserToGroupTable;
21Loc::loadMessages(__FILE__);
26 private static $staticCache =
array();
30 return Option::get(
'socialnetwork',
'use_workgroup_chat',
"Y") ===
"Y";
40 || !Loader::includeModule(
'im')
46 if (!is_array(
$params[
'group_id']))
52 if (isset(self::$staticCache[$cacheKey]))
54 return self::$staticCache[$cacheKey];
57 $params[
'group_id'] = array_values(array_unique(array_filter(array_map(
59 return (is_array($groupId) || intval($groupId) <= 0 ?
false : intval($groupId));
65 $groupIds =
$params[
'group_id'];
67 if (!static::getUseChat())
72 $groupIds = array_filter(
84 !isset(
$params[
'skipAvailabilityCheck'])
85 || !
$params[
'skipAvailabilityCheck']
88 foreach($groupIds as
$key => $value)
90 if (!self::getGroupChatAvailable($value))
92 unset($groupIds[
$key]);
98 'select' => Array(
'ID',
'ENTITY_ID'),
100 '=ENTITY_TYPE' => self::CHAT_ENTITY_TYPE,
101 '@ENTITY_ID' => $groupIds
104 while ($chat =
$res->fetch())
106 $result[$chat[
'ENTITY_ID']] = $chat[
'ID'];
109 self::$staticCache[$cacheKey] =
$result;
118 if (intval($groupId) <= 0)
123 $groupType = GroupProvider::getInstance()->getGroupType($groupId);
131 is_array($activeFeatures)
132 && in_array(
'chat', $activeFeatures)
143 $groupId = (int)(
$params[
'group_id'] ?? 0);
149 if (!Loader::includeModule(
'im'))
154 $group = GroupRegistry::getInstance()->get($groupId);
160 if (!$group->isCollab() && !static::getUseChat())
169 static::$staticCache = [];
177 $isProject = (bool)(
$params[
'project'] ??
false);
180 $type = Item\Workgroup\Type::Project;
184 $type = Item\Workgroup\Type::tryFrom((
string)(
$params[
'type'] ??
''));
195 || intval(
$params[
'group_id']) <= 0
197 || !Loader::includeModule(
'im')
204 $groupId = intval(
$params[
'group_id']);
207 $groupType = GroupProvider::getInstance()->getGroupType($groupId);
209 if ($groupType !==
Item\
Workgroup\Type::Collab && !static::getUseChat())
214 $chatData = self::getChatData(
array(
215 'group_id' => $groupId
220 || empty($chatData[$groupId])
221 || intval($chatData[$groupId]) <= 0
227 $chatId = $chatData[$groupId];
229 $chat = new \CIMChat();
231 $managersInfo =
array();
232 foreach($userIdList as
$userId)
234 $managersInfo[
$userId] = $setFlag;
237 return $chat->setManagers($chatId, $managersInfo,
false);
245 || intval(
$params[
'group_id']) <= 0
246 || !self::getUseChat()
247 || !Loader::includeModule(
'im')
253 $groupId = (int)
$params[
'group_id'];
255 $groupType = GroupProvider::getInstance()->getGroupType($groupId);
261 $groupName = (
$params[
'group_name'] ??
null);
262 $isProject = (
$params[
'group_project'] ??
null);
264 if ($groupName ===
null || $isProject ===
null)
266 $queryObject = \Bitrix\Socialnetwork\WorkgroupTable::getList([
267 'filter' => [
'ID' => $groupId],
268 'select' => [
'NAME',
'PROJECT'],
270 $groupFields = $queryObject->fetch();
271 $groupName = ($groupFields ? $groupFields[
'NAME'] :
'');
272 $isProject = $groupFields[
'PROJECT'] ===
'Y';
275 if ($groupName ===
'')
280 $chatMessageFields =
array(
281 "MESSAGE" => str_replace(
287 ?
"SOCIALNETWORK_WORKGROUP_CHAT_UNLINKED_PROJECT"
288 :
"SOCIALNETWORK_WORKGROUP_CHAT_UNLINKED"
296 'select' => Array(
'ID'),
298 '=ENTITY_TYPE' => self::CHAT_ENTITY_TYPE,
299 '=ENTITY_ID' => $groupId
302 while ($chat =
$res->fetch())
304 if (ChatTable::update($chat[
'ID'],
array(
305 'ENTITY_TYPE' =>
false,
309 return \CIMChat::addMessage(array_merge(
310 $chatMessageFields,
array(
311 "TO_CHAT_ID" => $chat[
'ID']
337 ->where(
'GROUP_ID', $groupId)
342 return $records->getCount();
if(!Loader::includeModule('messageservice')) $provider
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static unlinkChat($params)
static getGroupChatAvailable($groupId=false)
static getNumberOfMembers(int $groupId)
static setChatManagers($params)
static createChat($params)
static buildChatName($groupName, $params=[])
static getChatData($params)
static createChat(Workgroup $group)
static getChatTitle(string $groupTitle, ?Type $groupType)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(empty($signedUserToken)) $key
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']