- Модуль: 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(),
],
];
}