• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/bizprocdocument.php
  • Класс: BitrixDiskBizProcDocument
  • Вызов: BizProcDocument::updateDocument
static function updateDocument($documentId, $fields)
{
	$documentId = (int)$documentId;
	if ($documentId <= 0)
	{
		throw new CBPArgumentNullException("documentId");
	}
	$file = File::loadById($documentId);
	if(!$file)
	{
		return false;
	}

	$ufFields = array();
	foreach($fields as $codeField => $valueField)
	{
		if($codeField == 'NAME')
		{
			$file->rename((string)$valueField);
		}
		$search = 'UF_';
		$res = mb_strpos($codeField, $search);
		if($res === 0)
		{
			$ufFields[$codeField] = $valueField;
		}
	}
	if(!empty($ufFields))
	{
		$userFieldManager = Driver::getInstance()->getUserFieldManager();

		$filesToDelete = array();
		foreach($userFieldManager->getFieldsForObject($file) as $userField)
		{
			if($userField['USER_TYPE_ID'] !== 'file')
			{
				continue;
			}
			if($userField['MULTIPLE'] !== 'N')
			{
				continue;
			}
			if(!isset($ufFields[$userField['FIELD_NAME']]))
			{
				continue;
			}
			if($ufFields[$userField['FIELD_NAME']] != $userField['VALUE'])
			{
				$forkFileId = CFile::CloneFile($ufFields[$userField['FIELD_NAME']]);
				if($forkFileId)
				{
					$filesToDelete[] = $userField['VALUE'];
					$ufFields[$userField['FIELD_NAME']] = $forkFileId;
				}
			}
			else
			{
				//document already has same value
				unset($ufFields[$userField['FIELD_NAME']]);
			}
		}
		unset($userField);

		global $USER_FIELD_MANAGER;
		if($USER_FIELD_MANAGER->update($userFieldManager->getUfEntityName($file), $documentId, $ufFields))
		{
			foreach($filesToDelete as $fileId)
			{
				CFile::delete($fileId);
			}
			unset($fileId);
		}
	}

	return true;
}