Wrap actual file loading in protected methods, while just providing a stub `load()` method in the BaseReader abstract. This is to allow a wrapper in the file loader logic across all Readers, with a try/catch block that can be used to handle special loader settings. (#2620)

This commit is contained in:
Mark Baker 2022-02-23 21:31:57 +01:00 committed by GitHub
parent 16953e27d8
commit 579145eb3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 35 additions and 47 deletions

View File

@ -2,9 +2,11 @@
namespace PhpOffice\PhpSpreadsheet\Reader; namespace PhpOffice\PhpSpreadsheet\Reader;
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException; use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner; use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner;
use PhpOffice\PhpSpreadsheet\Shared\File; use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
abstract class BaseReader implements IReader abstract class BaseReader implements IReader
{ {
@ -144,25 +146,41 @@ abstract class BaseReader implements IReader
} }
} }
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
throw new PhpSpreadsheetException('Reader classes must implement their own loadSpreadsheetFromFile() method');
}
/**
* Loads Spreadsheet from file.
*/
public function load(string $filename, int $flags = 0): Spreadsheet
{
$this->processFlags($flags);
try {
return $this->loadSpreadsheetFromFile($filename);
} catch (ReaderException $e) {
throw $e;
}
}
/** /**
* Open file for reading. * Open file for reading.
*
* @param string $filename
*/ */
protected function openFile($filename): void protected function openFile(string $filename): void
{ {
$fileHandle = false;
if ($filename) { if ($filename) {
File::assertFile($filename); File::assertFile($filename);
// Open file // Open file
$fileHandle = fopen($filename, 'rb'); $fileHandle = fopen($filename, 'rb');
} else {
$fileHandle = false;
} }
if ($fileHandle !== false) { if ($fileHandle === false) {
$this->fileHandle = $fileHandle;
} else {
throw new ReaderException('Could not open file ' . $filename . ' for reading.'); throw new ReaderException('Could not open file ' . $filename . ' for reading.');
} }
$this->fileHandle = $fileHandle;
} }
} }

View File

@ -236,13 +236,9 @@ class Csv extends BaseReader
/** /**
* Loads Spreadsheet from file. * Loads Spreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Create new Spreadsheet // Create new Spreadsheet
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();

View File

@ -227,13 +227,9 @@ class Gnumeric extends BaseReader
/** /**
* Loads Spreadsheet from file. * Loads Spreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Create new Spreadsheet // Create new Spreadsheet
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();
$spreadsheet->removeSheetByIndex(0); $spreadsheet->removeSheetByIndex(0);

View File

@ -19,7 +19,6 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Throwable; use Throwable;
/** PhpSpreadsheet root directory */
class Html extends BaseReader class Html extends BaseReader
{ {
/** /**
@ -201,13 +200,9 @@ class Html extends BaseReader
/** /**
* Loads Spreadsheet from file. * Loads Spreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Create new Spreadsheet // Create new Spreadsheet
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();

View File

@ -217,13 +217,9 @@ class Ods extends BaseReader
/** /**
* Loads PhpSpreadsheet from file. * Loads PhpSpreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Create new Spreadsheet // Create new Spreadsheet
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();

View File

@ -191,13 +191,9 @@ class Slk extends BaseReader
/** /**
* Loads PhpSpreadsheet from file. * Loads PhpSpreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Create new Spreadsheet // Create new Spreadsheet
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();

View File

@ -620,13 +620,9 @@ class Xls extends BaseReader
/** /**
* Loads PhpSpreadsheet from file. * Loads PhpSpreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Read the OLE file // Read the OLE file
$this->loadOLE($filename); $this->loadOLE($filename);

View File

@ -384,10 +384,9 @@ class Xlsx extends BaseReader
/** /**
* Loads Spreadsheet from file. * Loads Spreadsheet from file.
*/ */
public function load(string $filename, int $flags = 0): Spreadsheet protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
File::assertFile($filename, self::INITIAL_FILE); File::assertFile($filename, self::INITIAL_FILE);
$this->processFlags($flags);
// Initialisations // Initialisations
$excel = new Spreadsheet(); $excel = new Spreadsheet();

View File

@ -231,13 +231,9 @@ class Xml extends BaseReader
/** /**
* Loads Spreadsheet from file. * Loads Spreadsheet from file.
*
* @return Spreadsheet
*/ */
public function load(string $filename, int $flags = 0) protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{ {
$this->processFlags($flags);
// Create new Spreadsheet // Create new Spreadsheet
$spreadsheet = new Spreadsheet(); $spreadsheet = new Spreadsheet();
$spreadsheet->removeSheetByIndex(0); $spreadsheet->removeSheetByIndex(0);

View File

@ -7,7 +7,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions;
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
class CalclationFunctionListTest extends TestCase class CalculationFunctionListTest extends TestCase
{ {
/** /**
* @var string * @var string