3namespace Bitrix\Im\V2\Link\Task;
5use Bitrix\Disk\Uf\FileUserType;
7use Bitrix\Im\Model\LinkTaskTable;
9use Bitrix\Im\V2\Common\ContextCustomer;
10use Bitrix\Im\V2\Link\File\TemporaryFileService;
11use Bitrix\Im\V2\Link\Push;
12use Bitrix\Im\V2\Message;
13use Bitrix\Im\V2\Entity\Task\TaskError;
14use Bitrix\Im\V2\RelationCollection;
15use Bitrix\Im\V2\Result;
16use Bitrix\Main\Loader;
17use Bitrix\Main\Localization\Loc;
18use Bitrix\Main\Security\Sign\Signer;
19use Bitrix\Main\Web\Json;
20use Bitrix\Main\Web\Uri;
21use Bitrix\Tasks\Slider\Path\PathMaker;
22use Bitrix\Tasks\Slider\Path\TaskPathMaker;
37 $userId = $this->getContext()->getUserId();
40 $taskLink->setEntity($taskItem)->setChatId($chatId)->setAuthorId(
$userId);
49 if (!$sendMessageResult->isSuccess())
51 $result->addErrors($sendMessageResult->getErrors());
54 $systemMessageId = $sendMessageResult->getResult();
56 $taskLink->setMessageId(
$messageId ?: $systemMessageId);
57 $saveResult = $taskLink->save();
59 if (!$saveResult->isSuccess())
61 return $result->addErrors($saveResult->getErrors());
65 ->setContext($this->context)
66 ->sendFull($taskLink, self::ADD_TASK_EVENT, [
'RECIPIENT' => $taskItem->getMembersIds()])
76 if ($taskItem ===
null)
87 ->setContext($this->context)
88 ->sendIdOnly($task, self::DELETE_TASK_EVENT, [
'CHAT_ID' => $task->
getChatId()])
102 if ($taskItem ===
null)
108 ->setContext($this->context)
109 ->sendFull($taskItem, self::UPDATE_TASK_EVENT, [
'RECIPIENT' => $taskEntity->getMembersIds()])
119 $saveResult = $taskItem->
save();
121 if (!$saveResult->isSuccess())
123 return $result->addErrors($saveResult->getErrors());
127 ->setContext($this->context)
128 ->sendFull($taskItem, self::UPDATE_TASK_EVENT, [
'RECIPIENT' => $taskItem->
getEntity()->getMembersIds()])
138 if ($taskCollection->
count() === 0)
143 $saveResult = $taskCollection->save();
145 if (!$saveResult->isSuccess())
147 return $result->addErrors($saveResult->getErrors());
152 foreach ($taskCollection as $task)
154 $pushRecipient = [
'RECIPIENT' => $task->getEntity()->getMembersIds()];
156 ->setContext($this->context)
157 ->sendFull($task, self::UPDATE_TASK_EVENT, $pushRecipient)
166 LinkTaskTable::deleteByFilter([
'=TASK_ID' => $taskId]);
175 if (!Loader::includeModule(
'tasks'))
180 $userId = $this->getContext()->getUserId();
182 $chat->setContext($this->context);
184 $data = [
'PARAMS' => []];
186 $taskPath = (
new TaskPathMaker(0, PathMaker::EDIT_ACTION,
$userId))->makeEntityPath();
187 $link =
new Uri($taskPath);
190 'ta_el' =>
'comment_context_menu',
193 $data[
'LINK'] = $link->getUri();
196 $data[
'PARAMS'][
'IM_CHAT_ID'] = $chat->getChatId();
198 if ($chat->getEntityType() !==
'SONET_GROUP')
203 if ($chat->getEntityType() ===
'SONET_GROUP')
205 $data[
'PARAMS'][
'GROUP_ID'] = (int)$chat->getEntityId();
210 $entityData = explode(
'|', $chat->getEntityData1() ??
'');
211 if (isset($entityData[0], $entityData[1], $entityData[2]) && $entityData[0] ===
'Y')
213 $crmType = \CCrmOwnerTypeAbbr::ResolveByTypeID(\CCrmOwnerType::ResolveID($entityData[1]));
214 $data[
'PARAMS'][
'UF_CRM_TASK'] = $crmType.
'_'.$entityData[2];
220 $message->setContext($this->context);
222 'CHAT_ID' => $chat->getChatId(),
223 'MESSAGE_ID' =>
$message->getMessageId(),
224 'MESSAGE_TYPE' => $chat->
getType(),
225 'MESSAGE' =>
$message->getMessage(),
226 'AUTHOR_ID' =>
$message->getAuthorId(),
227 'FILES' => $this->getFilesForPrepareText(
$message)
236 $diskFileUFCode = \Bitrix\Tasks\Integration\Disk\UserField::getMainSysUFCode();
237 $data[
'PARAMS'][$diskFileUFCode] = $fileIds;
239 $data[
'PARAMS'][$diskFileUFCode .
'_SIGN'] = $signer->sign(Json::encode($fileIds), static::SIGNATURE_SALT);
240 $data[
'PARAMS'][$diskFileUFCode .
'_DATA'] =
$files;
253 $authorId = $this->getContext()->getUserId();
256 'DIALOG_ID' => $dialogId,
259 'FROM_USER_ID' => $authorId,
260 'PARAMS' => [
'CLASS' =>
"bx-messenger-content-item-system"],
261 'URL_PREVIEW' =>
'N',
262 'SKIP_CONNECTOR' =>
'Y',
263 'SKIP_COMMAND' =>
'Y',
264 'SILENT_CONNECTOR' =>
'Y',
265 'SKIP_URL_INDEX' =>
'Y',
284 $copies =
$message->getFiles()->copyToOwnUploadedFiles()->getResult();
293 foreach ($copies as $file)
295 $fileData = $file->toRestFormat();
297 'id' => FileUserType::NEW_FILE_PREFIX . $file->getId(),
298 'objectId' => $fileData[
'viewerAttrs'][
'objectId'],
299 'name' => $fileData[
'name'],
300 'type' => $fileData[
'extension'],
301 'url' => $fileData[
'urlShow'],
302 'height' => $fileData[
'image'][
'height'] ?? 0,
303 'width' => $fileData[
'image'][
'width'] ?? 0,
304 'preview_url' => $fileData[
'urlPreview'],
316 if (isset($file[
'id']))
318 $fileIds[] = $file[
'id'];
330 'ONLY_INTERNAL_TYPE' =>
true,
331 'CHAT_ID' => $chat->getId(),
332 'IS_HIDDEN' =>
false,
333 'ONLY_INTRANET' =>
true,
334 '!USER_ID' => $this->getContext()->getUserId()
337 select: [
'ID',
'USER_ID',
'CHAT_ID']
344 $filesForPrepare = [];
348 $filesForPrepare[] = [
'name' => $file->getDiskFile()->getName()];
351 return $filesForPrepare;
356 $genderModifier = ($this->getContext()->getUser()->getGender() ===
'F') ?
'_F' :
'';
361 $text .= Loc::getMessage(
362 'IM_CHAT_TASK_REGISTER_FROM_MESSAGE_NOTIFICATION' . $genderModifier .
'_MSGVER_1',
364 '#LINK#' => $task->
getEntity()->getUrl(),
365 '#USER_ID#' => $this->getContext()->getUserId(),
373 return Loc::getMessage(
374 'IM_CHAT_TASK_REGISTER_FROM_CHAT_NOTIFICATION' . $genderModifier .
'_MSGVER_1',
376 '#LINK#' => $task->
getEntity()->getUrl(),
377 '#USER_ID#' => $this->getContext()->getUserId(),
378 '#TASK_TITLE#' => $task->
getEntity()->getTitle(),
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getType($chatData, bool $camelCase=true)
static getDialogId(int $chatId, $userId=null)
const TASKS_NOT_INSTALLED
const ADD_TASK_MESSAGE_FAILED
static cleanCache(int $taskId)
static getByEntity(\Bitrix\Im\V2\Entity\Task\TaskItem $entity)
updateTask(\Bitrix\Im\V2\Entity\Task\TaskItem $taskEntity)
deleteLinkByTaskId(int $taskId)
getMessageText(TaskItem $task)
sendMessageAboutTask(TaskItem $taskLink, int $chatId)
getFilesDataForTaskFromMessage(Message $message)
updateTaskLink(TaskItem $taskItem)
getFilesForPrepareText(Message $message)
unregisterTask(TaskItem $task, bool $saveDelete)
updateTaskLinks(TaskCollection $taskCollection)
getFilesIds(array $files)
unregisterTaskByEntity(\Bitrix\Im\V2\Entity\Task\TaskItem $taskEntity, bool $saveDelete)
registerTask(int $chatId, int $messageId, \Bitrix\Im\V2\Entity\Task\TaskItem $taskItem)
prepareDataForCreateSlider(Chat $chat, ?Message $message=null)
static find(array $filter, array $order=[], ?int $limit=null, ?Context $context=null, array $select=self::COMMON_FIELDS)
static PrepareText($quoteMessage)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)