mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-10-30 20:01:37 +01:00 
			
		
		
		
	Adds support for PHP8.0, dropping support for PHP7.0 and below.
Backwards incompatible changes:
- Dropped support for php asp tags in templates (removed from php since php7.0)
- Dropped deprecated API calls that where only accessible through SmartyBC
- Dropped support for {php} and {include_php} tags and embedded PHP in templates. Embedded PHP will now be passed through as is.
- Removed all PHP_VERSION_ID and compare_version checks and conditional code blocks that are now no longer required
- Dropped deprecated SMARTY_RESOURCE_CHAR_SET and SMARTY_RESOURCE_DATE_FORMAT constants
- Dropped deprecated Smarty::muteExpectedErrors and Smarty::unmuteExpectedErrors API methods
- Dropped deprecated $smarty->getVariable() method. Use $smarty->getTemplateVars() instead.
- $smarty->registerResource() no longer accepts an array of callback functions
See the changelog for more details.
Switched CI from Travis to Github CI.
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Smarty error handler to fix new error levels in PHP8 for backwards compatibility
 | |
|  *
 | |
|  * @package    Smarty
 | |
|  * @subpackage PluginsInternal
 | |
|  * @author     Simon Wisselink
 | |
|  *
 | |
|  */
 | |
| class Smarty_Internal_ErrorHandler
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * Allows {$foo} where foo is unset.
 | |
|      * @var bool
 | |
|      */
 | |
|     public $allowUndefinedVars = true;
 | |
| 
 | |
|     /**
 | |
|      * Allows {$foo.bar} where bar is unset and {$foo.bar1.bar2} where either bar1 or bar2 is unset.
 | |
|      * @var bool
 | |
|      */
 | |
|     public $allowUndefinedArrayKeys = true;
 | |
| 
 | |
|     private $previousErrorHandler = null;
 | |
| 
 | |
|     /**
 | |
|      * Enable error handler to intercept errors
 | |
|      */
 | |
|     public function activate() {
 | |
|         /*
 | |
|             Error muting is done because some people implemented custom error_handlers using
 | |
|             https://php.net/set_error_handler and for some reason did not understand the following paragraph:
 | |
| 
 | |
|             It is important to remember that the standard PHP error handler is completely bypassed for the
 | |
|             error types specified by error_types unless the callback function returns FALSE.
 | |
|             error_reporting() settings will have no effect and your error handler will be called regardless -
 | |
|             however you are still able to read the current value of error_reporting and act appropriately.
 | |
|             Of particular note is that this value will be 0 if the statement that caused the error was
 | |
|             prepended by the @ error-control operator.
 | |
|         */
 | |
|         $this->previousErrorHandler = set_error_handler([$this, 'handleError']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Disable error handler
 | |
|      */
 | |
|     public function deactivate() {
 | |
|         restore_error_handler();
 | |
|         $this->previousErrorHandler = null;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Error Handler to mute expected messages
 | |
|      *
 | |
|      * @link https://php.net/set_error_handler
 | |
|      *
 | |
|      * @param integer $errno Error level
 | |
|      * @param         $errstr
 | |
|      * @param         $errfile
 | |
|      * @param         $errline
 | |
|      * @param         $errcontext
 | |
|      *
 | |
|      * @return bool
 | |
|      */
 | |
|     public function handleError($errno, $errstr, $errfile, $errline, $errcontext = [])
 | |
|     {
 | |
|         if ($this->allowUndefinedVars && $errstr == 'Attempt to read property "value" on null') {
 | |
|             return; // suppresses this error
 | |
|         }
 | |
| 
 | |
|         if ($this->allowUndefinedArrayKeys && preg_match(
 | |
|             '/^(Undefined array key|Trying to access array offset on value of type null)/',
 | |
|             $errstr
 | |
|         )) {
 | |
|             return; // suppresses this error
 | |
|         }
 | |
| 
 | |
|         // pass all other errors through to the previous error handler or to the default PHP error handler
 | |
|         return $this->previousErrorHandler ?
 | |
|             call_user_func($this->previousErrorHandler, $errno, $errstr, $errfile, $errline, $errcontext) : false;
 | |
|     }
 | |
| }
 |