/** * Attaching files from the disk to the iblock element * @param int $iblockId * @param int $elementId * @param int $fileId * @param array $currentValues Old property values attached id * @return int Attached Id */ public static function attachFileDisk($iblockId, $elementId, $fileId, $currentValues) { if (!CModule::includeModule('disk')) { return null; } $elementId = (int) $elementId; if (!$elementId) { return null; } $userFieldManager = Bitrix\Disk\Driver::getInstance()->getUserFieldManager(); list($connectorClass, $moduleId) = $userFieldManager->getConnectorDataByEntityType('lists_element'); $filter = array('OBJECT_ID' => $fileId, '=ENTITY_TYPE' => $connectorClass, '=ENTITY_ID' => $elementId, '=MODULE_ID' => $moduleId); $listAttachedModel = Bitrix\Disk\AttachedObject::getModelList(array("filter" => $filter)); if (!empty($listAttachedModel)) { foreach ($listAttachedModel as $attachedModel) { if (in_array($attachedModel->getId(), $currentValues)) { return $attachedModel->getId(); } } } $errorCollection = new Bitrix\Disk\Internals\Error\ErrorCollection(); $fileModel = Bitrix\Disk\File::loadById($fileId, array('STORAGE')); if (!$fileModel) { return null; } global $USER; if ($USER instanceof CUser && $USER->getId()) { $userId = $USER->getId(); } else { $userId = Bitrix\Disk\SystemUser::SYSTEM_USER_ID; } $attachedModel = Bitrix\Disk\AttachedObject::add(array('MODULE_ID' => $moduleId, 'OBJECT_ID' => $fileModel->getId(), 'ENTITY_ID' => $elementId, 'ENTITY_TYPE' => $connectorClass, 'IS_EDITABLE' => 1, 'ALLOW_EDIT' => (int) (int) Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getPost('DISK_FILE_' . $iblockId . '_DISK_ATTACHED_OBJECT_ALLOW_EDIT'), 'CREATED_BY' => $userId), $errorCollection); if (!$attachedModel || $errorCollection->hasErrors()) { return null; } return $attachedModel->getId(); }