Пример #1
0
 function onExecuteStartWriting(\Bitrix\Main\Event $event)
 {
     $parameters = $event->getParameters();
     $userId = $parameters[0];
     $dialogId = $parameters[1] . $parameters[2];
     if ($userId > 0) {
         if (!\Bitrix\Main\Loader::includeModule('pull')) {
             return;
         }
         \CPushManager::DeleteFromQueueBySubTag($userId, 'IM_MESS');
         if (intval($dialogId) > 0) {
             \CPullStack::AddByUser($dialogId, array('module_id' => 'im', 'command' => 'startWriting', 'expiry' => 60, 'params' => array('senderId' => $userId, 'dialogId' => $dialogId)));
         } elseif (substr($dialogId, 0, 4) == 'chat') {
             $chatId = substr($dialogId, 4);
             $arRelation = \CIMChat::GetRelationById($chatId);
             unset($arRelation[$userId]);
             $pullMessage = array('module_id' => 'im', 'command' => 'startWriting', 'expiry' => 60, 'params' => array('senderId' => $userId, 'dialogId' => $dialogId));
             \CPullStack::AddByUsers(array_keys($arRelation), $pullMessage);
             $orm = \Bitrix\Im\ChatTable::getById($chatId);
             $chat = $orm->fetch();
             if ($chat['TYPE'] == IM_MESSAGE_OPEN) {
                 \CPullWatch::AddToStack('IM_PUBLIC_' . $chatId, $pullMessage);
             }
         }
     }
 }
Пример #2
0
 public static function SetRecent($arParams)
 {
     $itemId = intval($arParams['ENTITY_ID']);
     $messageId = intval($arParams['MESSAGE_ID']);
     if ($itemId <= 0) {
         return false;
     }
     $userId = intval($arParams['USER_ID']);
     if ($userId <= 0) {
         $userId = (int) $GLOBALS['USER']->GetID();
     }
     $chatType = IM_MESSAGE_PRIVATE;
     if (isset($arParams['CHAT_TYPE']) && in_array($arParams['CHAT_TYPE'], array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT))) {
         $chatType = $arParams['CHAT_TYPE'];
     } else {
         if (isset($arParams['CHAT_ID'])) {
             $orm = IM\ChatTable::getById($arParams['CHAT_ID']);
             if ($chatData = $orm->fetch()) {
                 $chatType = $chatData['TYPE'];
             }
         }
     }
     $isChat = in_array($chatType, array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT));
     if (!$isChat && $userId == $itemId) {
         return false;
     }
     global $DB;
     $strSQL = "\n\t\t\tINSERT INTO b_im_recent (USER_ID, ITEM_TYPE, ITEM_ID, ITEM_MID)\n\t\t\tVALUES (" . $userId . ", '" . $chatType . "', " . $itemId . ", " . $messageId . ")\n\t\t\tON DUPLICATE KEY UPDATE ITEM_MID = " . $messageId . "\n\t\t";
     $DB->Query($strSQL, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     $obCache = new CPHPCache();
     $obCache->CleanDir('/bx/imc/recent' . CIMMessenger::GetCachePath($userId));
     if ($isChat) {
         CIMMessenger::SpeedFileDelete($userId, IM_SPEED_GROUP);
     } else {
         CIMMessenger::SpeedFileDelete($userId, IM_SPEED_MESSAGE);
     }
     return true;
 }
