• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/uf/userfieldmanager.php
  • Класс: BitrixDiskUfUserFieldManager
  • Вызов: UserFieldManager::cloneUfValuesFromAttachedObject
public function cloneUfValuesFromAttachedObject(array $attachedIds, $userId): ?array
{
	$this->errorCollection->clear();

	$userId = (int)$userId;
	if ($userId <= 0)
	{
		$this->errorCollection[] = new Error('Invalid $userId');

		return null;
	}

	$userStorage = Driver::getInstance()->getStorageByUserId($userId);
	if (!$userStorage)
	{
		$this->errorCollection[] = new Error("Could not find storage for user {$userId}");
		$this->errorCollection->add(Driver::getInstance()->getErrors());

		return null;
	}

	$folder = $userStorage->getFolderForUploadedFiles();
	if (!$folder)
	{
		$this->errorCollection[] = new Error("Could not create/find folder for upload");
		$this->errorCollection->add($userStorage->getErrors());

		return null;
	}

	$newValues = [];
	foreach ($attachedIds as $id)
	{
		[$type, $realValue] = FileUserType::detectType($id);
		if (FileUserType::TYPE_ALREADY_ATTACHED != $type)
		{
			continue;
		}

		$attachedObject = AttachedObject::loadById($realValue, ['OBJECT']);
		if (!$attachedObject)
		{
			continue;
		}

		if (!$attachedObject->canRead($userId))
		{
			continue;
		}

		$file = $attachedObject->getFile();
		if (!$file)
		{
			continue;
		}

		if (!$attachedObject->isSpecificVersion())
		{
			$newFile = $file->copyTo($folder, $userId, true);
			if (!$newFile)
			{
				$this->errorCollection->add($file->getErrors());
				continue;
			}
		}
		else
		{
			$version = $attachedObject->getVersion();
			if (!$version)
			{
				continue;
			}

			$newFile = $version->createNewFile($folder, $userId, true);
			if (!$newFile)
			{
				$this->errorCollection->add($file->getErrors());
				continue;
			}
		}

		$newValues[$id] = FileUserType::NEW_FILE_PREFIX . $newFile->getId();
	}

	return $newValues;
}