3namespace Bitrix\Im\V2\Message\Delete\Strategy;
5use Bitrix\Disk\SystemUser;
7use Bitrix\Im\V2\Common\ContextCustomer;
8use Bitrix\Im\V2\Entity\File\FileItem;
9use Bitrix\Im\V2\Link\File\FileService;
10use Bitrix\Im\V2\Message\Delete\DeletionMode;
11use Bitrix\Im\V2\MessageCollection;
12use Bitrix\Im\V2\Result;
13use Bitrix\Im\V2\Sync\Event;
14use Bitrix\Im\V2\Sync\Logger;
32 return match ($deletionMode)
53 abstract protected function execute(): void;
57 $ids = $this->messages->getIds();
61 Logger::getInstance()->add(
63 fn () => $this->chat->getRelations()->getUserIds(),
69 protected function deleteFiles(): void
71 $messageIdsToDeleteLinks = [];
73 foreach ($this->messages as
$message)
80 $needToDeleteLink =
true;
85 foreach (
$message->getFiles() as $file)
87 $diskFile = $file->getDiskFile();
88 $contextUserId = $this->getContext()->getUserId();
90 if (!isset($diskFile))
96 (
int)$diskFile->getCreatedBy() === $contextUserId
97 && (
int)$diskFile->getParentId() === $this->chat->getDiskFolderId()
98 && $diskFile->delete(SystemUser::SYSTEM_USER_ID)
105 $needToDeleteLink =
false;
109 if ($needToDeleteLink)
111 $messageIdsToDeleteLinks[] =
$message->getId();
115 (
new FileService())->deleteFilesByMessageIds($messageIdsToDeleteLinks);
MessageCollection $messages
static getInstance(MessageCollection $messages, DeletionMode $deletionMode)
__construct(MessageCollection $messages)
checkResult(Result $result)