Roman Syroeshko 2014-08-10 20:00:19 +04:00
parent f25833c60d
commit 56c3d8eda2
11 changed files with 85 additions and 18 deletions

View File

@ -47,6 +47,7 @@ This release added form fields (textinput, checkbox, and dropdown), drawing shap
- Autoloader: Add the ability to set the autoloader options - @bskrtich GH-267
- Element: Refactor elements to move set relation Id from container to element - @ivanlanin
- Introduced CreateTemporaryFileException, CopyFileException - @RomanSyroeshko
- Settings: added method to set user defined temporary directory - @RomanSyroeshko GH-310
## 0.11.1 - 2 June 2014

View File

@ -7,6 +7,7 @@ compatibility = true
zipClass = ZipArchive
pdfRendererName = DomPDF
pdfRendererPath =
; tempDir = "C:\PhpWordTemp"
[Font]

View File

@ -3,7 +3,7 @@ include_once 'Sample_Header.php';
$requirements = array(
'php' => array('PHP 5.3.0', version_compare(phpversion(), '5.3.0', '>=')),
'xml' => array('PHP extension XML', extension_loaded('xml')),
'temp' => array('Temp folder "<code>' . sys_get_temp_dir() . '</code>" is writable', is_writable(sys_get_temp_dir())),
'temp' => array('Temp folder "<code>' . Settings::getTempDir() . '</code>" is writable', is_writable(Settings::getTempDir())),
'zip' => array('PHP extension ZipArchive (optional)', extension_loaded('zip')),
'gd' => array('PHP extension GD (optional)', extension_loaded('gd')),
'xmlw' => array('PHP extension XMLWriter (optional)', extension_loaded('xmlwriter')),

View File

@ -19,6 +19,7 @@ namespace PhpOffice\PhpWord\Element;
use PhpOffice\PhpWord\Exception\InvalidImageException;
use PhpOffice\PhpWord\Exception\UnsupportedImageTypeException;
use PhpOffice\PhpWord\Settings;
use PhpOffice\PhpWord\Shared\ZipArchive;
use PhpOffice\PhpWord\Style\Image as ImageStyle;
@ -313,8 +314,8 @@ class Image extends AbstractElement
if ($zip->open($zipFilename) !== false) {
if ($zip->locateName($imageFilename)) {
$isTemp = true;
$zip->extractTo(sys_get_temp_dir(), $imageFilename);
$actualSource = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $imageFilename;
$zip->extractTo(Settings::getTempDir(), $imageFilename);
$actualSource = Settings::getTempDir() . DIRECTORY_SEPARATOR . $imageFilename;
}
}
$zip->close();
@ -428,7 +429,7 @@ class Image extends AbstractElement
$imageData = null;
$source = substr($source, 6);
list($zipFilename, $imageFilename) = explode('#', $source);
$tempFilename = tempnam(sys_get_temp_dir(), 'PHPWordImage');
$tempFilename = tempnam(Settings::getTempDir(), 'PHPWordImage');
$zip = new ZipArchive();
if ($zip->open($zipFilename) !== false) {

View File

@ -119,6 +119,13 @@ class Settings
*/
private static $defaultFontSize = self::DEFAULT_FONT_SIZE;
/**
* The user defined temporary directory.
*
* @var string
*/
private static $tempDir = '';
/**
* Return the compatibility option used by the XMLWriter
*
@ -269,6 +276,35 @@ class Settings
return true;
}
/**
* Sets the user defined path to temporary directory.
*
* @param string $tempDir The user defined path to temporary directory.
* @return void
* @since 0.12.0
*/
public static function setTempDir($tempDir)
{
self::$tempDir = $tempDir;
}
/**
* Returns path to temporary directory.
*
* @return string
* @since 0.12.0
*/
public static function getTempDir()
{
$tempDir = sys_get_temp_dir();
if (!empty(self::$tempDir)) {
$tempDir = self::$tempDir;
}
return $tempDir;
}
/**
* Get default font name
*

View File

@ -83,7 +83,7 @@ class ZipArchive
$this->usePclzip = (Settings::getZipClass() != 'ZipArchive');
if ($this->usePclzip) {
if (!defined('PCLZIP_TEMPORARY_DIR')) {
define('PCLZIP_TEMPORARY_DIR', sys_get_temp_dir() . '/');
define('PCLZIP_TEMPORARY_DIR', Settings::getTempDir() . '/');
}
require_once 'PCLZip/pclzip.lib.php';
}
@ -139,7 +139,7 @@ class ZipArchive
$this->numFiles = $zip->numFiles;
} else {
$zip = new \PclZip($this->filename);
$this->tempDir = sys_get_temp_dir();
$this->tempDir = Settings::getTempDir();
$this->numFiles = count($zip->listContent());
}
$this->zip = $zip;

View File

@ -67,7 +67,7 @@ class Template
*/
public function __construct($fileName)
{
$this->tempFileName = tempnam(sys_get_temp_dir(), '');
$this->tempFileName = tempnam(Settings::getTempDir(), 'PhpWord');
if (false === $this->tempFileName) {
throw new CreateTemporaryFileException();
}

View File

@ -20,6 +20,7 @@ namespace PhpOffice\PhpWord\Writer;
use PhpOffice\PhpWord\Exception\CopyFileException;
use PhpOffice\PhpWord\Exception\Exception;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Settings;
use PhpOffice\PhpWord\Shared\ZipArchive;
/**
@ -214,12 +215,12 @@ abstract class AbstractWriter implements WriterInterface
protected function getTempFile($filename)
{
// Temporary directory
$this->setTempDir(sys_get_temp_dir() . '/PHPWordWriter/');
$this->setTempDir(Settings::getTempDir() . '/PHPWordWriter/');
// Temporary file
$this->originalFilename = $filename;
if (strtolower($filename) == 'php://output' || strtolower($filename) == 'php://stdout') {
$filename = @tempnam(sys_get_temp_dir(), 'phpword_');
$filename = tempnam(Settings::getTempDir(), 'phpword_');
// @codeCoverageIgnoreStart
// Can't find any test case. Uncomment when found.
if ($filename == '') {

View File

@ -22,6 +22,7 @@ use PhpOffice\PhpWord\Settings;
/**
* Test class for PhpOffice\PhpWord\Settings
*
* @coversDefaultClass \PhpOffice\PhpWord\Settings
* @runTestsInSeparateProcesses
*/
class SettingsTest extends \PHPUnit_Framework_TestCase
@ -70,6 +71,31 @@ class SettingsTest extends \PHPUnit_Framework_TestCase
$this->assertFalse(Settings::setMeasurementUnit('foo'));
}
/**
* @covers ::getTempDir
* @test
*/
public function testPhpTempDirIsUsedByDefault()
{
$this->assertEquals(sys_get_temp_dir(), Settings::getTempDir());
}
/**
* @covers ::setTempDir
* @covers ::getTempDir
* @depends testPhpTempDirIsUsedByDefault
* @test
*/
public function testTempDirCanBeSet()
{
$userDefinedTempDir = 'C:\PhpWordTemp';
Settings::setTempDir($userDefinedTempDir);
$currentTempDir = Settings::getTempDir();
$this->assertEquals($userDefinedTempDir, $currentTempDir);
$this->assertNotEquals(sys_get_temp_dir(), $currentTempDir);
}
/**
* Test set/get default font name
*/

View File

@ -71,7 +71,7 @@ class DomPDFTest extends \PHPUnit_Framework_TestCase
$writer->setOrientation();
$this->assertEquals('default', $writer->getOrientation());
$writer->setTempDir(sys_get_temp_dir());
$this->assertEquals(sys_get_temp_dir(), $writer->getTempDir());
$writer->setTempDir(Settings::getTempDir());
$this->assertEquals(Settings::getTempDir(), $writer->getTempDir());
}
}

