• Модуль: 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;
}