- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
- Класс: CIMDisk
- Вызов: CIMDisk::DeleteFile
static function DeleteFile($chatId, $fileId)
{
if ((int)$chatId <= 0 || (int)$fileId <= 0)
{
return false;
}
$chatRelation = CIMChat::GetRelationById($chatId, false, true, false);
if (!$chatRelation[self::GetUserId()])
{
return false;
}
$folderModel = self::getFolderModel($chatId, false);
if (!$folderModel)
{
return false;
}
$fileModel = BitrixDiskFile::getById($fileId);
if (!$fileModel || $fileModel->getParentId() != $folderModel->getId())
{
return false;
}
/** global CUser $USER */
global $USER;
if (
$fileModel->getCreatedBy() == self::GetUserId()
|| $USER->IsAdmin()
)
{
// allow deleting only owned files
$fileModel->delete(self::GetUserId());
$notifyUsers = array_keys($chatRelation);
}
else
{
$driver = BitrixDiskDriver::getInstance();
$rightsManager = $driver->getRightsManager();
// hide file from user by access disabling
$accessCodes = [
// keep previous scheme with Uxx access code
[
'ACCESS_CODE' => 'U'.self::GetUserId(),
'TASK_ID' => $rightsManager->getTaskIdByName($rightsManager::TASK_FULL),
'NEGATIVE' => 1,
]
];
$rightsManager->append($fileModel, $accessCodes);
$notifyUsers = [self::GetUserId()];
}
$fileService = new IMV2LinkFileFileService();
if (BitrixMainLoader::includeModule('pull') && !$fileService->isMigrationFinished())
{
$pullMessage = Array(
'module_id' => 'im',
'command' => 'fileDelete',
'params' => Array(
'chatId' => $chatId,
'fileId' => $fileId
),
'extra' => BitrixImCommon::getPullExtra()
);
BitrixPullEvent::add($notifyUsers, $pullMessage);
$orm = BitrixImModelChatTable::getById($chatId);
$chat = $orm->fetch();
if ($chat['TYPE'] == IM_MESSAGE_OPEN || $chat['TYPE'] == IM_MESSAGE_OPEN_LINE)
{
CPullWatch::AddToStack('IM_PUBLIC_'.$chat['ID'], $pullMessage);
}
}
return true;
}