• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/controller/file.php
  • Класс: BitrixDiskControllerFile
  • Вызов: File::addSharingAction
public function addSharingAction(DiskFile $file, $entity, $taskName)
{
	if (!DiskIntegrationBitrix24Manager::isFeatureEnabled('disk_file_sharing'))
	{
		$this->addError(new Error('Not allowed'));

		return null;
	}

	$currentUserId = $this->getCurrentUser()->getId();
	$securityContext = $file->getStorage()->getSecurityContext($currentUserId);
	if (!$file->canShare($securityContext))
	{
		$this->addError(new Error(Loc::getMessage('DISK_ERROR_MESSAGE_DENIED')));

		return null;
	}

	$rightsManager = Driver::getInstance()->getRightsManager();
	if (!$rightsManager->isValidTaskName($taskName))
	{
		$this->addError(new Error('Invalid task name'));

		return null;
	}

	$maxTaskName = $rightsManager->getPseudoMaxTaskByObjectForUser($file, $currentUserId);
	if ($rightsManager->pseudoCompareTaskName($taskName, $maxTaskName) > 0)
	{
		$this->addError(new Error(Loc::getMessage('DISK_ERROR_MESSAGE_DENIED')));

		return null;
	}

	if (!DiskSharing::hasRightToKnowAboutEntity($currentUserId, $entity))
	{
		$this->addError(new Error("Could not share to entity {$entity}."));

		return null;
	}

	$sharing = DiskSharing::add(
		[
			'FROM_ENTITY' => DiskSharing::CODE_USER . $currentUserId,
			'REAL_OBJECT' => $file,
			'CREATED_BY' => $currentUserId,
			'CAN_FORWARD' => false,
			'TO_ENTITY' => $entity,
			'TASK_NAME' => $taskName,
		],
		$this->errorCollection
	);

	if(!$sharing)
	{
		return null;
	}

	return [
		'sharing' => [
			'id' => $sharing->getId(),
		],
	];
}