- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/uf/versionusertype.php
- Класс: BitrixDiskUfVersionUserType
- Вызов: VersionUserType::checkFields
static function checkFields($userField, $value, $userId = false)
{
$userFieldManager = Driver::getInstance()->getUserFieldManager();
$errors = array();
list($type, $realValue) = static::detectType($value);
if($type == self::TYPE_ALREADY_ATTACHED)
{
$attachedModel = static::getAttachedObjectById($realValue);
if(!$attachedModel)
{
$errors[] = array(
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
);
return $errors;
}
list($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[] = array(
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
);
return $errors;
}
}
else
{
if($realValue <= 0)
{
$errors[] = array(
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_INVALID_VALUE'),
);
return $errors;
}
$version = static::getVersionById($realValue);
if(!$version)
{
$errors[] = array(
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
);
return $errors;
}
$file = $version->getObject();
if($userId === false)
{
$securityContext = $file->getStorage()->getCurrentUserSecurityContext();
}
else
{
$userId = (int)$userId;
$securityContext = $file->getStorage()->getSecurityContext($userId);
}
$hackData = AttachedObject::getStoredDataByObjectId($file->getId());
if ($userId !== false && isset($hackData['STATE']) && $userId === (int)$version->getCreatedBy())
{
return $errors;
}
//we don't check rights on file if version create current user. (uf logic, magic)
if($version->getCreatedBy() != self::getActivityUserId() && !$file->canRead($securityContext))
{
$errors[] = array(
"id" => $userField["FIELD_NAME"],
"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_BAD_RIGHTS'),
);
return $errors;
}
}
return $errors;
}