Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
<?php
2
//=======================================================================
3
// File:	JPGRAPH_ERRHANDLER.PHP
4
// Description:	Error handler class together with handling of localized
5
//		error messages. All localized error messages are stored
6
//		in a separate file under the "lang/" subdirectory.
7
// Created: 	2006-09-24
8
// Ver:		$Id: jpgraph_errhandler.inc.php 770 2006-09-24 20:19:11Z ljp $
9
//
10
// Copyright 2006 (c) Aditus Consulting. All rights reserved.
11
//========================================================================
12
 
13
 
14
GLOBAL $__jpg_err_locale ;
15
$__jpg_err_locale = DEFAULT_ERR_LOCALE;
16
 
17
class ErrMsgText {
18
    private $lt=NULL;
19
    function ErrMsgText() {
20
	GLOBAL $__jpg_err_locale;
21
	$file = 'lang/'.$__jpg_err_locale.'.inc.php';
22
 
23
	// If the chosen locale doesn't exist try english
24
	if( !file_exists(dirname(__FILE__).'/'.$file) ) {
25
	    $__jpg_err_locale = 'en';
26
	}
27
 
28
	$file = 'lang/'.$__jpg_err_locale.'.inc.php';
29
	if( !file_exists(dirname(__FILE__).'/'.$file) ) {
30
	    die('Internal error: Chosen locale file for error messages does not exist.');
31
	}
32
	require_once($file);
33
	$this->lt = $_jpg_messages;
34
    }
35
 
36
    function Get($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) {
37
	GLOBAL $__jpg_err_locale;
38
	if( !isset($this->lt[$errnbr]) ) {
39
	    return 'Internal error: The specified error message ('.$errnbr.') does not exist in the chosen locale ('.$__jpg_err_locale.')';
40
	}
41
	$ea = $this->lt[$errnbr];
42
	$j=0;
43
	if( $a1 !== null ) {
44
	    $argv[$j++] = $a1;
45
	    if( $a2 !== null ) {
46
		$argv[$j++] = $a2;
47
		if( $a3 !== null ) {
48
		    $argv[$j++] = $a3;
49
		    if( $a4 !== null ) {
50
			$argv[$j++] = $a4;
51
			if( $a5 !== null ) {
52
			    $argv[$j++] = $a5;
53
			}
54
		    }
55
		}
56
	    }
57
	}
58
	$numargs = $j;
59
	if( $ea[1] != $numargs ) {
60
	    // Error message argument count do not match.
61
	    // Just return the error message without arguments.
62
	    return $ea[0];
63
	}
64
	switch( $numargs ) {
65
	    case 1:
66
		$msg = sprintf($ea[0],$argv[0]);
67
		break;
68
	    case 2:
69
		$msg = sprintf($ea[0],$argv[0],$argv[1]);
70
		break;
71
	    case 3:
72
		$msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2]);
73
		break;
74
	    case 4:
75
		$msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3]);
76
		break;
77
	    case 5:
78
		$msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3],$argv[4]);
79
		break;
80
	    case 0:
81
	    default:
82
		$msg = sprintf($ea[0]);
83
		break;
84
	}
85
	return $msg;
86
    }
87
}
88
 
89
//
90
// A wrapper class that is used to access the specified error object
91
// (to hide the global error parameter and avoid having a GLOBAL directive
92
// in all methods.
93
//
94
class JpGraphError {
95
    private static $__jpg_err;
96
    public static function Install($aErrObject) {
97
	self::$__jpg_err = new $aErrObject;
98
    }
99
    public static function Raise($aMsg,$aHalt=true){
100
	self::$__jpg_err->Raise($aMsg,$aHalt);
101
    }
102
    public static function SetErrLocale($aLoc) {
103
	GLOBAL $__jpg_err_locale ;
104
	$__jpg_err_locale = $aLoc;
105
    }
106
    public static function RaiseL($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) {
107
	$t = new ErrMsgText();
108
	$msg = $t->Get($errnbr,$a1,$a2,$a3,$a4,$a5);
109
	self::$__jpg_err->Raise($msg);
110
    }
111
}
112
 
113
//
114
// First of all set up a default error handler
115
//
116
 
117
//=============================================================
118
// The default trivial text error handler.
119
//=============================================================
120
class JpGraphErrObject {
121
 
122
    protected $iTitle = "JpGraph Error";
123
    protected $iDest = false;
124
 
125
 
126
    function JpGraphErrObject() {
127
	// Empty. Reserved for future use
128
    }
129
 
130
    function SetTitle($aTitle) {
131
	$this->iTitle = $aTitle;
132
    }
133
 
134
    function SetStrokeDest($aDest) {
135
	$this->iDest = $aDest;
136
    }
137
 
138
    // If aHalt is true then execution can't continue. Typical used for fatal errors
139
    function Raise($aMsg,$aHalt=true) {
140
	$aMsg = $this->iTitle.' '.$aMsg;
141
	if ($this->iDest) {
142
	    $f = @fopen($this->iDest,'a');
143
	    if( $f ) {
144
		@fwrite($f,$aMsg);
145
		@fclose($f);
146
	    }
147
	}
148
	else {
149
	    echo $aMsg;
150
	}
151
	if( $aHalt )
152
	    die();
153
    }
154
}
155
 
