From 743fc68b4f4275e2e9a478f9b76f212fa95e77ff Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Fri, 25 Nov 2022 22:41:09 +0800 Subject: [PATCH] MDL-75951 core: Update box/spout to address PHP 8.1 deprecation This change is a direct pull from an upstream fix: https://github.com/openspout/openspout/commit/64a09a748d04992d63b38712599a9d8742bd77f7 This addresses the deprecation of auto_detect_line_endings in PHP 8.1. --- lib/spout/readme_moodle.txt | 7 ++++- lib/spout/src/Spout/Reader/CSV/Reader.php | 32 ++++++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/spout/readme_moodle.txt b/lib/spout/readme_moodle.txt index 2fab36e584b..ff8955f0a95 100644 --- a/lib/spout/readme_moodle.txt +++ b/lib/spout/readme_moodle.txt @@ -4,6 +4,11 @@ Description of Spout library import * Only include the src/Spout directory. * Update lib/thirdpartylibs.xml with the latest version. +2022/11/25 +---------- +Imported PHP 8.1 patch from OpenSpout/OpenSpout 4.8.1 +https://github.com/openspout/openspout/commit/64a09a748d04992d63b38712599a9d8742bd77f7 + 2022/10/27 ---------- Changes: @@ -36,4 +41,4 @@ by Ankit Agarwal 2016/09/20 ---------- Updated to v2.6.0 (MDL-56012) -by Adrian Greeve \ No newline at end of file +by Adrian Greeve diff --git a/lib/spout/src/Spout/Reader/CSV/Reader.php b/lib/spout/src/Spout/Reader/CSV/Reader.php index ca61ef2e2f1..942acc5b310 100644 --- a/lib/spout/src/Spout/Reader/CSV/Reader.php +++ b/lib/spout/src/Spout/Reader/CSV/Reader.php @@ -3,6 +3,9 @@ namespace Box\Spout\Reader\CSV; use Box\Spout\Common\Exception\IOException; +use Box\Spout\Common\Helper\GlobalFunctionsHelper; +use Box\Spout\Common\Manager\OptionsManagerInterface; +use Box\Spout\Reader\Common\Creator\InternalEntityFactoryInterface; use Box\Spout\Reader\Common\Entity\Options; use Box\Spout\Reader\CSV\Creator\InternalEntityFactory; use Box\Spout\Reader\ReaderAbstract; @@ -22,6 +25,23 @@ class Reader extends ReaderAbstract /** @var string Original value for the "auto_detect_line_endings" INI value */ protected $originalAutoDetectLineEndings; + /** @var bool Whether the code is running with PHP >= 8.1 */ + private $isRunningAtLeastPhp81; + + /** + * @param OptionsManagerInterface $optionsManager + * @param GlobalFunctionsHelper $globalFunctionsHelper + * @param InternalEntityFactoryInterface $entityFactory + */ + public function __construct( + OptionsManagerInterface $optionsManager, + GlobalFunctionsHelper $globalFunctionsHelper, + InternalEntityFactoryInterface $entityFactory + ) { + parent::__construct($optionsManager, $globalFunctionsHelper, $entityFactory); + $this->isRunningAtLeastPhp81 = \version_compare(PHP_VERSION, '8.1.0') >= 0; + } + /** * Sets the field delimiter for the CSV. * Needs to be called before opening the reader. @@ -84,8 +104,11 @@ class Reader extends ReaderAbstract */ protected function openReader($filePath) { - $this->originalAutoDetectLineEndings = \ini_get('auto_detect_line_endings'); - \ini_set('auto_detect_line_endings', '1'); + // "auto_detect_line_endings" is deprecated in PHP 8.1 + if (!$this->isRunningAtLeastPhp81) { + $this->originalAutoDetectLineEndings = \ini_get('auto_detect_line_endings'); + \ini_set('auto_detect_line_endings', '1'); + } $this->filePointer = $this->globalFunctionsHelper->fopen($filePath, 'r'); if (!$this->filePointer) { @@ -123,6 +146,9 @@ class Reader extends ReaderAbstract $this->globalFunctionsHelper->fclose($this->filePointer); } - \ini_set('auto_detect_line_endings', $this->originalAutoDetectLineEndings); + // "auto_detect_line_endings" is deprecated in PHP 8.1 + if (!$this->isRunningAtLeastPhp81) { + \ini_set('auto_detect_line_endings', $this->originalAutoDetectLineEndings); + } } }