Пример #3
0
 public function GetLastMessage($toChatId, $fromUserId = false, $loadExtraData = false, $bTimeZone = true, $limit = true)
 {
     global $DB;
     $fromUserId = IntVal($fromUserId);
     if ($fromUserId <= 0) {
         $fromUserId = $this->user_id;
     }
     $toChatId = IntVal($toChatId);
     if ($toChatId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_CHAT_ID"), "ERROR_TO_CHAT_ID");
         return false;
     }
     $orm = IM\ChatTable::getById($toChatId);
     if (!($chatData = $orm->fetch())) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_CHAT_NOT_EXISTS"), "ERROR_CHAT_NOT_EXISTS");
         return false;
     }
     if ($limit) {
         $dbType = strtolower($DB->type);
         if ($dbType == "mysql") {
             $sqlLimit = " AND M.DATE_CREATE > DATE_SUB(NOW(), INTERVAL 30 DAY)";
         } else {
             if ($dbType == "mssql") {
                 $sqlLimit = " AND M.DATE_CREATE > dateadd(day, -30, getdate())";
             } else {
                 if ($dbType == "oracle") {
                     $sqlLimit = " AND M.DATE_CREATE > SYSDATE-30";
                 }
             }
         }
     }
     $limitById = '';
     $ar = \CIMChat::GetRelationById($toChatId, $fromUserId);
     if ($ar && $ar['START_ID'] > 0) {
         $limitById = 'AND M.ID >= ' . intval($ar['START_ID']);
     }
     if (!$bTimeZone) {
         CTimeZone::Disable();
     }
     if ($chatData['TYPE'] == IM_MESSAGE_OPEN) {
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tM.ID,\n\t\t\t\t\tM.CHAT_ID,\n\t\t\t\t\tM.MESSAGE,\n\t\t\t\t\t" . $DB->DatetimeToTimestampFunction('M.DATE_CREATE') . " DATE_CREATE,\n\t\t\t\t\tM.AUTHOR_ID,\n\t\t\t\t\tC.TYPE CHAT_TYPE,\n\t\t\t\t\tR.USER_ID RID\n\t\t\t\tFROM b_im_message M\n\t\t\t\tINNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.TYPE = '" . IM_MESSAGE_OPEN . "'\n\t\t\t\tLEFT JOIN b_im_relation R ON R.CHAT_ID = M.CHAT_ID AND R.USER_ID = " . $fromUserId . "\n\t\t\t\tWHERE\n\t\t\t\t\tM.CHAT_ID = " . $toChatId . "\n\t\t\t\t\t" . $limitById . "\n\t\t\t\t\t#LIMIT#\n\t\t\t\tORDER BY M.DATE_CREATE DESC\n\t\t\t";
     } else {
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tM.ID,\n\t\t\t\t\tM.CHAT_ID,\n\t\t\t\t\tM.MESSAGE,\n\t\t\t\t\t" . $DB->DatetimeToTimestampFunction('M.DATE_CREATE') . " DATE_CREATE,\n\t\t\t\t\tM.AUTHOR_ID,\n\t\t\t\t\tC.TYPE CHAT_TYPE,\n\t\t\t\t\tR1.USER_ID RID\n\t\t\t\tFROM b_im_message M\n\t\t\t\tINNER JOIN b_im_relation R1 ON M.CHAT_ID = R1.CHAT_ID\n\t\t\t\tINNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.TYPE = '" . IM_MESSAGE_CHAT . "'\n\t\t\t\tWHERE\n\t\t\t\t\tR1.CHAT_ID = " . $toChatId . " AND R1.USER_ID = " . $fromUserId . "\n\t\t\t\t\t" . $limitById . "\n\t\t\t\t\t#LIMIT#\n\t\t\t\tORDER BY M.DATE_CREATE DESC\n\t\t\t";
     }
     $strSql = $DB->TopSql($strSql, 20);
     if (!$bTimeZone) {
         CTimeZone::Enable();
     }
     if ($limit) {
         $dbRes = $DB->Query(str_replace("#LIMIT#", $sqlLimit, $strSql), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (!$dbRes->SelectedRowsCount()) {
             $dbRes = $DB->Query(str_replace("#LIMIT#", "", $strSql), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     } else {
         $dbRes = $DB->Query(str_replace("#LIMIT#", "", $strSql), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     CIMStatus::Set($fromUserId, array('IDLE' => null));
     $chatType = IM_MESSAGE_CHAT;
     $chatRelationUserId = 0;
     $arMessages = array();
     $arMessageId = array();
     $arUsersMessage = array();
     $CCTP = new CTextParser();
     $CCTP->MaxStringLen = 200;
     $CCTP->allow = array("HTML" => "N", "ANCHOR" => $this->bHideLink ? "N" : "Y", "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => $this->bHideLink ? "N" : "Y", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");
     while ($arRes = $dbRes->Fetch()) {
         $chatType = $arRes['CHAT_TYPE'];
         $chatRelationUserId = intval($arRes['RID']);
         $arMessages[$arRes['ID']] = array('id' => $arRes['ID'], 'chatId' => $arRes['CHAT_ID'], 'senderId' => $arRes['AUTHOR_ID'], 'recipientId' => $arRes['CHAT_ID'], 'date' => $arRes['DATE_CREATE'], 'text' => $CCTP->convertText(htmlspecialcharsbx($arRes['MESSAGE'])));
         $arMessageId[] = $arRes['ID'];
         $arUsersMessage[$arRes['CHAT_ID']][] = $arRes['ID'];
     }
     if ($chatType == IM_MESSAGE_OPEN && $chatRelationUserId <= 0) {
         if (IM\User::getInstance($fromUserId)->isExtranet()) {
             $arMessages = array();
             $arMessageId = array();
             $arUsersMessage = array();
             $loadExtraData = false;
         } else {
             if (CModule::IncludeModule('pull')) {
                 CPullWatch::Add($fromUserId, 'IM_PUBLIC_' . $toChatId, true);
             }
         }
     }
     $params = CIMMessageParam::Get($arMessageId);
     $arFiles = array();
     foreach ($params as $messageId => $param) {
         $arMessages[$messageId]['params'] = $param;
         if (isset($param['FILE_ID'])) {
             foreach ($param['FILE_ID'] as $fileId) {
                 $arFiles[$fileId] = $fileId;
             }
         }
     }
     $arChatFiles = CIMDisk::GetFiles($toChatId, $arFiles);
     $arResult = array('chatId' => $toChatId, 'message' => $arMessages, 'usersMessage' => $arUsersMessage, 'users' => array(), 'userInGroup' => array(), 'woUserInGroup' => array(), 'files' => $arChatFiles);
     if (is_array($loadExtraData) || is_bool($loadExtraData) && $loadExtraData == true) {
         $bDepartment = true;
         if (is_array($loadExtraData) && $loadExtraData['DEPARTMENT'] == 'N') {
             $bDepartment = false;
         }
         $arChat = self::GetChatData(array('ID' => $toChatId, 'USE_CACHE' => 'N'));
         if ($arChat['chat'][$toChatId]['messageType'] == IM_MESSAGE_OPEN || in_array($fromUserId, $arChat['userInChat'][$toChatId])) {
             $arResult['userInChat'] = $arChat['userInChat'];
             $arResult['userChatBlockStatus'] = $arChat['userChatBlockStatus'];
             $ar = CIMContactList::GetUserData(array('ID' => $arChat['userInChat'][$toChatId], 'DEPARTMENT' => $bDepartment ? 'Y' : 'N', 'USE_CACHE' => 'N'));
             $arResult['users'] = $ar['users'];
             $arResult['userInGroup'] = $ar['userInGroup'];
             $arResult['woUserInGroup'] = $ar['woUserInGroup'];
             if ($arChat['chat'][$toChatId]['extranet'] === "") {
                 $isExtranet = false;
                 foreach ($ar['users'] as $userData) {
                     if ($userData['extranet']) {
                         $isExtranet = true;
                         break;
                     }
                 }
                 IM\ChatTable::update($toChatId, array('EXTRANET' => $isExtranet ? "Y" : "N"));
                 $arChat['chat'][$toChatId]['extranet'] = $isExtranet;
             }
             $arResult['chat'] = $arChat['chat'];
         }
     }
     return $arResult;
 }
Пример #4
0
 /**
  * Method will be invoked after new database record inserted.
  *
  * @param array $newRecord All fields of inserted record.
  *
  * @return void
  */
 public function afterInsertTrigger(array $newRecord)
 {
     $arParams = array();
     $chatId = $newRecord['CHAT_ID'];
     $arRel = \CIMChat::GetRelationById($chatId);
     $arFields['MESSAGE_TYPE'] = '';
     foreach ($arRel as $rel) {
         $arFields['MESSAGE_TYPE'] = $rel["MESSAGE_TYPE"];
         break;
     }
     $arFields['PARAMS'] = array();
     $arFields['FILES'] = array();
     //CUserCounter::Increment($arFields['TO_USER_ID'], 'im_message_v2', '**', false);
     if ($arFields['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE) {
         foreach ($arRel as $rel) {
             if ($rel['USER_ID'] == $newRecord['AUTHOR_ID']) {
                 $arFields['FROM_USER_ID'] = $rel['USER_ID'];
             } else {
                 $arFields['TO_USER_ID'] = $rel['USER_ID'];
             }
         }
         \CIMContactList::SetRecent(array('ENTITY_ID' => $arFields['TO_USER_ID'], 'MESSAGE_ID' => $newRecord['ID'], 'CHAT_TYPE' => IM_MESSAGE_PRIVATE, 'USER_ID' => $arFields['FROM_USER_ID']));
         \CIMContactList::SetRecent(array('ENTITY_ID' => $arFields['FROM_USER_ID'], 'MESSAGE_ID' => $newRecord['ID'], 'CHAT_TYPE' => IM_MESSAGE_PRIVATE, 'USER_ID' => $arFields['TO_USER_ID']));
         if (\CModule::IncludeModule('pull')) {
             $pullMessage = array('module_id' => 'im', 'command' => 'message', 'params' => \CIMMessage::GetFormatMessage(array('ID' => $newRecord['ID'], 'CHAT_ID' => $chatId, 'TO_USER_ID' => $arFields['TO_USER_ID'], 'FROM_USER_ID' => $arFields['FROM_USER_ID'], 'SYSTEM' => $newRecord['NOTIFY_EVENT'] == 'private_system' ? 'Y' : 'N', 'MESSAGE' => $newRecord['MESSAGE'], 'DATE_CREATE' => time(), 'PARAMS' => $arFields['PARAMS'], 'FILES' => $arFields['FILES'])));
             $pullMessageTo = $pullMessage;
             if (\CPullOptions::GetPushStatus()) {
                 if (\CIMSettings::GetNotifyAccess($arFields["TO_USER_ID"], 'im', 'message', \CIMSettings::CLIENT_PUSH)) {
                     $pushParams = \CIMMessenger::PreparePushForPrivate(array('FROM_USER_ID' => $arFields['FROM_USER_ID'], 'MESSAGE' => $newRecord['MESSAGE'], 'SYSTEM' => $arFields['SYSTEM'], 'FILES' => $arFields['FILES']));
                     $pullMessageTo = array_merge($pullMessage, $pushParams);
                 }
             }
             \CPullStack::AddByUser($arFields['TO_USER_ID'], $pullMessageTo);
             \CPullStack::AddByUser($arFields['FROM_USER_ID'], $pullMessage);
             \CPushManager::DeleteFromQueueBySubTag($arFields['FROM_USER_ID'], 'IM_MESS');
             //self::SendBadges($arFields['TO_USER_ID']);
         }
     } else {
         if ($arFields['MESSAGE_TYPE'] == IM_MESSAGE_CHAT || $arFields['MESSAGE_TYPE'] == IM_MESSAGE_OPEN) {
             foreach ($arRel as $relation) {
                 \CIMContactList::SetRecent(array('ENTITY_ID' => $relation['CHAT_ID'], 'MESSAGE_ID' => $newRecord['ID'], 'CHAT_TYPE' => $relation['MESSAGE_TYPE'], 'USER_ID' => $relation['USER_ID']));
             }
             if (\CModule::IncludeModule('pull')) {
                 $pullMessage = array('module_id' => 'im', 'command' => 'messageChat', 'params' => \CIMMessage::GetFormatMessage(array('ID' => $newRecord['ID'], 'CHAT_ID' => $chatId, 'TO_CHAT_ID' => $chatId, 'FROM_USER_ID' => $newRecord['AUTHOR_ID'], 'MESSAGE' => $newRecord['MESSAGE'], 'SYSTEM' => $newRecord['AUTHOR_ID'] > 0 ? 'N' : 'Y', 'DATE_CREATE' => time(), 'PARAMS' => $arFields['PARAMS'], 'FILES' => $arFields['FILES'])));
                 $chat = \Bitrix\Im\ChatTable::getById($chatId);
                 $chatData = $chat->fetch();
                 if ($chatData && \CPullOptions::GetPushStatus()) {
                     $pushParams = \CIMMessenger::PreparePushForChat(array('CHAT_ID' => $chatId, 'CHAT_TITLE' => $chatData['TITLE'], 'FROM_USER_ID' => $newRecord['AUTHOR_ID'], 'MESSAGE' => $newRecord['MESSAGE'], 'SYSTEM' => $newRecord['AUTHOR_ID'] > 0 ? 'N' : 'Y', 'FILES' => $arFields['FILES']));
                     $pullMessage = array_merge($pullMessage, $pushParams);
                 }
                 $pullUsers = array();
                 $pullUsersSkip = array();
                 foreach ($arRel as $rel) {
                     $pullUsers[] = $rel['USER_ID'];
                     if ($rel['USER_ID'] == $newRecord['AUTHOR_ID']) {
                         $pullUsersSkip[] = $rel['USER_ID'];
                         \CPushManager::DeleteFromQueueBySubTag($newRecord['AUTHOR_ID'], 'IM_MESS');
                     } else {
                         if ($rel['NOTIFY_BLOCK'] == 'Y' || !\CIMSettings::GetNotifyAccess($rel['USER_ID'], 'im', $arFields['MESSAGE_TYPE'] == IM_MESSAGE_OPEN ? 'openChat' : 'chat', \CIMSettings::CLIENT_PUSH)) {
                             $pullUsersSkip[] = $rel['USER_ID'];
                         }
                     }
                 }
                 $pullMessage['push']['skip_users'] = $pullUsersSkip;
                 \CPullStack::AddByUsers($pullUsers, $pullMessage);
                 if ($arFields['MESSAGE_TYPE'] == IM_MESSAGE_OPEN) {
                     \CPullWatch::AddToStack('IM_PUBLIC_' . $chatId, $pullMessage);
                 }
                 /* TODO uncomment after fix mantis:66363
                 			\CIMMessenger::SendMention(Array(
                 				'CHAT_ID' => $chatId,
                 				'CHAT_TITLE' => $chatData['TITLE'],
                 				'CHAT_RELATION' => $arRel,
                 				'CHAT_TYPE' => $chatData['TYPE'],
                 				'MESSAGE' => $newRecord['MESSAGE'],
                 				'FILES' => $arFields['FILES'],
                 				'FROM_USER_ID' => $newRecord['AUTHOR_ID'],
                 			));
                 			*/
                 //\CIMMessenger::SendBadges($usersForBadges);
                 foreach (\GetModuleEvents("im", "OnAfterMessagesAdd", true) as $arEvent) {
                     \ExecuteModuleEventEx($arEvent, array($newRecord['ID'], $newRecord));
                 }
             }
         }
     }
 }
Пример #5
0
 public static function ChangeFolderMembers($chatId, $userId, $append = true)
 {
     $folderModel = self::GetFolderModel($chatId);
     if (!$folderModel) {
         return false;
     }
     $result = IM\ChatTable::getById($chatId);
     if (!($chat = $result->fetch())) {
         return false;
     }
     if (!is_array($userId)) {
         $userIds = array($userId);
     } else {
         $userIds = $userId;
     }
     $driver = \Bitrix\Disk\Driver::getInstance();
     $rightsManager = $driver->getRightsManager();
     if ($append) {
         $fullAccessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_FULL);
         $accessCodes = array();
         if ($chat['TYPE'] == IM_MESSAGE_OPEN) {
             $users = CIMContactList::GetUserData(array('ID' => array_values($userIds), 'DEPARTMENT' => 'N', 'SHOW_ONLINE' => 'N'));
             foreach ($users['users'] as $userData) {
                 if ($userData['extranet']) {
                     $accessCodes[] = array('ACCESS_CODE' => 'U' . $userData['id'], 'TASK_ID' => $fullAccessTaskId);
                 }
             }
         } else {
             foreach ($userIds as $userId) {
                 $userId = intval($userId);
                 if ($userId <= 0) {
                     continue;
                 }
                 $accessCodes[] = array('ACCESS_CODE' => 'U' . $userId, 'TASK_ID' => $fullAccessTaskId);
             }
         }
         if (count($accessCodes) <= 0) {
             return false;
         }
         $result = $rightsManager->append($folderModel, $accessCodes);
     } else {
         $accessCodes = array();
         if ($chat['TYPE'] == IM_MESSAGE_OPEN) {
             $users = CIMContactList::GetUserData(array('ID' => array_values($userIds), 'DEPARTMENT' => 'N', 'SHOW_ONLINE' => 'N'));
             foreach ($users['users'] as $userData) {
                 if ($userData['extranet']) {
                     $accessCodes[] = 'U' . $userData['id'];
                 }
             }
         } else {
             foreach ($userIds as $userId) {
                 $userId = intval($userId);
                 if ($userId <= 0) {
                     continue;
                 }
                 $accessCodes[] = 'U' . $userId;
             }
         }
         $result = $rightsManager->revokeByAccessCodes($folderModel, $accessCodes);
     }
     return $result;
 }
Пример #6
0
 public function Join($chatId)
 {
     $chatId = intval($chatId);
     if ($chatId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_CHAT_ID"), "EMPTY_CHAT_ID");
         return false;
     }
     $orm = IM\ChatTable::getById($chatId);
     if (!($chatData = $orm->fetch())) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_CHAT_NOT_EXISTS"), "ERROR_CHAT_NOT_EXISTS");
         return false;
     }
     if ($chatData['TYPE'] != IM_MESSAGE_OPEN) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_ACCESS_JOIN"), "ACCESS_JOIN");
         return false;
     }
     if (IM\User::getInstance($this->user_id)->isExtranet()) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_ACCESS_JOIN"), "ACCESS_JOIN");
         return false;
     }
     $chat = new CIMChat(0);
     $chat->AddUser($chatId, $this->user_id);
     return true;
 }
Пример #7
0
	public static function GetFolderModel($chatId)
	{
		if (!self::Enabled())
			return false;

		$folderModel = false;

		$result = Im\ChatTable::getById($chatId);
		if (!$chat = $result->fetch())
			return false;

		$folderId = intval($chat['DISK_FOLDER_ID']);
		if ($folderId > 0)
		{
			$folderModel = \Bitrix\Disk\Folder::getById($folderId);
			if (!$folderModel || $folderModel->getStorageId() != self::GetStorageId())
			{
				$folderId = 0;
			}
		}

		if (!$folderId)
		{
			$driver = \Bitrix\Disk\Driver::getInstance();
			$storageModel = self::GetStorage();
			if (!$storageModel)
			{
				return false;
			}

			$rightsManager = $driver->getRightsManager();
			$fullAccessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_FULL);

			$accessCodes = array();
			$accessCodes[] = Array(
				'ACCESS_CODE' => 'AU',
				'TASK_ID' => $fullAccessTaskId,
				'NEGATIVE' => 1
			);

			$chatRelation = CIMChat::GetRelationById($chatId);
			foreach ($chatRelation as $relation)
			{
				$accessCodes[] = Array(
					'ACCESS_CODE' => 'U'.$relation['USER_ID'],
					'TASK_ID' => $fullAccessTaskId
				);
			}

			$folderModel = $storageModel->addFolder(array('NAME' => 'chat'.$chatId, 'CREATED_BY' => self::GetUserId()), $accessCodes);
			if ($folderModel)
				Im\ChatTable::update($chatId, Array('DISK_FOLDER_ID' => $folderModel->getId()));
		}

		return $folderModel;
	}
