forked from HuasoFoundries/jpgraph
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.inc.php
773 lines (660 loc) · 23.7 KB
/
config.inc.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
<?php
/**
* JPGraph - Community Edition
*/
/**
* // File: config.inc.php
* // Description: Configuration constants and settings for JpGraph library
* // Created: 2004-03-27
* // Ver: $Id: jpg-config.inc.php 1871 2009-09-29 05:56:39Z ljp $.
* //
* // Copyright (c) Asial Corporation. All rights reserved.
*/
// check if jpgraph is the root folder
if (\file_exists(\dirname(__DIR__) . '/vendor/autoload.php')) {
\defined('ROOT_PATH') || \define('ROOT_PATH', \dirname(__DIR__));
} elseif (\file_exists(\dirname(__DIR__, 4) . '/vendor/autoload.php')) {
// otherwise, jpgraph was required as a composer dependency
\defined('ROOT_PATH') || \define('ROOT_PATH', \dirname(__DIR__, 4));
}
require_once ROOT_PATH . '/vendor/autoload.php';
use Amenadiel\JpGraph\Util\ErrMsgText;
if (\is_readable(ROOT_PATH . '/.env') && \class_exists('\Symfony\Component\Dotenv\Dotenv')) {
$dotenv = new \Symfony\Component\Dotenv\Dotenv();
$dotenv->load(ROOT_PATH . '/.env');
}
if (\getenv('JPGRAPH_DEBUGMODE') && !\defined('DEBUGMODE')) {
\define('DEBUGMODE', \getenv('JPGRAPH_DEBUGMODE'));
}
// Sets DEBUGMODE for the app. Set this to true to enable debugging outputs
\defined('DEBUGMODE') || \define('DEBUGMODE', false);
\ini_set('display_errors', (int) DEBUGMODE);
\ini_set('display_startup_errors', (int) DEBUGMODE);
if (DEBUGMODE) {
\error_reporting(\E_ALL);
}
require_once __DIR__ . '/includes/polyfills.php';
/*
* Directories for cache and font directory.
* Define these constants explicitly or read them from environment vars
*
* CACHE_DIR:
* The full absolute name of the directory to be used to store the
* cached image files. This directory will not be used if the USE_CACHE
* define (further down) is false. If you enable the cache please note that
* this directory MUST be readable and writable for the process running PHP.
* Must end with '/'
*
* TTF_DIR:
* Directory where TTF fonts can be found. Must end with '/'
*
* The default values used if these defines are left commented out are:
*
* UNIX:
* CACHE_DIR /tmp/jpgraph_cache/
* TTF_DIR /usr/share/fonts/truetype/
* MBTTF_DIR /usr/share/fonts/truetype/
*
* WINDOWS:
* CACHE_DIR $SERVER_TEMP/jpgraph_cache/
* TTF_DIR $SERVER_SYSTEMROOT/fonts/
* MBTTF_DIR $SERVER_SYSTEMROOT/fonts/
*
*/
// Define these constants explicitly
// define('CACHE_DIR','/tmp/jpgraph_cache/');
// define('TTF_DIR','/usr/share/fonts/TrueType/');
// define('MBTTF_DIR','/usr/share/fonts/TrueType/');
//
// Or read them from environment variables
if (\getenv('JPGRAPH_CACHE_DIR')) {
\define('CACHE_DIR', \getenv('JPGRAPH_CACHE_DIR'));
}
if (\getenv('JPGRAPH_TTF_DIR')) {
\define('TTF_DIR', \getenv('JPGRAPH_TTF_DIR'));
}
if (\getenv('JPGRAPH_MBTTF_DIR')) {
\define('MBTTF_DIR', \getenv('JPGRAPH_MBTTF_DIR'));
}
/*
* Cache directory specification for use with CSIM graphs that are
* // using the cache.
* // The directory must be the filesysystem name as seen by PHP
* // and the 'http' version must be the same directory but as
* // seen by the HTTP server relative to the 'htdocs' ddirectory.
* // If a relative path is specified it is taken to be relative from where
* // the image script is executed.
* // Note: The default setting is to create a subdirectory in the
* // directory from where the image script is executed and store all files
* // there. As ususal this directory must be writeable by the PHP process.
*/
\define('CSIMCACHE_DIR', 'csimcache/');
\define('CSIMCACHE_HTTP_DIR', 'csimcache/');
/*
* Various JpGraph Settings. Adjust accordingly to your
* // preferences. Note that cache functionality is turned off by
* // default (Enable by setting USE_CACHE to true)
*/
// Deafult locale for error messages.
// This defaults to English = 'en'
\define('DEFAULT_ERR_LOCALE', 'en');
// Deafult graphic format set to 'auto' which will automatically
// choose the best available format in the order png,gif,jpeg
// (The supported format depends on what your PHP installation supports)
\define('DEFAULT_GFORMAT', 'auto');
// Should the cache be used at all? By setting this to false no
// files will be generated in the cache directory.
// The difference from READ_CACHE being that setting READ_CACHE to
// false will still create the image in the cache directory
// just not use it. By setting USE_CACHE=false no files will even
// be generated in the cache directory.
if (!\defined('USE_CACHE')) {
\define('USE_CACHE', \getenv('JPGRAPH_USE_CACHE') ?: false);
}
// Should we try to find an image in the cache before generating it?
// Set this define to false to bypass the reading of the cache and always
// regenerate the image. Note that even if reading the cache is
// disabled the cached will still be updated with the newly generated
// image. Set also 'USE_CACHE' below.
if (!\defined('READ_CACHE')) {
\define('READ_CACHE', true);
}
// Determine if the error handler should be image based or purely
// text based. Image based makes it easier since the script will
// always return an image even in case of errors.
\define('USE_IMAGE_ERROR_HANDLER', true);
// Should the library examine the global php_errmsg string and convert
// any error in it to a graphical representation. This is handy for the
// occasions when, for example, header files cannot be found and this results
// in the graph not being created and just a 'red-cross' image would be seen.
// This should be turned off for a production site.
\define('CATCH_PHPERRMSG', true);
// Determine if the library should also setup the default PHP
// error handler to generate a graphic error mesage. This is useful
// during development to be able to see the error message as an image
// instead as a 'red-cross' in a page where an image is expected.
\define('INSTALL_PHP_ERR_HANDLER', false);
// Should usage of deprecated functions and parameters give a fatal error?
// (Useful to check if code is future proof.)
\define('ERR_DEPRECATED', true);
// The builtin GD function imagettfbbox() fuction which calculates the bounding box for
// text using TTF fonts is buggy. By setting this define to true the library
// uses its own compensation for this bug. However this will give a
// slightly different visual apparance than not using this compensation.
// Enabling this compensation will in general give text a bit more space to more
// truly reflect the actual bounding box which is a bit larger than what the
// GD function thinks.
\define('USE_LIBRARY_IMAGETTFBBOX', true);
/*
* The following constants should rarely have to be changed !
*/
// What group should the cached file belong to
// (Set to '' will give the default group for the 'PHP-user')
// Please note that the Apache user must be a member of the
// specified group since otherwise it is impossible for Apache
// to set the specified group.
\define('CACHE_FILE_GROUP', 'www');
// What permissions should the cached file have
// (Set to '' will give the default persmissions for the 'PHP-user')
\define('CACHE_FILE_MOD', 0664);
// Default theme class name
\defined('DEFAULT_THEME_CLASS') || \define('DEFAULT_THEME_CLASS', 'UniversalTheme');
\define('SUPERSAMPLING', true);
\define('SUPERSAMPLING_SCALE', 1);
// TTF Font families
\define('FF_COURIER', 10);
\define('FF_VERDANA', 11);
\define('FF_TIMES', 12);
\define('FF_COMIC', 14);
\define('FF_ARIAL', 15);
\define('FF_GEORGIA', 16);
\define('FF_TREBUCHE', 17);
// Gnome Vera font
// Available from http://www.gnome.org/fonts/
\define('FF_VERA', 18);
\define('FF_VERAMONO', 19);
\define('FF_VERASERIF', 20);
// Chinese font
\define('FF_SIMSUN', 30);
\define('FF_CHINESE', 31);
\define('FF_BIG5', 32);
// Japanese font
\define('FF_MINCHO', 40);
\define('FF_PMINCHO', 41);
\define('FF_GOTHIC', 42);
\define('FF_PGOTHIC', 43);
// Hebrew fonts
\define('FF_DAVID', 44);
\define('FF_MIRIAM', 45);
\define('FF_AHRON', 46);
// Dejavu-fonts http://sourceforge.net/projects/dejavu
\define('FF_DV_SANSSERIF', 47);
\define('FF_DV_SERIF', 48);
\define('FF_DV_SANSSERIFMONO', 49);
\define('FF_DV_SERIFCOND', 50);
\define('FF_DV_SANSSERIFCOND', 51);
// Extra fonts
// Download fonts from
// http://www.webfontlist.com
// http://www.webpagepublicity.com/free-fonts.html
// http://www.fontonic.com/fonts.asp?width=d&offset=120
// http://www.fontspace.com/category/famous
// define("FF_SPEEDO",71); // This font is also known as Bauer (Used for development gauge fascia)
\define('FF_DIGITAL', 72); // Digital readout font
\define('FF_COMPUTER', 73); // The classic computer font
\define('FF_CALCULATOR', 74); // Triad font
\define('FF_USERFONT', 90);
\define('FF_USERFONT1', 90);
\define('FF_USERFONT2', 91);
\define('FF_USERFONT3', 92);
// Limits for fonts
\define('_FIRST_FONT', 10);
\define('_LAST_FONT', 99);
// TTF Font styles
\define('FS_NORMAL', 9001);
\define('FS_BOLD', 9002);
\define('FS_ITALIC', 9003);
\define('FS_BOLDIT', 9004);
\define('FS_BOLDITALIC', 9004);
//Definitions for internal font
\define('FF_FONT0', 1);
\define('FF_FONT1', 2);
\define('FF_FONT2', 4);
/*
* Defines for font setup
*/
// Actual name of the TTF file used together with FF_CHINESE aka FF_BIG5
// This is the TTF file being used when the font family is specified as
// either FF_CHINESE or FF_BIG5
\define('CHINESE_TTF_FONT', 'bkai00mp.ttf');
// Special unicode greek language support
\define('LANGUAGE_GREEK', false);
// If you are setting this config to true the conversion of greek characters
// will assume that the input text is windows 1251
\define('GREEK_FROM_WINDOWS', false);
// Special unicode cyrillic language support
\define('LANGUAGE_CYRILLIC', false);
// If you are setting this config to true the conversion
// will assume that the input text is windows 1251, if
// false it will assume koi8-r
\define('CYRILLIC_FROM_WINDOWS', false);
// The following constant is used to auto-detect
// whether cyrillic conversion is really necessary
// if enabled. Just replace 'windows-1251' with a variable
// containing the input character encoding string
// of your application calling jpgraph.
// A typical such string would be 'UTF-8' or 'utf-8'.
// The comparison is case-insensitive.
// If this charset is not a 'koi8-r' or 'windows-1251'
// derivate then no conversion is done.
//
// This constant can be very important in multi-user
// multi-language environments where a cyrillic conversion
// could be needed for some cyrillic people
// and resulting in just erraneous conversions
// for not-cyrillic language based people.
//
// Example: In the free project management
// software dotproject.net $locale_char_set is dynamically
// set by the language environment the user has chosen.
//
// Usage: define('LANGUAGE_CHARSET', $locale_char_set);
//
// where $locale_char_set is a GLOBAL (string) variable
// from the application including JpGraph.
//
\define('LANGUAGE_CHARSET', null);
// Japanese TrueType font used with FF_MINCHO, FF_PMINCHO, FF_GOTHIC, FF_PGOTHIC
// Standard fonts from Infomation-technology Promotion Agency (IPA)
// See http://mix-mplus-ipa.sourceforge.jp/
\define('MINCHO_TTF_FONT', 'ipam.ttf');
\define('PMINCHO_TTF_FONT', 'ipamp.ttf');
\define('GOTHIC_TTF_FONT', 'ipag.ttf');
\define('PGOTHIC_TTF_FONT', 'ipagp.ttf');
// Assume that Japanese text have been entered in EUC-JP encoding.
// If this define is true then conversion from EUC-JP to UTF8 is done
// automatically in the library using the mbstring module in PHP.
\define('ASSUME_EUCJP_ENCODING', false);
// Default font family
\define('FF_DEFAULT', FF_DV_SANSSERIF);
// Line styles
\define('LINESTYLE_SOLID', 1);
\define('LINESTYLE_DOTTED', 2);
\define('LINESTYLE_DASHED', 3);
\define('LINESTYLE_LONGDASH', 4);
// The DEFAULT_GFORMAT sets the default graphic encoding format, i.e.
// PNG, JPG or GIF depending on what is installed on the target system
// in that order.
if (!\defined('DEFAULT_GFORMAT')) {
\define('DEFAULT_GFORMAT', 'auto');
}
// Styles for gradient color fill
\define('GRAD_VER', 1);
\define('GRAD_VERT', 1);
\define('GRAD_HOR', 2);
\define('GRAD_MIDHOR', 3);
\define('GRAD_MIDVER', 4);
\define('GRAD_CENTER', 5);
\define('GRAD_WIDE_MIDVER', 6);
\define('GRAD_WIDE_MIDHOR', 7);
\define('GRAD_LEFT_REFLECTION', 8);
\define('GRAD_RIGHT_REFLECTION', 9);
\define('GRAD_RAISED_PANEL', 10);
\define('GRAD_DIAGONAL', 11);
\define('_DEFAULT_LPM_SIZE', 8); // Default Legend Plot Mark size
// Version info
\define('JPG_VERSION', '4.1.0');
// Minimum required PHP version
\define('MIN_PHPVERSION', '7.2.0');
// Special file name to indicate that we only want to calc
// the image map in the call to Graph::Stroke() used
// internally from the GetHTMLCSIM() method.
\define('_CSIM_SPECIALFILE', '_csim_special_');
// HTTP GET argument that is used with image map
// to indicate to the script to just generate the image
// and not the full CSIM HTML page.
\define('_CSIM_DISPLAY', '_jpg_csimd');
// Special filename for Graph::Stroke(). If this filename is given
// then the image will NOT be streamed to browser of file. Instead the
// Stroke call will return the handler for the created GD image.
\define('_IMG_HANDLER', '__handle');
// Special filename for Graph::Stroke(). If this filename is given
// the image will be stroked to a file with a name based on the script name.
\define('_IMG_AUTO', 'auto');
// Tick density
\define('TICKD_DENSE', 1);
\define('TICKD_NORMAL', 2);
\define('TICKD_SPARSE', 3);
\define('TICKD_VERYSPARSE', 4);
// Side for ticks and labels.
\define('SIDE_LEFT', -1);
\define('SIDE_RIGHT', 1);
\define('SIDE_DOWN', -1);
\define('SIDE_BOTTOM', -1);
\define('SIDE_UP', 1);
\define('SIDE_TOP', 1);
// Legend type stacked vertical or horizontal
\define('LEGEND_VERT', 0);
\define('LEGEND_HOR', 1);
// Mark types for plot marks
\define('MARK_SQUARE', 1);
\define('MARK_UTRIANGLE', 2);
\define('MARK_DTRIANGLE', 3);
\define('MARK_DIAMOND', 4);
\define('MARK_CIRCLE', 5);
\define('MARK_FILLEDCIRCLE', 6);
\define('MARK_CROSS', 7);
\define('MARK_STAR', 8);
\define('MARK_X', 9);
\define('MARK_LEFTTRIANGLE', 10);
\define('MARK_RIGHTTRIANGLE', 11);
\define('MARK_FLASH', 12);
\define('MARK_IMG', 13);
\define('MARK_FLAG1', 14);
\define('MARK_FLAG2', 15);
\define('MARK_FLAG3', 16);
\define('MARK_FLAG4', 17);
// Builtin images
\define('MARK_IMG_PUSHPIN', 50);
\define('MARK_IMG_SPUSHPIN', 50);
\define('MARK_IMG_LPUSHPIN', 51);
\define('MARK_IMG_DIAMOND', 52);
\define('MARK_IMG_SQUARE', 53);
\define('MARK_IMG_STAR', 54);
\define('MARK_IMG_BALL', 55);
\define('MARK_IMG_SBALL', 55);
\define('MARK_IMG_MBALL', 56);
\define('MARK_IMG_LBALL', 57);
\define('MARK_IMG_BEVEL', 58);
// Inline defines
\define('INLINE_YES', 1);
\define('INLINE_NO', 0);
// Format for background images
\define('BGIMG_FILLPLOT', 1);
\define('BGIMG_FILLFRAME', 2);
\define('BGIMG_COPY', 3);
\define('BGIMG_CENTER', 4);
\define('BGIMG_FREE', 5);
// Depth of objects
\define('DEPTH_BACK', 0);
\define('DEPTH_FRONT', 1);
// Direction
\define('VERTICAL', 1);
\define('HORIZONTAL', 0);
// Axis styles for scientific style axis
\define('AXSTYLE_SIMPLE', 1);
\define('AXSTYLE_BOXIN', 2);
\define('AXSTYLE_BOXOUT', 3);
\define('AXSTYLE_YBOXIN', 4);
\define('AXSTYLE_YBOXOUT', 5);
// Style for title backgrounds
\define('TITLEBKG_STYLE1', 1);
\define('TITLEBKG_STYLE2', 2);
\define('TITLEBKG_STYLE3', 3);
\define('TITLEBKG_FRAME_NONE', 0);
\define('TITLEBKG_FRAME_FULL', 1);
\define('TITLEBKG_FRAME_BOTTOM', 2);
\define('TITLEBKG_FRAME_BEVEL', 3);
\define('TITLEBKG_FILLSTYLE_HSTRIPED', 1);
\define('TITLEBKG_FILLSTYLE_VSTRIPED', 2);
\define('TITLEBKG_FILLSTYLE_SOLID', 3);
// Styles for axis labels background
\define('LABELBKG_NONE', 0);
\define('LABELBKG_XAXIS', 1);
\define('LABELBKG_YAXIS', 2);
\define('LABELBKG_XAXISFULL', 3);
\define('LABELBKG_YAXISFULL', 4);
\define('LABELBKG_XYFULL', 5);
\define('LABELBKG_XY', 6);
// Style for background gradient fills
\define('BGRAD_FRAME', 1);
\define('BGRAD_MARGIN', 2);
\define('BGRAD_PLOT', 3);
// Width of tab titles
\define('TABTITLE_WIDTHFIT', 0);
\define('TABTITLE_WIDTHFULL', -1);
// Defines for 3D skew directions
\define('SKEW3D_UP', 0);
\define('SKEW3D_DOWN', 1);
\define('SKEW3D_LEFT', 2);
\define('SKEW3D_RIGHT', 3);
// For internal use only
\define('_JPG_DEBUG', false);
\define('_FORCE_IMGTOFILE', false);
\define('_FORCE_IMGDIR', '/tmp/jpgimg/');
//
// Automatic settings of path for cache and font directory
// if they have not been previously specified
//
if (\mb_strstr(\PHP_OS, 'WIN')) {
\define('SYSTEMROOT', \getenv('SystemRoot'));
}
if (USE_CACHE) {
if (!\defined('CACHE_DIR')) {
if (\mb_strstr(\PHP_OS, 'WIN')) {
if (empty($_SERVER['TEMP'])) {
$t = new ErrMsgText();
$msg = $t->Get(11, $file, $lineno);
exit($msg);
}
\define('CACHE_DIR', $_SERVER['TEMP'] . '/');
} else {
\define('CACHE_DIR', '/tmp/jpgraph_cache/');
}
}
} elseif (!\defined('CACHE_DIR')) {
\define('CACHE_DIR', '');
}
//
// Setup path for western/latin TTF fonts
//
if (!\defined('TTF_DIR')) {
if (\mb_strstr(\PHP_OS, 'WIN')) {
if (empty(SYSTEMROOT)) {
$t = new ErrMsgText();
$msg = $t->Get(12, $file, $lineno);
exit($msg);
}
\define('TTF_DIR', SYSTEMROOT . '/fonts/');
} else {
\define('TTF_DIR', '/usr/share/fonts/truetype/');
}
}
//
// Setup path for MultiByte TTF fonts (japanese, chinese etc.)
//
if (!\defined('MBTTF_DIR')) {
if (\mb_strstr(\PHP_OS, 'WIN')) {
if (empty(SYSTEMROOT)) {
$t = new ErrMsgText();
$msg = $t->Get(12, $file, $lineno);
exit($msg);
}
\define('MBTTF_DIR', SYSTEMROOT . '/fonts/');
} else {
\define('MBTTF_DIR', '/usr/share/fonts/truetype/');
}
}
//
// Make sure PHP version is high enough
//
if (\version_compare(\PHP_VERSION, MIN_PHPVERSION) < 0) {
Amenadiel\JpGraph\Util\JpGraphError::RaiseL(13, \PHP_VERSION, MIN_PHPVERSION);
exit();
}
//
// Make GD sanity check
//
if (!\function_exists('imagetypes') || !\function_exists('imagecreatefromstring')) {
Amenadiel\JpGraph\Util\JpGraphError::RaiseL(25001);
//("This PHP installation is not configured with the GD library. Please recompile PHP with GD support to run JpGraph. (Neither function imagetypes() nor imagecreatefromstring() does exist)");
}
if (INSTALL_PHP_ERR_HANDLER) {
\set_error_handler('\Amenadiel\JpGraph\Util\Helper::phpErrorHandler');
}
//
// Check if there were any warnings, perhaps some wrong includes by the user. In this
// case we raise it immediately since otherwise the image will not show and makes
// debugging difficult. This is controlled by the user setting CATCH_PHPERRMSG
//
if (isset($GLOBALS['php_errormsg']) && CATCH_PHPERRMSG && !\preg_match('/|Deprecated|/i', $GLOBALS['php_errormsg'])) {
Amenadiel\JpGraph\Util\JpGraphError::RaiseL(25004, $GLOBALS['php_errormsg']);
}
// Constants for types of static bands in plot area
\define('BAND_RDIAG', 1); // Right diagonal lines
\define('BAND_LDIAG', 2); // Left diagonal lines
\define('BAND_SOLID', 3); // Solid one color
\define('BAND_VLINE', 4); // Vertical lines
\define('BAND_HLINE', 5); // Horizontal lines
\define('BAND_3DPLANE', 6); // "3D" Plane
\define('BAND_HVCROSS', 7); // Vertical/Hor crosses
\define('BAND_DIAGCROSS', 8); // Diagonal crosses
// Maximum size for Automatic Gantt chart
\define('MAX_GANTTIMG_SIZE_W', 8000);
\define('MAX_GANTTIMG_SIZE_H', 5000);
// Scale Header types
\define('GANTT_HDAY', 1);
\define('GANTT_HWEEK', 2);
\define('GANTT_HMONTH', 4);
\define('GANTT_HYEAR', 8);
\define('GANTT_HHOUR', 16);
\define('GANTT_HMIN', 32);
// Bar patterns
\define('GANTT_RDIAG', BAND_RDIAG); // Right diagonal lines
\define('GANTT_LDIAG', BAND_LDIAG); // Left diagonal lines
\define('GANTT_SOLID', BAND_SOLID); // Solid one color
\define('GANTT_VLINE', BAND_VLINE); // Vertical lines
\define('GANTT_HLINE', BAND_HLINE); // Horizontal lines
\define('GANTT_3DPLANE', BAND_3DPLANE); // "3D" Plane
\define('GANTT_HVCROSS', BAND_HVCROSS); // Vertical/Hor crosses
\define('GANTT_DIAGCROSS', BAND_DIAGCROSS); // Diagonal crosses
// Conversion constant
\define('HOURADJ_1', 0 + 30);
\define('HOURADJ_2', 1 + 30);
\define('HOURADJ_3', 2 + 30);
\define('HOURADJ_4', 3 + 30);
\define('HOURADJ_6', 4 + 30);
\define('HOURADJ_12', 5 + 30);
\define('MINADJ_1', 0 + 20);
\define('MINADJ_5', 1 + 20);
\define('MINADJ_10', 2 + 20);
\define('MINADJ_15', 3 + 20);
\define('MINADJ_30', 4 + 20);
\define('SECADJ_1', 0);
\define('SECADJ_5', 1);
\define('SECADJ_10', 2);
\define('SECADJ_15', 3);
\define('SECADJ_30', 4);
\define('YEARADJ_1', 0 + 30);
\define('YEARADJ_2', 1 + 30);
\define('YEARADJ_5', 2 + 30);
\define('MONTHADJ_1', 0 + 20);
\define('MONTHADJ_6', 1 + 20);
\define('DAYADJ_1', 0);
\define('DAYADJ_WEEK', 1);
\define('DAYADJ_7', 1);
\define('SECPERYEAR', 31536000);
\define('SECPERDAY', 86400);
\define('SECPERHOUR', 3600);
\define('SECPERMIN', 60);
// Locales. ONLY KEPT FOR BACKWARDS COMPATIBILITY
// You should use the proper locale strings directly
// from now on.
\define('LOCALE_EN', 'en_UK');
\define('LOCALE_SV', 'sv_SE');
// Layout of bars
\define('GANTT_EVEN', 1);
\define('GANTT_FROMTOP', 2);
// Style for minute header
\define('MINUTESTYLE_MM', 0); // 15
\define('MINUTESTYLE_CUSTOM', 2); // Custom format
// Style for hour header
\define('HOURSTYLE_HM24', 0); // 13:10
\define('HOURSTYLE_HMAMPM', 1); // 1:10pm
\define('HOURSTYLE_H24', 2); // 13
\define('HOURSTYLE_HAMPM', 3); // 1pm
\define('HOURSTYLE_CUSTOM', 4); // User defined
// Style for day header
\define('DAYSTYLE_ONELETTER', 0); // "M"
\define('DAYSTYLE_LONG', 1); // "Monday"
\define('DAYSTYLE_LONGDAYDATE1', 2); // "Monday 23 Jun"
\define('DAYSTYLE_LONGDAYDATE2', 3); // "Monday 23 Jun 2003"
\define('DAYSTYLE_SHORT', 4); // "Mon"
\define('DAYSTYLE_SHORTDAYDATE1', 5); // "Mon 23/6"
\define('DAYSTYLE_SHORTDAYDATE2', 6); // "Mon 23 Jun"
\define('DAYSTYLE_SHORTDAYDATE3', 7); // "Mon 23"
\define('DAYSTYLE_SHORTDATE1', 8); // "23/6"
\define('DAYSTYLE_SHORTDATE2', 9); // "23 Jun"
\define('DAYSTYLE_SHORTDATE3', 10); // "Mon 23"
\define('DAYSTYLE_SHORTDATE4', 11); // "23"
\define('DAYSTYLE_CUSTOM', 12); // "M"
// Styles for week header
\define('WEEKSTYLE_WNBR', 0);
\define('WEEKSTYLE_FIRSTDAY', 1);
\define('WEEKSTYLE_FIRSTDAY2', 2);
\define('WEEKSTYLE_FIRSTDAYWNBR', 3);
\define('WEEKSTYLE_FIRSTDAY2WNBR', 4);
// Styles for month header
\define('MONTHSTYLE_SHORTNAME', 0);
\define('MONTHSTYLE_LONGNAME', 1);
\define('MONTHSTYLE_LONGNAMEYEAR2', 2);
\define('MONTHSTYLE_SHORTNAMEYEAR2', 3);
\define('MONTHSTYLE_LONGNAMEYEAR4', 4);
\define('MONTHSTYLE_SHORTNAMEYEAR4', 5);
\define('MONTHSTYLE_FIRSTLETTER', 6);
// Types of constrain links
\define('CONSTRAIN_STARTSTART', 0);
\define('CONSTRAIN_STARTEND', 1);
\define('CONSTRAIN_ENDSTART', 2);
\define('CONSTRAIN_ENDEND', 3);
// Arrow direction for constrain links
\define('ARROW_DOWN', 0);
\define('ARROW_UP', 1);
\define('ARROW_LEFT', 2);
\define('ARROW_RIGHT', 3);
// Arrow type for constrain type
\define('ARROWT_SOLID', 0);
\define('ARROWT_OPEN', 1);
// Arrow size for constrain lines
\define('ARROW_S1', 0);
\define('ARROW_S2', 1);
\define('ARROW_S3', 2);
\define('ARROW_S4', 3);
\define('ARROW_S5', 4);
// Activity types for use with utility method CreateSimple()
\define('ACTYPE_NORMAL', 0);
\define('ACTYPE_GROUP', 1);
\define('ACTYPE_MILESTONE', 2);
\define('ACTINFO_3D', 1);
\define('ACTINFO_2D', 0);
\define('GICON_WARNINGRED', 0);
\define('GICON_TEXT', 1);
\define('GICON_ENDCONS', 2);
\define('GICON_MAIL', 3);
\define('GICON_STARTCONS', 4);
\define('GICON_CALC', 5);
\define('GICON_MAGNIFIER', 6);
\define('GICON_LOCK', 7);
\define('GICON_STOP', 8);
\define('GICON_WARNINGYELLOW', 9);
\define('GICON_FOLDEROPEN', 10);
\define('GICON_FOLDER', 11);
\define('GICON_TEXTIMPORTANT', 12);
if (!\function_exists('is_countable')) {
function is_countable($c)
{
return \is_array($c) || $c instanceof Countable;
}
}
/**
* Returns the item count of the variable, or zero if it's non countable.
*
* @param mixed $var The variable whose items we want to count
*/
function safe_count($var)
{
if (\is_countable($var)) {
return \count($var);
}
return 0;
}