Your IP : 3.147.28.158


Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/documentgenerator/lib/storage/
Upload File :
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/documentgenerator/lib/storage/bfile.php

<?php

namespace Bitrix\DocumentGenerator\Storage;

use Bitrix\DocumentGenerator\Driver;
use Bitrix\Main\Error;
use Bitrix\Main\IO\Path;
use Bitrix\Main\Entity\AddResult;

class BFile extends File
{
	/**
	 * Try to read content. Returns string on success, false on failure.
	 *
	 * @param mixed $fileId
	 * @return false|string
	 */
	public function read($fileId)
	{
		if(intval($fileId) > 0)
		{
			$fileArray = \CFile::MakeFileArray($fileId);
			if($fileArray && $fileArray['tmp_name'])
			{
				return parent::read($fileArray['tmp_name']);
			}
			$path = \CFile::getPath($fileId);
			if($path)
			{
				return parent::read($path);
			}
		}

		return false;
	}

	/**
	 * Save $content. Returns true on success, false on failure.
	 *
	 * @param string $content
	 * @param array $options
	 * @return AddResult
	 */
	public function write($content, array $options = [])
	{
		$result = parent::write($content, $options);
		if($result->isSuccess())
		{
			$filePath = $result->getId();
			$contentType = false;
			if(isset($options['contentType']))
			{
				$contentType = $options['contentType'];
			}
			if(!isset($options['MODULE_ID']))
			{
				$options['MODULE_ID'] = Driver::MODULE_ID;
			}
			$fileDescription = \CFile::MakeFileArray($filePath, $contentType);
			if($fileDescription)
			{
				if(isset($options['fileName']))
				{
					$options['fileName'] = str_replace(' ', '_', Path::replaceInvalidFilename($options['fileName'], function()
					{
						return '_';
					}));
					$fileDescription['name'] = $fileDescription['fileName'] = $options['fileName'];
				}
				if(isset($options['MODULE_ID']))
				{
					$fileDescription['MODULE_ID'] = $options['MODULE_ID'];
				}
				$path = $this->getPath($fileDescription);
				$fileId = \CFile::SaveFile($fileDescription, $path);
				parent::delete($filePath);
				$result->setId($fileId);
			}
			else
			{
				$result->addError(new Error('Cant get file description from '.$filePath));
			}
		}

		return $result;
	}

	/**
	 * @param int $fileId
	 * @param string $fileName
	 * @return bool
	 */
	public function download($fileId, $fileName = '')
	{
		if(intval($fileId) > 0)
		{
			$fileDescription = \CFile::GetFileArray($fileId);
			$options = [];
			if($fileName)
			{
				$options['attachment_name'] = $this->correctFileName($fileName);
			}
			\CFile::ViewByUser($fileDescription, $options);
			return true;
		}

		return false;
	}

	/**
	 * @param mixed $fileId
	 * @return bool
	 */
	public function delete($fileId)
	{
		if(intval($fileId) > 0)
		{
			\CFile::Delete($fileId);
		}

		return true;
	}

	/**
	 * @param int $fileId
	 * @return false|int
	 */
	public function getModificationTime($fileId)
	{
		if(intval($fileId) > 0)
		{
			$file = \CFile::GetByID($fileId)->Fetch();
			if($file)
			{
				return intval(MakeTimeStamp($file["TIMESTAMP_X"]));
			}
		}

		return false;
	}

	/**
	 * @param array $file
	 * @return AddResult
	 */
	public function upload(array $file)
	{
		$result = new AddResult();
		$path = $this->getPath($file);
		$fileId = \CFile::saveFile($file, $path, true, true);
		if($fileId > 0)
		{
			$result->setId($fileId);
		}
		else
		{
			$result->addError(new Error('Cant save file to b_file'));
		}

		return $result;
	}

	/**
	 * @param mixed $fileId
	 * @return false|int
	 */
	public function getSize($fileId)
	{
		if(intval($fileId) > 0)
		{
			$file = \CFile::GetByID($fileId)->Fetch();
			if($file)
			{
				return $file['FILE_SIZE'];
			}
		}

		return false;
	}

	/**
	 * @param string $fileName
	 * @return string
	 */
	protected function correctFileName($fileName)
	{
		$fileName = Path::replaceInvalidFilename($fileName, function(){
			return '_';
		});

		$correctedFileName = preg_replace('~\x{00a0}~siu', ' ', $fileName);
		if($correctedFileName !== null)
		{
			$fileName = $correctedFileName;
		}

		return $fileName;
	}

	/**
	 * @param array $file
	 * @return string
	 */
	protected function getPath(array $file)
	{
		$path = Driver::MODULE_ID;
		if($file['isTemplate'] === true)
		{
			$path = Path::combine('templates', $path);
		}

		return $path;
	}
}