Пример #8
0
 public static function SetRecent($arParams)
 {
     global $USER;
     $itemId = intval($arParams['ENTITY_ID']);
     $messageId = intval($arParams['MESSAGE_ID']);
     if ($itemId <= 0) {
         return false;
     }
     $userId = intval($arParams['USER_ID']);
     if ($userId <= 0) {
         $userId = (int) $USER->GetID();
     }
     $chatType = IM_MESSAGE_PRIVATE;
     if (isset($arParams['CHAT_TYPE']) && in_array($arParams['CHAT_TYPE'], array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT))) {
         $chatType = $arParams['CHAT_TYPE'];
     } else {
         if (isset($arParams['CHAT_ID'])) {
             $orm = IM\ChatTable::getById($arParams['CHAT_ID']);
             if ($chatData = $orm->fetch()) {
                 $chatType = $chatData['TYPE'];
             }
         }
     }
     $isChat = in_array($chatType, array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT));
     if (!$isChat && $userId == $itemId) {
         return false;
     }
     $connection = \Bitrix\Main\Application::getInstance()->getConnection();
     $isUserAlreadyInRecent = $connection->queryScalar("SELECT 1 FROM b_im_recent WHERE USER_ID = " . $userId);
     $merge = $connection->getSqlHelper()->prepareMerge("b_im_recent", array('USER_ID', 'ITEM_TYPE', 'ITEM_ID'), array('USER_ID' => $userId, 'ITEM_TYPE' => $chatType, 'ITEM_ID' => $itemId, 'ITEM_MID' => $messageId), array('ITEM_MID' => $messageId));
     if ($merge && $merge[0] != "") {
         $connection->query($merge[0]);
     }
     $obCache = new CPHPCache();
     $obCache->CleanDir('/bx/imc/recent' . CIMMessenger::GetCachePath($userId));
     if ($isChat) {
         CIMMessenger::SpeedFileDelete($userId, IM_SPEED_GROUP);
     } else {
         CIMMessenger::SpeedFileDelete($userId, IM_SPEED_MESSAGE);
     }
     if (!$isUserAlreadyInRecent) {
         $event = new \Bitrix\Main\Event("im", "OnAfterRecentAdd", array("user_id" => $userId));
         $event->send();
     }
     return true;
 }
