- Модуль: voximplant
- Путь к файлу: ~/bitrix/modules/voximplant/lib/rest/helper.php
- Класс: BitrixVoximplantRestHelper
- Вызов: Helper::attachRecordWithUrl
static function attachRecordWithUrl($callId, $recordUrl, $fileName = '')
{
$result = new Result();
$statisticRecord = StatisticTable::getByCallId($callId);
if (!$statisticRecord)
{
$result->addError(new Error("Call is not found in the statistic table. Looks like it is not finished yet."));
return $result;
}
$urlPath = parse_url($recordUrl, PHP_URL_PATH);
if ($fileName !== '')
{
$tempPath = CFile::GetTempName('', bx_basename($fileName));
}
else if ($urlPath && $urlPath !== '')
{
$tempPath = CFile::GetTempName('', bx_basename($urlPath));
}
else
{
$tempPath = CFile::GetTempName('', bx_basename($recordUrl));
}
try
{
IODirectory::createDirectory(IOPath::getDirectory($tempPath));
if (IODirectory::isDirectoryExists(IOPath::getDirectory($tempPath)) === false)
{
return $result->addError(new Error('Could not create temporary directory', 'INTERNAL_ERROR'));
}
$file = new IOFile($tempPath);
$handler = $file->open("w+");
}
catch(Exception $exception)
{
$result->addError(new Error($exception->getMessage(), 'INTERNAL_ERROR'));
return $result;
}
$httpClient = HttpClientFactory::create([
"disableSslVerification" => true
]);
$httpClient->setOutputStream($handler);
$queryResult = $httpClient->query('GET', $recordUrl);
$httpClient->getResult();
$file->close();
if ($queryResult === false)
{
$httpClientErrors = $httpClient->getError();
if (!empty($httpClientErrors))
{
foreach ($httpClientErrors as $code => $message)
{
return $result->addError(new Error($code . ": " . $message, 'SERVER_NOT_AVAILABLE'));
}
}
}
if ($httpClient->getStatus() !== 200)
{
return $result->addError(new Error('Server returns HTTP error code ' . $httpClient->getStatus()));
}
//check for http errors once more
$httpClientErrors = $httpClient->getError();
if (!empty($httpClientErrors))
{
foreach ($httpClientErrors as $code => $message)
{
return $result->addError(new Error($code . ": " . $message, 'SERVER_NOT_AVAILABLE'));
}
}
$fileArray = CFile::MakeFileArray($tempPath);
$isCorrectFileResult = SecurityRecordFile::isCorrectFromArray($fileArray);
if (!$isCorrectFileResult->isSuccess())
{
return $result->addErrors($isCorrectFileResult->getErrors());
}
$saveResult = static::saveFile($statisticRecord['CALL_START_DATE']->format("Y-m"), $fileName, $fileArray, $statisticRecord['PORTAL_USER_ID']);
if (!$saveResult->isSuccess())
{
$result->addErrors($saveResult->getErrors());
return $result;
}
$saveResultData = $saveResult->getData();
$file = $saveResultData['FILE'];
if ($statisticRecord['CALL_WEBDAV_ID'])
{
Application::getInstance()->addBackgroundJob(
[__CLASS__, 'deleteFile'],
[$statisticRecord['CALL_WEBDAV_ID'], $statisticRecord['PORTAL_USER_ID']]
);
}
$attachResult = static::attachFile($callId, $file, $recordUrl);
if (!$attachResult->isSuccess())
{
$result->addErrors($attachResult->getErrors());
return $result;
}
$result->setData([
'FILE_ID' => $file->getId()
]);
return $result;
}