• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/lib/integration/zoom/downloadagent.php
  • Класс: BitrixSocialservicesIntegrationZoomDownloadAgent
  • Вызов: DownloadAgent::attach
static function attach($activityId, array $recordingFields, $siteId = SITE_ID)
{
	$result = new Result();

	$validSymbolsPattern = '/^[a-z0-9-]+$/i';
	if (!preg_match($validSymbolsPattern, $recordingFields['EXTERNAL_ID']))
	{
		return $result->addError(new Error('Can not create recording file name, external_id contains invalid symbols'));
	}
	if (!preg_match($validSymbolsPattern, $recordingFields['FILE_TYPE']))
	{
		return $result->addError(new Error('Can not create recording file name, external_id contains invalid symbols'));
	}
	if (!Loader::includeModule('crm'))
	{
		return $result->addError(new Error('CRM module is not installed'));
	}
	$fileName = mb_strtolower("{$recordingFields['EXTERNAL_ID']}.{$recordingFields['FILE_TYPE']}");
	$downloadResult = static::download($recordingFields['DOWNLOAD_URL'], $recordingFields['DOWNLOAD_TOKEN'], $fileName);
	if(!$downloadResult->isSuccess())
	{
		return $result->addErrors($downloadResult->getErrors());
	}

	$activityFields = CCrmActivity::GetByID($activityId, false);
	if(!$activityFields)
	{
		return $result->addError(new Error('Activity is not found'));
	}
	$responsible = $activityFields['RESPONSIBLE_ID'];

	$tempPath = $downloadResult->getData()['file'];
	$recordFile = CFile::MakeFileArray($tempPath, $recordingFields['FILE_TYPE']);
	$recordFile['MODULE_ID'] = 'crm';
	$saveResult = DiskHelper::saveFile($recordFile, $responsible, $siteId);

	if(!$saveResult->isSuccess())
	{
		return $result->addErrors($saveResult->getErrors());
	}

	$fileId = $saveResult->getData()['fileId'];
	ZoomMeetingRecordingTable::update($recordingFields['ID'], [
		'FILE_ID' => $fileId
	]);

	$storageElementIds = unserialize($activityFields['STORAGE_ELEMENT_IDS'], ['allowed_classes' => false]) ?: [];
	$storageElementIds[] = $fileId;

	$activityFields['STORAGE_TYPE_ID'] = BitrixCrmIntegrationStorageType::Disk;
	$activityFields['STORAGE_ELEMENT_IDS'] = $storageElementIds;

	$updateResult = CCrmActivity::Update($activityId, $activityFields, false);
	if (!$updateResult)
	{
		return $result->addError(new Error(CCrmActivity::GetLastErrorMessage()));
	}
	return $result;
}