• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/lib/rest/helper.php
  • Класс: BitrixVoximplantRestHelper
  • Вызов: Helper::attachRecord
static function attachRecord($callId, $fileName, $fileContent, $restServer)
{
	$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;
	}

	if ($fileContent === null)
	{
		$result->setData([
			'uploadUrl' => CRestUtil::getUploadUrl(['callId' => $callId], $restServer),
			'fieldName' => static::FILE_FIELD
		]);
		return $result;
	}

	if ($fileName == '')
	{
		$result->addError(new Error("File name is empty"));
		return $result;
	}

	$allowedExtensions = ['wav', 'mp3'];
	if (!in_array(GetFileExtension($fileName), $allowedExtensions))
	{
		$result->addError(new Error("Wrong file extension. Only wav and mp3 are allowed"));
		return $result;
	}

	$fileArray = CRestUtil::saveFile($fileContent, $fileName);

	if ($fileArray === false)
	{
		$result->addError(new Error("File content is empty."));
		return $result;
	}

	if (is_null($fileArray))
	{
		$result->addError(new Error("File content is not properly encoded. Base64 encoding is expected."));
		return $result;
	}

	if (!is_array($fileArray))
	{
		$result->addError(new Error("Unknown error encountered while saving file."));
		return $result;
	}

	$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);
	if (!$attachResult->isSuccess())
	{
		$result->addErrors($attachResult->getErrors());
		return $result;
	}

	$result->setData([
		'FILE_ID' => $file->getId()
	]);

	return $result;
}