@ -1,23 +1,22 @@ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					<?php  
					 
					 
					 
					<?php  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					/**  
					 
					 
					 
					/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * This file contains the error handler application component .  
					 
					 
					 
					 * ErrorHandler class file .  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @author Qiang Xue < qiang.xue @ gmail . com >   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @link http://www.yiiframework.com/  
					 
					 
					 
					 * @link http://www.yiiframework.com/  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @copyright Copyright ©  2008-2011  Yii Software LLC  
					 
					 
					 
					 * @copyright Copyright ©  2008-2012  Yii Software LLC  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 * @license http://www.yiiframework.com/license/  
					 
					 
					 
					 * @license http://www.yiiframework.com/license/  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 */  
					 
					 
					 
					 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					Yii::import('CHtml',true) ; 
					 
					 
					 
					namespace yii\base ; 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					/**  
					 
					 
					 
					/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * C ErrorHandler handles uncaught PHP errors and exceptions.  
					 
					 
					 
					 * ErrorHandler handles uncaught PHP errors and exceptions.  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * It displays these errors using appropriate views based on the  
					 
					 
					 
					 * It displays these errors using appropriate views based on the  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * nature of the error and the mode the application runs at.  
					 
					 
					 
					 * nature of the error and the mode the application runs at.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * It also chooses the most preferred language for displaying the error.  
					 
					 
					 
					 * It also chooses the most preferred language for displaying the error.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * C ErrorHandler uses two sets of views:  
					 
					 
					 
					 * ErrorHandler uses two sets of views:  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 * < ul >   
					 
					 
					 
					 * < ul >   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * < li > development views, named as < code > exception.php< / code > ;  
					 
					 
					 
					 * < li > development views, named as < code > exception.php< / code > ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * < li > production views, named as < code > error< StatusCode> .php< / code > ;  
					 
					 
					 
					 * < li > production views, named as < code > error< StatusCode> .php< / code > ;  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -33,7 +32,7 @@ Yii::import('CHtml',true); 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * For security reasons, they only display the error message without any  
					 
					 
					 
					 * For security reasons, they only display the error message without any  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * sensitive information.  
					 
					 
					 
					 * sensitive information.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * C ErrorHandler looks for the view templates from the following locations in order:  
					 
					 
					 
					 * ErrorHandler looks for the view templates from the following locations in order:  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 * < ol >   
					 
					 
					 
					 * < ol >   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * < li > < code > themes/ThemeName/views/system< / code > : when a theme is active.< / li >   
					 
					 
					 
					 * < li > < code > themes/ThemeName/views/system< / code > : when a theme is active.< / li >   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * < li > < code > protected/views/system< / code > < / li >   
					 
					 
					 
					 * < li > < code > protected/views/system< / code > < / li >   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -44,70 +43,151 @@ Yii::import('CHtml',true); 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * The property {@link maxSourceLines} can be changed to specify the number  
					 
					 
					 
					 * The property {@link maxSourceLines} can be changed to specify the number  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * of source code lines to be displayed in development views.  
					 
					 
					 
					 * of source code lines to be displayed in development views.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * C ErrorHandler is a core application component that can be accessed via  
					 
					 
					 
					 * ErrorHandler is a core application component that can be accessed via  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 * {@link CApplication::getErrorHandler()}.  
					 
					 
					 
					 * {@link CApplication::getErrorHandler()}.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @property array $error The error details. Null if there is no error.  
					 
					 
					 
					 * @property array $error The error details. Null if there is no error.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  
					 
					 
					 
					 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @author Qiang Xue < qiang.xue @ gmail . com >   
					 
					 
					 
					 * @author Qiang Xue < qiang.xue @ gmail . com >   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @version $Id$  
					 
					 
					 
					 * @since 2.0  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @package system.base  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 * @since 1.0  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 */  
					 
					 
					 
					 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					class C ErrorHandler extends C ApplicationComponent  
					 
					 
					 
					class ErrorHandler extends ApplicationComponent  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @var integer maximum number of source code lines to be displayed. Defaults to 25.  
					 
					 
					 
						 * @var integer maximum number of source code lines to be displayed. Defaults to 25.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						public $maxSourceLines=25;  
					 
					 
					 
						public $maxSourceLines  =  25;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @var integer maximum number of trace source code lines to be displayed. Defaults to 10.  
					 
					 
					 
						 * @var integer maximum number of trace source code lines to be displayed. Defaults to 10.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @since 1.1.6  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						public $maxTraceSourceLines = 10;  
					 
					 
					 
						public $maxTraceSourceLines = 10;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @var string the application administrator information (could be a name or email link). It is displayed in error pages to end users. Defaults to 'the webmaster'.  
					 
					 
					 
						 * @var string the application administrator information (could be a name or email link). It is displayed in error pages to end users. Defaults to 'the webmaster'.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						public $adminInfo='the webmaster';  
					 
					 
					 
						public $adminInfo  =  'the webmaster';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @var boolean whether to discard any existing page output before error display. Defaults to true.  
					 
					 
					 
						 * @var boolean whether to discard any existing page output before error display. Defaults to true.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						public $discardOutput=true;  
					 
					 
					 
						public $discardExisting Output  =  true;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @var string the route (eg 'site/error') to the controller action that will be used to display external errors.  
					 
					 
					 
						 * @var string the route (eg 'site/error') to the controller action that will be used to display external errors.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * Inside the action, it can retrieve the error information by Yii::app()->errorHandler->error.  
					 
					 
					 
						 * Inside the action, it can retrieve the error information by Yii::app()->errorHandler->error.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * This property defaults to null, meaning C ErrorHandler will handle the error display.  
					 
					 
					 
						 * This property defaults to null, meaning ErrorHandler will handle the error display.  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						public $errorAction;  
					 
					 
					 
						public $errorAction;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						private $_error;  
					 
					 
					 
						private $_error;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						public $exception;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						public $compactOutput;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						public function init()  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							set_exception_handler(array($this, 'handleException'));  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							set_error_handler(array($this, 'handleError'), error_reporting());  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						protected function logException($exception)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							$category = get_class($exception);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if ($exception instanceof HttpException) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$category .= '\\' . $exception->statusCode;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							} elseif ($exception instanceof \ErrorException) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$category .= '\\' . $exception->getSeverity();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							\Yii::error((string)$exception, $category);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						protected function clearOutput()  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							// the following manual level counting is to deal with zlib.output_compression set to On  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							for ($level = ob_get_level(); $level > 0; --$level) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								@ob_end_clean();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						protected function simple()  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if (YII_DEBUG) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								echo '< h1 > ' . get_class($exception) . "< / h1 > \n";  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								echo '< p > ' . $exception->getMessage() . ' (' . $exception->getFile() . ':' . $exception->getLine() . ')< / p > ';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								echo '< pre > ' . $exception->getTraceAsString() . '< / pre > ';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							} else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								echo '< h1 > ' . get_class($exception) . "< / h1 > \n";  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								echo '< p > ' . $exception->getMessage() . '< / p > ';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * Handles the exception/error event.  
					 
					 
					 
						 * @param \Exception $exception  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						 * This method is invoked by the application whenever it captures  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * an exception or PHP error.  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param CEvent $event the event containing the exception/error information  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						public function handle($event)  
					 
					 
					 
						public function handleException($exception)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							// set event as handled to prevent it from being handled by other event handlers  
					 
					 
					 
							$this->exception = $exception;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							$event->handled=true;  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if($this->discardOutput)  
					 
					 
					 
							// disable error capturing to avoid recursive errors  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							restore_error_handler();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								// the following manual level counting is to deal with zlib.output_compression set to On  
					 
					 
					 
							restore_exception_handler();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								for($level=ob_get_level();$level>0;--$level)  
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
							$this->logException($exception);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									@ob_end_clean();  
					 
					 
					 
							if ($this->discardExistingOutput) {  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$this->clearOutput();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if ($this->compactOutput === null) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								// not in Web application, or not in AJAX request  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$this->compactOutput = !(\Yii::$application instanceof \yii\web\Application) || isset($_SERVER['HTTP_X_REQUESTED_WITH']) & &  $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if ($this->compactOutput) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$this->simple();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								return;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if (($trace = $this->getExactTrace($exception)) === null) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$fileName = $exception->getFile();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$errorLine = $exception->getLine();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							} else {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$fileName = $trace['file'];  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$errorLine = $trace['line'];  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							$trace = $exception->getTrace();  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							foreach ($trace as $i => $t) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								if (!isset($t['file'])) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
									$trace[$i]['file'] = 'unknown';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								if (!isset($t['line'])) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
									$trace[$i]['line'] = 0;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								if (!isset($t['function'])) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
									$trace[$i]['function'] = 'unknown';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								unset($trace[$i]['object']);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							$this->_error = $data = array(  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'code' => $exception instanceof HttpException ? $exception->statusCode : 500,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'type' => get_class($exception),  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'errorCode' => $exception->getCode(),  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'message' => $exception->getMessage(),  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'file' => $fileName,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'line' => $errorLine,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'trace' => $exception->getTraceAsString(),  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								'traces' => $trace,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							if (!headers_sent()) {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								header("HTTP/1.0 {$data['code']} " . get_class($exception));  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if($event instanceof CExceptionEvent)  
					 
					 
					 
							if ($exception instanceof HttpException || !YII_DEBUG) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$this->handleException($event->exception);  
					 
					 
					 
								$this->render('error', $data);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							else // CErrorEvent  
					 
					 
					 
							} else {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$this->handleError($event);  
					 
					 
					 
								$this->render('exception', $data);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -130,103 +210,38 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * Handles the exception.  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param Exception $exception the exception captured  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function handleException($exception)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$app=Yii::app();  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if($app instanceof CWebApplication)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(($trace=$this->getExactTrace($exception))===null)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$fileName=$exception->getFile();  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$errorLine=$exception->getLine();  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$fileName=$trace['file'];  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$errorLine=$trace['line'];  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$trace = $exception->getTrace();  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								foreach($trace as $i=>$t)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									if(!isset($t['file']))  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$trace[$i]['file']='unknown';  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									if(!isset($t['line']))  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$trace[$i]['line']=0;  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									if(!isset($t['function']))  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$trace[$i]['function']='unknown';  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									unset($trace[$i]['object']);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$this->_error=$data=array(  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'code'=>($exception instanceof CHttpException)?$exception->statusCode:500,  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'type'=>get_class($exception),  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'errorCode'=>$exception->getCode(),  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'message'=>$exception->getMessage(),  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'file'=>$fileName,  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'line'=>$errorLine,  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'trace'=>$exception->getTraceAsString(),  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									'traces'=>$trace,  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!headers_sent())  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									header("HTTP/1.0 {$data['code']} ".get_class($exception));  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if($exception instanceof CHttpException || !YII_DEBUG)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$this->render('error',$data);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									if($this->isAjaxRequest())  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$app->displayException($exception);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									else  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$this->render('exception',$data);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							else  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$app->displayException($exception);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * Handles the PHP error.  
					 
					 
					 
						 * Handles the PHP error.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param CErrorEvent $event the PHP error event  
					 
					 
					 
						 * @param CErrorEvent $event the PHP error event  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function handleError($event)  
					 
					 
					 
						protected function handleError($event)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$trace=debug_backtrace();  
					 
					 
					 
							$trace = debug_backtrace();  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							// skip the first 3 stacks as they do not tell the error position  
					 
					 
					 
							// skip the first 3 stacks as they do not tell the error position  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if(count($trace)>3)  
					 
					 
					 
							if (count($trace) > 3)  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$trace=array_slice($trace,3);  
					 
					 
					 
								$trace = array_slice($trace, 3);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							$traceString='';  
					 
					 
					 
							$traceString = '';  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							foreach($trace as $i=>$t)  
					 
					 
					 
							foreach ($trace as $i => $t)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!isset($t['file']))  
					 
					 
					 
								if (!isset($t['file']))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$trace[$i]['file']='unknown';  
					 
					 
					 
									$trace[$i]['file'] = 'unknown';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!isset($t['line']))  
					 
					 
					 
								if (!isset($t['line']))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$trace[$i]['line']=0;  
					 
					 
					 
									$trace[$i]['line'] = 0;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!isset($t['function']))  
					 
					 
					 
								if (!isset($t['function']))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$trace[$i]['function']='unknown';  
					 
					 
					 
									$trace[$i]['function'] = 'unknown';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$traceString.="#$i {$trace[$i]['file']}({$trace[$i]['line']}): ";  
					 
					 
					 
								$traceString .= "#$i {$trace[$i]['file']}({$trace[$i]['line']}): ";  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								if(isset($t['object']) & &  is_object($t['object']))  
					 
					 
					 
								if (isset($t['object']) & &  is_object($t['object']))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$traceString.=get_class($t['object']).'->';  
					 
					 
					 
									$traceString .= get_class($t['object']) . '->';  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$traceString.="{$trace[$i]['function']}()\n";  
					 
					 
					 
								$traceString .= "{$trace[$i]['function']}()\n";  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								unset($trace[$i]['object']);  
					 
					 
					 
								unset($trace[$i]['object']);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$app=Yii::app();  
					 
					 
					 
							$app = Yii::app();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							if($app instanceof CWebApplication)  
					 
					 
					 
							if ($app instanceof CWebApplication) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
								switch ($event->code)  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								switch($event->code)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
								{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									case E_WARNING:  
					 
					 
					 
									case E_WARNING:  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$type = 'PHP warning';  
					 
					 
					 
										$type = 'PHP warning';  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -249,51 +264,41 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									default:  
					 
					 
					 
									default:  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$type = 'PHP error';  
					 
					 
					 
										$type = 'PHP error';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$this->_error=$data=array(  
					 
					 
					 
								$this->_error  =  $data  =  array(  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'code'=>500,  
					 
					 
					 
									'code'  =>  500,  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'type'=>$type,  
					 
					 
					 
									'type'  =>  $type,  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'message'=>$event->message,  
					 
					 
					 
									'message'  =>  $event->message,  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'file'=>$event->file,  
					 
					 
					 
									'file'  =>  $event->file,  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'line'=>$event->line,  
					 
					 
					 
									'line'  =>  $event->line,  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'trace'=>$traceString,  
					 
					 
					 
									'trace'  =>  $traceString,  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									'traces'=>$trace,  
					 
					 
					 
									'traces'  =>  $trace,  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								);  
					 
					 
					 
								);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!headers_sent())  
					 
					 
					 
								if  (!headers_sent())  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									header("HTTP/1.0 500 PHP Error");  
					 
					 
					 
									header("HTTP/1.0 500 PHP Error");  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if($this->isAjaxRequest())  
					 
					 
					 
								if  ($this->isAjaxRequest())  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$app->displayError($event->code,$event->message,$event->file,$event->line);  
					 
					 
					 
									$app->displayError($event->code,  $event->message,  $event->file,  $event->line);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								else if(YII_DEBUG)  
					 
					 
					 
								else if  (YII_DEBUG)  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$this->render('exception',$data);  
					 
					 
					 
									$this->render('exception',  $data);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								else  
					 
					 
					 
								else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$this->render('error',$data);  
					 
					 
					 
									$this->render('error',  $data);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							else  
					 
					 
					 
							else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$app->displayError($event->code,$event->message,$event->file,$event->line);  
					 
					 
					 
								$app->displayError($event->code, $event->message, $event->file, $event->line);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * whether the current request is an AJAX (XMLHttpRequest) request.  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @return boolean whether the current request is an AJAX request.  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function isAjaxRequest()  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return isset($_SERVER['HTTP_X_REQUESTED_WITH']) & &  $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/**  
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * Returns the exact trace where the problem occurs.  
					 
					 
					 
						 * Returns the exact trace where the problem occurs.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param Exception $exception the uncaught exception  
					 
					 
					 
						 * @param \Exception $exception the uncaught exception  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						 * @return array the exact trace where the problem occurs  
					 
					 
					 
						 * @return array the exact trace where the problem occurs  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function getExactTrace($exception)  
					 
					 
					 
						protected function getExactTrace($exception)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$traces=$exception->getTrace();  
					 
					 
					 
							$traces = $exception->getTrace();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
							foreach ($traces as $trace) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							foreach($traces as $trace)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								// property access exception  
					 
					 
					 
								// property access exception  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(isset($trace['function']) & &  ($trace['function']==='__get' || $trace['function']==='__set'))  
					 
					 
					 
								if (isset($trace['function']) & &  ($trace['function'] === '__get' || $trace['function'] === '__set')) {  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									return $trace;  
					 
					 
					 
									return $trace;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return null;  
					 
					 
					 
							return null;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -304,17 +309,17 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * See {@link getViewFile} for how a view file is located given its name.  
					 
					 
					 
						 * See {@link getViewFile} for how a view file is located given its name.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param array $data data to be passed to the view  
					 
					 
					 
						 * @param array $data data to be passed to the view  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function render($view,$data)  
					 
					 
					 
						protected function render($view,  $data)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if($view==='error' & &  $this->errorAction!==null)  
					 
					 
					 
							if  ($view  ===  'error' & &  $this->errorAction  !==  null)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								Yii::app()->runController($this->errorAction);  
					 
					 
					 
								Yii::app()->runController($this->errorAction);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							else  
					 
					 
					 
							else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								// additional information to be passed to view  
					 
					 
					 
								// additional information to be passed to view  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$data['version']=$this->getVersionInfo();  
					 
					 
					 
								$data['version']  =  $this->getVersionInfo();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$data['time']=time();  
					 
					 
					 
								$data['time']  =  time();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$data['admin']=$this->adminInfo;  
					 
					 
					 
								$data['admin']  =  $this->adminInfo;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								include($this->getViewFile($view,$data['code']));  
					 
					 
					 
								include($this->getViewFile($view,  $data['code']));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -324,21 +329,20 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param integer $code HTTP status code  
					 
					 
					 
						 * @param integer $code HTTP status code  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @return string view file path  
					 
					 
					 
						 * @return string view file path  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function getViewFile($view,$code)  
					 
					 
					 
						protected function getViewFile($view,  $code)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$viewPaths=array(  
					 
					 
					 
							$viewPaths  =  array(  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								Yii::app()->getTheme()===null ? null :   Yii::app()->getTheme()->getSystemViewPath(),  
					 
					 
					 
								Yii::app()->getTheme()  ===  null ? null : Yii::app()->getTheme()->getSystemViewPath(),  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								Yii::app() instanceof CWebApplication ? Yii::app()->getSystemViewPath() : null,  
					 
					 
					 
								Yii::app() instanceof CWebApplication ? Yii::app()->getSystemViewPath() : null,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								YII_PATH.DIRECTORY_SEPARATOR.'views',  
					 
					 
					 
								YII_PATH  .  DIRECTORY_SEPARATOR  .  'views',  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							);  
					 
					 
					 
							);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							foreach($viewPaths as $i=>$viewPath)  
					 
					 
					 
							foreach  ($viewPaths as $i  =>  $viewPath)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if($viewPath!==null)  
					 
					 
					 
								if ($viewPath !== null) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
									$viewFile = $this->getViewFileInternal($viewPath, $view, $code, $i === 2 ? 'en_us' : null);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									 $viewFile=$this->getViewFileInternal($viewPath,$view,$code,$i===2?'en_us':null);  
					 
					 
					 
									if (is_file($viewFile))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									 if(is_file($viewFile))  
					 
					 
					 
										return $viewFile;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									 	 return $viewFile;  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -351,17 +355,16 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param string $srcLanguage the language that the view file is in  
					 
					 
					 
						 * @param string $srcLanguage the language that the view file is in  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @return string view file path  
					 
					 
					 
						 * @return string view file path  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function getViewFileInternal($viewPath,$view,$code,$srcLanguage=null)  
					 
					 
					 
						protected function getViewFileInternal($viewPath,  $view,  $code,  $srcLanguage  =  null)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$app=Yii::app();  
					 
					 
					 
							$app = Yii::app();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							if($view==='error')  
					 
					 
					 
							if ($view === 'error') {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
								$viewFile = $app->findLocalizedFile($viewPath . DIRECTORY_SEPARATOR . "error{$code}.php", $srcLanguage);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$viewFile=$app->findLocalizedFile($viewPath.DIRECTORY_SEPARATOR."error{$code}.php",$srcLanguage);  
					 
					 
					 
								if (!is_file($viewFile))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!is_file($viewFile))  
					 
					 
					 
									$viewFile = $app->findLocalizedFile($viewPath . DIRECTORY_SEPARATOR . 'error.php', $srcLanguage);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$viewFile=$app->findLocalizedFile($viewPath.DIRECTORY_SEPARATOR.'error.php',$srcLanguage);  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							else  
					 
					 
					 
							else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$viewFile=$viewPath.DIRECTORY_SEPARATOR."exception.php";  
					 
					 
					 
								$viewFile  =  $viewPath  .  DIRECTORY_SEPARATOR  .  "exception.php";  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							return $viewFile;  
					 
					 
					 
							return $viewFile;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -372,14 +375,14 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function getVersionInfo()  
					 
					 
					 
						protected function getVersionInfo()  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if(YII_DEBUG)  
					 
					 
					 
							if (YII_DEBUG) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
								$version = '< a  href = "http://www.yiiframework.com/" > Yii Framework< / a > /' . \Yii::getVersion();  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$version='< a  href = "http://www.yiiframework.com/" > Yii Framework< / a > /'.Yii::getVersion();  
					 
					 
					 
								if (isset($_SERVER['SERVER_SOFTWARE'])) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								if(isset($_SERVER['SERVER_SOFTWARE']))  
					 
					 
					 
									$version = $_SERVER['SERVER_SOFTWARE'] . ' ' . $version;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$version=$_SERVER['SERVER_SOFTWARE'].' '.$version;  
					 
					 
					 
								}  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							} else {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
								$version = '';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							else  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$version='';  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return $version;  
					 
					 
					 
							return $version;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -391,47 +394,43 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function argumentsToString($args)  
					 
					 
					 
						protected function argumentsToString($args)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$count=0;  
					 
					 
					 
							$count  =  0;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$isAssoc=$args!==array_values($args);  
					 
					 
					 
							$isAssoc  =  $args  !==  array_values($args);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							foreach($args as $key => $value)  
					 
					 
					 
							foreach  ($args as $key => $value)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$count++;  
					 
					 
					 
								$count++;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if($count>=5)  
					 
					 
					 
								if ($count >= 5) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
									if ($count > 5)  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									if($count>5)  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
										unset($args[$key]);  
					 
					 
					 
										unset($args[$key]);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									else  
					 
					 
					 
									else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$args[$key]='...';  
					 
					 
					 
										$args[$key]  =  '...';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									continue;  
					 
					 
					 
									continue;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(is_object($value))  
					 
					 
					 
								if  (is_object($value))  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = get_class($value);  
					 
					 
					 
									$args[$key] = get_class($value);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else if(is_bool($value))  
					 
					 
					 
								else if  (is_bool($value))  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = $value ? 'true' : 'false';  
					 
					 
					 
									$args[$key] = $value ? 'true' : 'false';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else if(is_string($value))  
					 
					 
					 
								else if (is_string($value)) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
									if (strlen($value) > 64)  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									if(strlen($value)>64)  
					 
					 
					 
										$args[$key] = '"' . substr($value, 0, 64) . '..."';  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
										$args[$key] = '"'.substr($value,0,64).'..."';  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									else  
					 
					 
					 
									else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										$args[$key] = '"'.$value.'"';  
					 
					 
					 
										$args[$key] = '"'  .  $value  .  '"';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else if(is_array($value))  
					 
					 
					 
								else if  (is_array($value))  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = 'array('.$this->argumentsToString($value).')';  
					 
					 
					 
									$args[$key] = 'array('  .  $this->argumentsToString($value)  .  ')';  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								else if($value===null)  
					 
					 
					 
								else if  ($value  ===  null)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = 'null';  
					 
					 
					 
									$args[$key] = 'null';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else if(is_resource($value))  
					 
					 
					 
								else if  (is_resource($value))  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = 'resource';  
					 
					 
					 
									$args[$key] = 'resource';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								if(is_string($key))  
					 
					 
					 
								if (is_string($key)) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
									$args[$key] = '"' . $key . '" => ' . $args[$key];  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = '"'.$key.'" => '.$args[$key];  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								else if($isAssoc)  
					 
					 
					 
								else if ($isAssoc) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								{  
					 
					 
					 
									$args[$key] = $key . ' => ' . $args[$key];  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$args[$key] = $key.' => '.$args[$key];  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								}  
					 
					 
					 
								}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$out = implode(", ", $args);  
					 
					 
					 
							$out = implode(", ", $args);  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -446,10 +445,9 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function isCoreCode($trace)  
					 
					 
					 
						protected function isCoreCode($trace)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if(isset($trace['file']))  
					 
					 
					 
							if (isset($trace['file'])) {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
								$systemPath = realpath(dirname(__FILE__) . '/..');  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$systemPath=realpath(dirname(__FILE__).'/..');  
					 
					 
					 
								return $trace['file'] === 'unknown' || strpos(realpath($trace['file']), $systemPath . DIRECTORY_SEPARATOR) === 0;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								return $trace['file']==='unknown' || strpos(realpath($trace['file']),$systemPath.DIRECTORY_SEPARATOR)===0;  
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return false;  
					 
					 
					 
							return false;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -461,27 +459,49 @@ class CErrorHandler extends CApplicationComponent 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @param integer $maxLines maximum number of lines to display  
					 
					 
					 
						 * @param integer $maxLines maximum number of lines to display  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 * @return string the rendering result  
					 
					 
					 
						 * @return string the rendering result  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						 */  
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						protected function renderSourceCode($file,$errorLine,$maxLines)  
					 
					 
					 
						protected function renderSourceCode($file,  $errorLine,  $maxLines)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$errorLine--;	 // adjust line number to 0-based from 1-based  
					 
					 
					 
							$errorLine--;  // adjust line number to 0-based from 1-based  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							if($errorLine< 0  | |  ( $ lines = @file($file))= == false  | |  ( $ lineCount = count($lines))<= $errorLine)   
					 
					 
					 
							if  ($errorLine  <   0  | |  ( $ lines   =   @file($file))   = = =  false  | |  ( $ lineCount   =   count($lines))   < =  $ errorLine )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								return '';  
					 
					 
					 
								return '';  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$halfLines=(int)($maxLines/2);  
					 
					 
					 
							$halfLines  =  (int)($maxLines  /  2);  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							$beginLine=$errorLine-$halfLines>0 ? $errorLine-$halfLines:0;  
					 
					 
					 
							$beginLine  =  $errorLine  -  $halfLines  >  0 ? $errorLine  -  $halfLines  :  0;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							$endLine=$errorLine+$halfLines< $lineCount?$errorLine+$halfLines:$lineCount-1;  
					 
					 
					 
							$endLine  =  $errorLine  +  $halfLines  <   $lineCount  ?  $errorLine  +  $halfLines  :  $lineCount  -  1;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							$lineNumberWidth=strlen($endLine+1);  
					 
					 
					 
							$lineNumberWidth  =  strlen($endLine  +  1);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							$output='';  
					 
					 
					 
							$output  =  '';  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
							for($i=$beginLine;$i< =$endLine;++$i)  
					 
					 
					 
							for  ($i  =  $beginLine;  $i  < =  $endLine;  ++$i)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								$isErrorLine = $i===$errorLine;  
					 
					 
					 
								$isErrorLine = $i  ===  $errorLine;  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								$code=sprintf("< span  class = \"ln".($isErrorLine?'  error-ln ' : ' ' ) . " \ " > %0{$lineNumberWidth}d< / span >  %s",$i+1,CHtml::encode(str_replace("\t",'    ',$lines[$i])));  
					 
					 
					 
								$code  =  sprintf("< span  class = \"ln"   .   ( $ isErrorLine   ?   '  error-ln '   :   ' ' )   .   " \ " > %0{$lineNumberWidth}d< / span >  %s",  $i  +  1,  CHtml::encode(str_replace("\t",  '    ',  $lines[$i])));  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
								if(!$isErrorLine)  
					 
					 
					 
								if  (!$isErrorLine)  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
									$output.=$code;  
					 
					 
					 
									$output  .=  $code;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
								else  
					 
					 
					 
								else  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									$output.='< span  class = "error" > '.$code.'< / span > ';  
					 
					 
					 
									$output  .=  '< span  class = "error" > '  .  $code  .  '< / span > ';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return '< div  class = "code" > < pre > '.$output.'< / pre > < / div > ';  
					 
					 
					 
							return '< div  class = "code" > < pre > ' . $output . '< / pre > < / div > ';  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						/**  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * Handles PHP execution errors such as warnings, notices.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * This method is implemented as a PHP error handler. It requires  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * that constant YII_ENABLE_ERROR_HANDLER be defined true.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * This method will first raise an `error` event.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * If the error is not handled by any event handler, it will call  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * {@link getErrorHandler errorHandler} to process the error.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * The application will be terminated by this method.  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 *  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * @param integer $code the level of the error raised  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * @param string $message the error message  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * @param string $file the filename that the error was raised in  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 * @param integer $line the line number the error was raised at  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						 */  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						public function handleError($code, $message, $file, $line)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							throw new \ErrorException($message, 0, $code, $file, $line);  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}