- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/sharing.php
- Класс: BitrixDiskSharing
- Вызов: Sharing::connectToUserStorage
static function connectToUserStorage($userId, array $data, ErrorCollection $errorCollection)
{
$storage = Driver::getInstance()->getStorageByUserId($userId);
if(!$storage)
{
$storage = Driver::getInstance()->addUserStorage($userId);
}
if(!$storage)
{
$errorCollection->addOne(
new Error(
Loc::getMessage('DISK_SHARING_MODEL_ERROR_COULD_NOT_FIND_USER_STORAGE',
array('#USER_ID#' => $userId)
),
self::ERROR_COULD_NOT_FIND_USER_STORAGE)
);
return null;
}
$selfConnect = !empty($data['SELF_CONNECT']);
$linkName = !empty($data['LINK_NAME'])? $data['LINK_NAME'] : null;
unset($data['SELF_CONNECT'], $data['LINK_NAME']);
$data['TYPE'] = SharingTable::TYPE_TO_USER;
$data['FROM_ENTITY'] = self::CODE_USER . (int)$userId;
$data['TO_ENTITY'] = self::CODE_USER . (int)$userId;
$data['TASK_NAME'] = RightsManager::TASK_READ;
if(isset($data['REAL_OBJECT']) && $data['REAL_OBJECT'] instanceof BaseObject)
{
/** @noinspection PhpUndefinedMethodInspection */
$data['REAL_OBJECT_ID'] = $data['REAL_OBJECT']->getId();
}
elseif(isset($data['REAL_OBJECT_ID']))
{
$data['REAL_OBJECT'] = BaseObject::loadById($data['REAL_OBJECT_ID']);
}
else
{
$errorCollection->addOne(
new Error(Loc::getMessage('DISK_SHARING_MODEL_ERROR_EMPTY_REAL_OBJECT'), self::ERROR_EMPTY_REAL_OBJECT)
);
return null;
}
/** @var BitrixDiskBaseObject $objectToSharing */
$objectToSharing = $data['REAL_OBJECT'];
//resolve to last real object. In table we write only real (not link) id.
$objectToSharing = $objectToSharing->getRealObject();
if (!$objectToSharing)
{
return null;
}
$data['REAL_OBJECT_ID'] = $objectToSharing->getId();
$data['REAL_STORAGE_ID'] = $objectToSharing->getStorageId();
$dataToInsert = $data;
unset($dataToInsert['REAL_OBJECT']);
$sharingModel = parent::add($dataToInsert, $errorCollection);
if(!$sharingModel)
{
return null;
}
$sharingModel->setAttributes(array('REAL_OBJECT' => $objectToSharing));
if(!$selfConnect)
{
self::processConnectAndNotify(array($sharingModel), $objectToSharing);
}
else
{
if(!$sharingModel->approve(array('LINK_NAME' => $linkName)))
{
$errorCollection->add($sharingModel->getErrors());
$sharingModel->delete($userId);
return null;
}
}
return $sharingModel;
}