83 lines
2.1 KiB
PHP
83 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace Box\Spout\Reader\Wrapper;
|
|
|
|
use Box\Spout\Reader\Exception\XMLProcessingException;
|
|
|
|
/**
|
|
* Trait XMLInternalErrorsHelper
|
|
*
|
|
* @package Box\Spout\Reader\Wrapper
|
|
*/
|
|
trait XMLInternalErrorsHelper
|
|
{
|
|
/** @var bool Stores whether XML errors were initially stored internally - used to reset */
|
|
protected $initialUseInternalErrorsValue;
|
|
|
|
/**
|
|
* To avoid displaying lots of warning/error messages on screen,
|
|
* stores errors internally instead.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function useXMLInternalErrors()
|
|
{
|
|
libxml_clear_errors();
|
|
$this->initialUseInternalErrorsValue = libxml_use_internal_errors(true);
|
|
}
|
|
|
|
/**
|
|
* Throws an XMLProcessingException if an error occured.
|
|
* It also always resets the "libxml_use_internal_errors" setting back to its initial value.
|
|
*
|
|
* @return void
|
|
* @throws \Box\Spout\Reader\Exception\XMLProcessingException
|
|
*/
|
|
protected function resetXMLInternalErrorsSettingAndThrowIfXMLErrorOccured()
|
|
{
|
|
if ($this->hasXMLErrorOccured()) {
|
|
$this->resetXMLInternalErrorsSetting();
|
|
throw new XMLProcessingException($this->getLastXMLErrorMessage());
|
|
}
|
|
|
|
$this->resetXMLInternalErrorsSetting();
|
|
}
|
|
|
|
/**
|
|
* Returns whether the a XML error has occured since the last time errors were cleared.
|
|
*
|
|
* @return bool TRUE if an error occured, FALSE otherwise
|
|
*/
|
|
private function hasXMLErrorOccured()
|
|
{
|
|
return (libxml_get_last_error() !== false);
|
|
}
|
|
|
|
/**
|
|
* Returns the error message for the last XML error that occured.
|
|
* @see libxml_get_last_error
|
|
*
|
|
* @return String|null Last XML error message or null if no error
|
|
*/
|
|
private function getLastXMLErrorMessage()
|
|
{
|
|
$errorMessage = null;
|
|
$error = libxml_get_last_error();
|
|
|
|
if ($error !== false) {
|
|
$errorMessage = trim($error->message);
|
|
}
|
|
|
|
return $errorMessage;
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
protected function resetXMLInternalErrorsSetting()
|
|
{
|
|
libxml_use_internal_errors($this->initialUseInternalErrorsValue);
|
|
}
|
|
|
|
}
|