%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/export/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/export/ExportResult.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\export;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Yii;
use yii\base\BaseObject;
use yii\helpers\FileHelper;
use yii\web\Response;
/**
* ExportResult represents SpreadsheetExport result.
*
* This class was originally developed by Paul Klimov <klimov.paul@gmail.com> and his
* project csv-grid (https://github.com/yii2tech/csv-grid).
*
* @see SpreadsheetExport
*/
class ExportResult extends BaseObject
{
/**
* @var string base path for the temporary directory and files.
*/
public $basePath = '@runtime/data_export';
/**
* @var string base name, which should be used for the created files.
*/
public $fileBaseName = 'export';
/**
* @var string
*/
public $writerType = 'csv';
/**
* @var Spreadsheet Spreadsheet instance
*/
private $spreadsheet;
/**
* @var string temporary files directory name
*/
private $tempFileName;
/**
* @var string name of the result file.
*/
private $resultFileName;
/**
* Destructor.
* Makes sure the temporary directory removed.
*/
public function __destruct()
{
$this->delete();
}
/**
* @return string files directory name
* @throws \yii\base\Exception
*/
public function getTempFileName()
{
if ($this->tempFileName === null) {
$basePath = Yii::getAlias($this->basePath);
FileHelper::createDirectory($basePath);
$this->tempFileName = $basePath . DIRECTORY_SEPARATOR . uniqid(time(), true);
}
return $this->tempFileName;
}
/**
* @return string result file name
*/
public function getResultFileName()
{
if ($this->resultFileName === null) {
$this->resultFileName = $this->fileBaseName . '.' . $this->writerType;
}
return $this->resultFileName;
}
/**
* Creates new CSV file in result set.
* @return Spreadsheet instance.
*/
public function newSpreadsheet()
{
$this->spreadsheet = new Spreadsheet();
return $this->spreadsheet;
}
/**
* Deletes associated directory with all internal files.
* @return boolean whether file has been deleted.
*/
public function delete()
{
if (!empty($this->tempFileName) && is_writable($this->tempFileName)) {
FileHelper::unlink($this->tempFileName);
return true;
}
return false;
}
/**
* Saves this file.
* @param string $file destination file name (may content path alias).
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public function saveAs($file)
{
$writer = IOFactory::createWriter($this->spreadsheet, ucfirst($this->writerType));
$writer->save($file);
}
/**
* Prepares response for sending a result file to the browser.
* Note: this method works only while running web application.
* @param array $options additional options for sending the file. See [[\yii\web\Response::sendFile()]] for details.
* @return \yii\web\Response application response instance.
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
* @throws \yii\base\Exception
*/
public function send($options = [])
{
$this->saveAs($this->getTempFileName());
$response = Yii::$app->getResponse();
$response->on(Response::EVENT_AFTER_SEND, [$this, 'delete']);
return $response->sendFile($this->getTempFileName(), $this->getResultFileName(), $options);
}
}