• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/editdoccomponentbase.php
  • Класс: CWebDavEditDocComponentBase
  • Вызов: CWebDavEditDocComponentBase::commitFile
protected function commitFile()
{
	$filename = CTempFile::GetFileName(uniqid('_wd'));
	$nameToSavedFile = $this->getNameToSavedFile($this->getWebdav()->arParams['element_name']);
	CheckDirPath($filename);
	$doc = $this
		->getDocHandler()
			->downloadFile(array(
				'id' => $this->getFileId(),
				'mimeType' => $this
						->getWebdav()
						->get_mime_type($nameToSavedFile)
			))
	;

	if(!$doc['content'])
	{
		return array('status' => 'error');
	}
	file_put_contents($filename, $doc['content']);
	$runRename = $nameToSavedFile != $this->getWebdav()->arParams['element_name'];
	$oldName = $this->getWebdav()->arParams['element_name'];
	$options = array(
		'new' => false,
		'FILE_NAME' => $nameToSavedFile,
		'NAME' => $nameToSavedFile,
		'ELEMENT_ID' => $this->getWebdav()->arParams['item_id'],
		'TMP_FILE' => $filename,
	);
	global $DB;
	$DB->startTransaction();
	if (!$this->getWebdav()->put_commit($options))
	{
		$DB->rollback();
		$response = array('status' => 'error');
	}
	else
	{
		$DB->commit();
		$webdav = $this->getWebdav();
		$response = array(
			'status' => 'success',
		);
		$response['elementId'] = $webdav->arParams['element_array']['ID'];
		//this is info for comment. And fileId == false,as this is last version and not save in BPhistory
		$response['cid'] = $this->generateCidForFile($response['elementId']);
		$response['serialize'] = CUserTypeWebdavElementHistory::genData(array(
			'ib' => $webdav->IBLOCK_ID,
			'ib_code' => $webdav->arParams['element_array']['IBLOCK_CODE'],
			'id' => $response['elementId'],
		), array(
			't_vers' => empty($options['THROUGH_VERSION'])? 0 : $options['THROUGH_VERSION'],
		));
		if($runRename)
		{
			CWebDavTools::clearByTag('webdav_element_internal_' . $webdav->arParams['element_array']['ID']);
			$response['newName'] = $options['NAME'];
			$response['oldName'] = $oldName;
		}
	}
	@unlink($filename);

	return $response;
}