- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/uf/fileusertype.php
- Класс: BitrixDiskUfFileUserType
- Вызов: FileUserType::checkFields
static function checkFields($userField, $value, $userId = false)
{
$userFieldManager = Driver::getInstance()->getUserFieldManager();
$errors = [];
[$type, $realValue] = self::detectType($value);
if ($type === self::TYPE_ALREADY_ATTACHED)
{
$attachedModel = $userFieldManager->getAttachedObjectById($realValue);
if (!$attachedModel)
{
$errors[] = [
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
];
return $errors;
}
[$connectorClass, $moduleId] = $userFieldManager->getConnectorDataByEntityType($userField['ENTITY_ID']);
if(
!$userFieldManager->belongsToEntity($attachedModel, $userField['ENTITY_ID'], $userField['ENTITY_VALUE_ID']) &&
!(
is_subclass_of($connectorClass, 'BitrixDiskUfISupportForeignConnector') ||
in_array('BitrixDiskUfISupportForeignConnector', class_implements($connectorClass)) //5.3.9
)
)
{
$errors[] = [
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
];
return $errors;
}
}
else
{
if ($realValue <= 0)
{
$errors[] = [
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_INVALID_VALUE'),
];
return $errors;
}
$fileModel = self::getFileById($realValue);
if (!$fileModel || !$fileModel->getStorage())
{
$errors[] = [
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
];
return $errors;
}
if ($userId === false)
{
$securityContext = $fileModel->getStorage()->getCurrentUserSecurityContext();
}
else
{
$securityContext = $fileModel->getStorage()->getSecurityContext($userId);
}
if (!$fileModel->canRead($securityContext))
{
$errors[] = [
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_BAD_RIGHTS'),
];
return $errors;
}
}
return $errors;
}