156
//==============================================================
157
// An image based error handler
158
//==============================================================
159
class JpGraphErrObjectImg extends JpGraphErrObject {
160
 
161
    function Raise($aMsg,$aHalt=true) {
162
	$img_iconerror =
163
	    'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV'.
164
	    'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'.
165
	    'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY'.
166
	    'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'.
167
	    'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'.
168
	    'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4'.
169
	    '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+'.
170
	    'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6'.
171
	    'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3'.
172
	    'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0'.
173
	    '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS'.
174
	    'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk'.
175
	    'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc'.
176
	    'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx'.
177
	    'qL72fwAAAABJRU5ErkJggg==' ;
178
 
179
	if( function_exists("imagetypes") )
180
	    $supported = imagetypes();
181
	else
182
	    $supported = 0;
183
 
184
	if( !function_exists('imagecreatefromstring') )
185
	    $supported = 0;
186
 
187
	if( ob_get_length() || headers_sent() || !($supported & IMG_PNG) ) {
188
	    // Special case for headers already sent or that the installation doesn't support
189
	    // the PNG format (which the error icon is encoded in).
190
	    // Dont return an image since it can't be displayed
191
	    die($this->iTitle.' '.$aMsg);
192
	}
193
 
194
	$aMsg = wordwrap($aMsg,55);
195
	$lines = substr_count($aMsg,"\n");
196
 
197
	// Create the error icon GD
198
	$erricon = Image::CreateFromString(base64_decode($img_iconerror));
199
 
200
	// Create an image that contains the error text.
201
	$w=400;
202
	$h=100 + 15*max(0,$lines-3);
203
 
204
	$img = new Image($w,$h);
205
 
206
 
207
	// Drop shadow
208
	$img->SetColor("gray");
209
	$img->FilledRectangle(5,5,$w-1,$h-1,10);
210
	$img->SetColor("gray:0.7");
211
	$img->FilledRectangle(5,5,$w-3,$h-3,10);
212
 
213
	// Window background
214
	$img->SetColor("lightblue");
215
	$img->FilledRectangle(1,1,$w-5,$h-5);
216
	$img->CopyCanvasH($img->img,$erricon,5,30,0,0,40,40);
217
 
218
	// Window border
219
	$img->SetColor("black");
220
	$img->Rectangle(1,1,$w-5,$h-5);
221
	$img->Rectangle(0,0,$w-4,$h-4);
222
 
223
	// Window top row
224
	$img->SetColor("darkred");
225
	for($y=3; $y < 18; $y += 2 )
226
	    $img->Line(1,$y,$w-6,$y);
227
 
228
	// "White shadow"
229
	$img->SetColor("white");
230
 
231
	// Left window edge
232
	$img->Line(2,2,2,$h-5);
233
	$img->Line(2,2,$w-6,2);
234
 
235
	// "Gray button shadow"
236
	$img->SetColor("darkgray");
237
 
238
	// Gray window shadow
239
	$img->Line(2,$h-6,$w-5,$h-6);
240
	$img->Line(3,$h-7,$w-5,$h-7);
241
 
242
	// Window title
243
	$m = floor($w/2-5);
244
	$l = 100;
245
	$img->SetColor("lightgray:1.3");
246
	$img->FilledRectangle($m-$l,2,$m+$l,16);
247
 
248
	// Stroke text
249
	$img->SetColor("darkred");
250
	$img->SetFont(FF_FONT2,FS_BOLD);
251
	$img->StrokeText($m-50,15,$this->iTitle);
252
	$img->SetColor("black");
253
	$img->SetFont(FF_FONT1,FS_NORMAL);
254
	$txt = new Text($aMsg,52,25);
255
	$txt->Align("left","top");
256
	$txt->Stroke($img);
257
	if ($this->iDest) {
258
           $img->Stream($this->iDest);
259
	} else {
260
	    $img->Headers();
261
	    $img->Stream();
262
	}
263
	if( $aHalt )
264
	    die();
265
    }
266
}
267
 
268
 
269
// Install the default error handler
270
if( USE_IMAGE_ERROR_HANDLER ) {
271
    JpGraphError::Install("JpGraphErrObjectImg");
272
}
273
else {
274
    JpGraphError::Install("JpGraphErrObject");
275
}
276
 
277
 
278
?>