Пример #9
0
 public static function PreparePushForChat($params)
 {
     $params['CHAT_ID'] = intval($params['CHAT_ID']);
     if ($params['CHAT_ID'] <= 0) {
         return false;
     }
     if (!isset($params['CHAT_TITLE'])) {
         $orm = \Bitrix\Im\ChatTable::getById($params['CHAT_ID']);
         $chat = $orm->fetch();
         if (!$chat) {
             return false;
         }
         $params['CHAT_TITLE'] = $chat['TITLE'];
     }
     $params['CHAT_TITLE'] = substr(htmlspecialcharsback($params['CHAT_TITLE']), 0, 32);
     if ($params['SYSTEM'] == 'Y') {
         $pushText = $params['CHAT_TITLE'] . ': ' . $params['MESSAGE'];
     } else {
         $userName = \Bitrix\Im\User::getInstance($params['FROM_USER_ID'])->getName();
         if (!$userName) {
             return false;
         }
         $pushText = GetMessage('IM_PUSH_GROUP_TITLE', array('#USER#' => $userName, '#GROUP#' => $params['CHAT_TITLE'])) . ': ' . $params['MESSAGE'];
     }
     $pushText = self::PrepareMessageForPush(array('MESSAGE' => $pushText, 'FILES' => $params['FILES'], 'ATTACH' => empty($params['MESSAGE']) && $params['ATTACH']));
     if (strlen($pushText) <= 0) {
         return false;
     }
     $result = array();
     $result['push']['params'] = array('TAG' => 'IM_CHAT_' . $params['CHAT_ID'], 'CATEGORY' => 'ANSWER', 'URL' => SITE_DIR . 'mobile/ajax.php?mobile_action=im_answer', 'PARAMS' => array('RECIPIENT_ID' => 'chat' . $params['CHAT_ID']));
     $result['push']['tag'] = 'IM_CHAT_' . $params['CHAT_ID'];
     $result['push']['sub_tag'] = 'IM_MESS';
     $result['push']['app_id'] = 'Bitrix24';
     $result['push']['message'] = $pushText;
     return $result;
 }