- Модуль: 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;
}