lt = $_jpg_messages; } public 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; public function JpGraphErrObject() { // Empty. Reserved for future use } public function SetTitle($aTitle) { $this->iTitle = $aTitle; } public function SetStrokeDest($aDest) { $this->iDest = $aDest; } // If aHalt is true then execution can't continue. Typical used for fatal errors public function 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 { public 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 displayed die($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 handler if (USE_IMAGE_ERROR_HANDLER) { JpGraphError::Install("JpGraphErrObjectImg"); } else { JpGraphError::Install("JpGraphErrObject"); }