Blame | Last modification | View Log | RSS feed
<?php//=======================================================================// File: JPGRAPH_ERRHANDLER.PHP// Description: Error handler class together with handling of localized// error messages. All localized error messages are stored// in a separate file under the "lang/" subdirectory.// Created: 2006-09-24// Ver: $Id: jpgraph_errhandler.inc.php 770 2006-09-24 20:19:11Z ljp $//// Copyright 2006 (c) Aditus Consulting. All rights reserved.//========================================================================GLOBAL $__jpg_err_locale ;$__jpg_err_locale = DEFAULT_ERR_LOCALE;class ErrMsgText {private $lt=NULL;function ErrMsgText() {GLOBAL $__jpg_err_locale;$file = 'lang/'.$__jpg_err_locale.'.inc.php';// If the chosen locale doesn't exist try englishif( !file_exists(dirname(__FILE__).'/'.$file) ) {$__jpg_err_locale = 'en';}$file = 'lang/'.$__jpg_err_locale.'.inc.php';if( !file_exists(dirname(__FILE__).'/'.$file) ) {die('Internal error: Chosen locale file for error messages does not exist.');}require_once($file);$this->lt = $_jpg_messages;}function Get($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) {GLOBAL $__jpg_err_locale;if( !isset($this->lt[$errnbr]) ) {return 'Internal error: The specified error message ('.$errnbr.') does not exist in the chosen locale ('.$__jpg_err_locale.')';}$ea = $this->lt[$errnbr];$j=0;if( $a1 !== null ) {$argv[$j++] = $a1;if( $a2 !== null ) {$argv[$j++] = $a2;if( $a3 !== null ) {$argv[$j++] = $a3;if( $a4 !== null ) {$argv[$j++] = $a4;if( $a5 !== null ) {$argv[$j++] = $a5;}}}}}$numargs = $j;if( $ea[1] != $numargs ) {// Error message argument count do not match.// Just return the error message without arguments.return $ea[0];}switch( $numargs ) {case 1:$msg = sprintf($ea[0],$argv[0]);break;case 2:$msg = sprintf($ea[0],$argv[0],$argv[1]);break;case 3:$msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2]);break;case 4:$msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3]);break;case 5:$msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3],$argv[4]);break;case 0:default:$msg = sprintf($ea[0]);break;}return $msg;}}//// A wrapper class that is used to access the specified error object// (to hide the global error parameter and avoid having a GLOBAL directive// in all methods.//class JpGraphError {private static $__jpg_err;public static function Install($aErrObject) {self::$__jpg_err = new $aErrObject;}public static function Raise($aMsg,$aHalt=true){self::$__jpg_err->Raise($aMsg,$aHalt);}public static function SetErrLocale($aLoc) {GLOBAL $__jpg_err_locale ;$__jpg_err_locale = $aLoc;}public static function RaiseL($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) {$t = new ErrMsgText();$msg = $t->Get($errnbr,$a1,$a2,$a3,$a4,$a5);self::$__jpg_err->Raise($msg);}}//// First of all set up a default error handler////=============================================================// The default trivial text error handler.//=============================================================class JpGraphErrObject {protected $iTitle = "JpGraph Error";protected $iDest = false;function JpGraphErrObject() {// Empty. Reserved for future use}function SetTitle($aTitle) {$this->iTitle = $aTitle;}function SetStrokeDest($aDest) {$this->iDest = $aDest;}// If aHalt is true then execution can't continue. Typical used for fatal errorsfunction Raise($aMsg,$aHalt=true) {$aMsg = $this->iTitle.' '.$aMsg;if ($this->iDest) {$f = @fopen($this->iDest,'a');if( $f ) {@fwrite($f,$aMsg);@fclose($f);}}else {echo $aMsg;}if( $aHalt )die();}}//==============================================================// An image based error handler//==============================================================class JpGraphErrObjectImg extends JpGraphErrObject {function Raise($aMsg,$aHalt=true) {$img_iconerror ='iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV'.'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'.'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY'.'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'.'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'.'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4'.'2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+'.'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6'.'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3'.'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0'.'6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS'.'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk'.'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc'.'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx'.'qL72fwAAAABJRU5ErkJggg==' ;if( function_exists("imagetypes") )$supported = imagetypes();else$supported = 0;if( !function_exists('imagecreatefromstring') )$supported = 0;if( ob_get_length() || headers_sent() || !($supported & IMG_PNG) ) {// Special case for headers already sent or that the installation doesn't support// the PNG format (which the error icon is encoded in).// Dont return an image since it can't be displayeddie($this->iTitle.' '.$aMsg);}$aMsg = wordwrap($aMsg,55);$lines = substr_count($aMsg,"\n");// Create the error icon GD$erricon = Image::CreateFromString(base64_decode($img_iconerror));// Create an image that contains the error text.$w=400;$h=100 + 15*max(0,$lines-3);$img = new Image($w,$h);// Drop shadow$img->SetColor("gray");$img->FilledRectangle(5,5,$w-1,$h-1,10);$img->SetColor("gray:0.7");$img->FilledRectangle(5,5,$w-3,$h-3,10);// Window background$img->SetColor("lightblue");$img->FilledRectangle(1,1,$w-5,$h-5);$img->CopyCanvasH($img->img,$erricon,5,30,0,0,40,40);// Window border$img->SetColor("black");$img->Rectangle(1,1,$w-5,$h-5);$img->Rectangle(0,0,$w-4,$h-4);// Window top row$img->SetColor("darkred");for($y=3; $y < 18; $y += 2 )$img->Line(1,$y,$w-6,$y);// "White shadow"$img->SetColor("white");// Left window edge$img->Line(2,2,2,$h-5);$img->Line(2,2,$w-6,2);// "Gray button shadow"$img->SetColor("darkgray");// Gray window shadow$img->Line(2,$h-6,$w-5,$h-6);$img->Line(3,$h-7,$w-5,$h-7);// Window title$m = floor($w/2-5);$l = 100;$img->SetColor("lightgray:1.3");$img->FilledRectangle($m-$l,2,$m+$l,16);// Stroke text$img->SetColor("darkred");$img->SetFont(FF_FONT2,FS_BOLD);$img->StrokeText($m-50,15,$this->iTitle);$img->SetColor("black");$img->SetFont(FF_FONT1,FS_NORMAL);$txt = new Text($aMsg,52,25);$txt->Align("left","top");$txt->Stroke($img);if ($this->iDest) {$img->Stream($this->iDest);} else {$img->Headers();$img->Stream();}if( $aHalt )die();}}// Install the default error handlerif( USE_IMAGE_ERROR_HANDLER ) {JpGraphError::Install("JpGraphErrObjectImg");}else {JpGraphError::Install("JpGraphErrObject");}?>