View File

@ -19,6 +19,7 @@ namespace PhpOffice\PhpWord\Tests;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Settings;
/**
* Test helper class
@ -41,9 +42,9 @@ class TestHelperDOCX
*/
public static function getDocument(PhpWord $phpWord, $writerName = 'Word2007')
{
self::$file = tempnam(sys_get_temp_dir(), 'PhpWord');
if (!is_dir(sys_get_temp_dir() . '/PhpWord_Unit_Test/')) {
mkdir(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
self::$file = tempnam(Settings::getTempDir(), 'PhpWord');
if (!is_dir(Settings::getTempDir() . '/PhpWord_Unit_Test/')) {
mkdir(Settings::getTempDir() . '/PhpWord_Unit_Test/');
}
$xmlWriter = IOFactory::createWriter($phpWord, $writerName);
@ -52,11 +53,11 @@ class TestHelperDOCX
$zip = new \ZipArchive;
$res = $zip->open(self::$file);
if ($res === true) {
$zip->extractTo(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
$zip->extractTo(Settings::getTempDir() . '/PhpWord_Unit_Test/');
$zip->close();
}
return new XmlDocument(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
return new XmlDocument(Settings::getTempDir() . '/PhpWord_Unit_Test/');
}
/**
@ -67,8 +68,8 @@ class TestHelperDOCX
if (file_exists(self::$file)) {
unlink(self::$file);
}
if (is_dir(sys_get_temp_dir() . '/PhpWord_Unit_Test/')) {
self::deleteDir(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
if (is_dir(Settings::getTempDir() . '/PhpWord_Unit_Test/')) {
self::deleteDir(Settings::getTempDir() . '/PhpWord_Unit_Test/');
}
}