Test Setup Failed
Branch 1.0.0-dev (6506b5)
by nguereza
05:54
created
core/libraries/Browser.php 3 patches
Indentation   +1731 added lines, -1731 removed lines patch added patch discarded remove patch
@@ -1,1732 +1,1732 @@
 block discarded – undo
1 1
 <?php
2
-    defined('ROOT_PATH') || exit('Access denied');
3
-    /**
4
-     * File: Browser.php
5
-     * Author: Chris Schuld (http://chrisschuld.com/)
6
-     * Last Modified: July 22nd, 2016
7
-     * @version 2.0
8
-     * @package PegasusPHP
9
-     *
10
-     * Copyright (C) 2008-2010 Chris Schuld  ([email protected])
11
-     *
12
-     * This program is free software; you can redistribute it and/or
13
-     * modify it under the terms of the GNU General Public License as
14
-     * published by the Free Software Foundation; either version 2 of
15
-     * the License, or (at your option) any later version.
16
-     *
17
-     * This program is distributed in the hope that it will be useful,
18
-     * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
-     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
-     * GNU General Public License for more details at:
21
-     * http://www.gnu.org/copyleft/gpl.html
22
-     *
23
-     *
24
-     * Typical Usage:
25
-     *
26
-     *   $browser = new Browser();
27
-     *   if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
28
-     *    echo 'You have FireFox version 2 or greater';
29
-     *   }
30
-     *
31
-     * User Agents Sampled from: http://www.useragentstring.com/
32
-     *
33
-     * This implementation is based on the original work from Gary White
34
-     * http://apptools.com/phptools/browser/
35
-     *
36
-     */
37
-    class Browser
38
-    {
39
-        private $_agent = '';
40
-        private $_browser_name = '';
41
-        private $_version = '';
42
-        private $_platform = '';
43
-        private $_os = '';
44
-        private $_is_aol = false;
45
-        private $_is_mobile = false;
46
-        private $_is_tablet = false;
47
-        private $_is_robot = false;
48
-        private $_is_facebook = false;
49
-        private $_aol_version = '';
50
-
51
-        const BROWSER_UNKNOWN = 'unknown';
52
-        const VERSION_UNKNOWN = 'unknown';
53
-
54
-        const BROWSER_OPERA = 'Opera'; // http://www.opera.com/
55
-        const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/
56
-        const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/
57
-        const BROWSER_EDGE = 'Edge'; // https://www.microsoft.com/edge
58
-        const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/
59
-        const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
60
-        const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/
61
-        const BROWSER_ICAB = 'iCab'; // http://www.icab.de/
62
-        const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/
63
-        const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/
64
-        const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html
65
-        const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/
66
-        const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko
67
-        const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/
68
-        const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/
69
-        const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx
70
-        const BROWSER_SAFARI = 'Safari'; // http://apple.com
71
-        const BROWSER_IPHONE = 'iPhone'; // http://apple.com
72
-        const BROWSER_IPOD = 'iPod'; // http://apple.com
73
-        const BROWSER_IPAD = 'iPad'; // http://apple.com
74
-        const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome
75
-        const BROWSER_ANDROID = 'Android'; // http://www.android.com/
76
-        const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot
77
-
78
-        const BROWSER_YANDEXBOT = 'YandexBot'; // http://yandex.com/bots
79
-        const BROWSER_YANDEXIMAGERESIZER_BOT = 'YandexImageResizer'; // http://yandex.com/bots
80
-        const BROWSER_YANDEXIMAGES_BOT = 'YandexImages'; // http://yandex.com/bots
81
-        const BROWSER_YANDEXVIDEO_BOT = 'YandexVideo'; // http://yandex.com/bots
82
-        const BROWSER_YANDEXMEDIA_BOT = 'YandexMedia'; // http://yandex.com/bots
83
-        const BROWSER_YANDEXBLOGS_BOT = 'YandexBlogs'; // http://yandex.com/bots
84
-        const BROWSER_YANDEXFAVICONS_BOT = 'YandexFavicons'; // http://yandex.com/bots
85
-        const BROWSER_YANDEXWEBMASTER_BOT = 'YandexWebmaster'; // http://yandex.com/bots
86
-        const BROWSER_YANDEXDIRECT_BOT = 'YandexDirect'; // http://yandex.com/bots
87
-        const BROWSER_YANDEXMETRIKA_BOT = 'YandexMetrika'; // http://yandex.com/bots
88
-        const BROWSER_YANDEXNEWS_BOT = 'YandexNews'; // http://yandex.com/bots
89
-        const BROWSER_YANDEXCATALOG_BOT = 'YandexCatalog'; // http://yandex.com/bots
90
-
91
-        const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp
92
-        const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/
93
-        const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/
94
-        const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat
95
-        const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60
96
-        const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
97
-        const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/
98
-        const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm
99
-        const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot
100
-        const BROWSER_VIVALDI = 'Vivalidi'; // https://vivaldi.com/
101
-        const BROWSER_YANDEX = 'Yandex'; // https://browser.yandex.ua/
102
-
103
-        const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED)
104
-        const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED)
105
-        const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
106
-        const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
107
-        const BROWSER_PLAYSTATION = "PlayStation";
108
-        const BROWSER_SAMSUNG = "SamsungBrowser";
109
-        const BROWSER_SILK = "Silk";
110
-        const BROWSER_I_FRAME = "Iframely";
111
-        const BROWSER_COCOA = "CocoaRestClient";
112
-
113
-        const PLATFORM_UNKNOWN = 'unknown';
114
-        const PLATFORM_WINDOWS = 'Windows';
115
-        const PLATFORM_WINDOWS_CE = 'Windows CE';
116
-        const PLATFORM_APPLE = 'Apple';
117
-        const PLATFORM_LINUX = 'Linux';
118
-        const PLATFORM_OS2 = 'OS/2';
119
-        const PLATFORM_BEOS = 'BeOS';
120
-        const PLATFORM_IPHONE = 'iPhone';
121
-        const PLATFORM_IPOD = 'iPod';
122
-        const PLATFORM_IPAD = 'iPad';
123
-        const PLATFORM_BLACKBERRY = 'BlackBerry';
124
-        const PLATFORM_NOKIA = 'Nokia';
125
-        const PLATFORM_FREEBSD = 'FreeBSD';
126
-        const PLATFORM_OPENBSD = 'OpenBSD';
127
-        const PLATFORM_NETBSD = 'NetBSD';
128
-        const PLATFORM_SUNOS = 'SunOS';
129
-        const PLATFORM_OPENSOLARIS = 'OpenSolaris';
130
-        const PLATFORM_ANDROID = 'Android';
131
-        const PLATFORM_PLAYSTATION = "Sony PlayStation";
132
-        const PLATFORM_ROKU = "Roku";
133
-        const PLATFORM_APPLE_TV = "Apple TV";
134
-        const PLATFORM_TERMINAL = "Terminal";
135
-        const PLATFORM_FIRE_OS = "Fire OS";
136
-        const PLATFORM_SMART_TV = "SMART-TV";
137
-        const PLATFORM_CHROME_OS = "Chrome OS";
138
-        const PLATFORM_JAVA_ANDROID = "Java/Android";
139
-        const PLATFORM_POSTMAN = "Postman";
140
-        const PLATFORM_I_FRAME = "Iframely";
141
-
142
-        const OPERATING_SYSTEM_UNKNOWN = 'unknown';
143
-
144
-        /**
145
-         * Class constructor
146
-         */
147
-        public function __construct($userAgent = "")
148
-        {
149
-            $this->reset();
150
-            if ($userAgent != "") {
151
-                $this->setUserAgent($userAgent);
152
-            } else {
153
-                $this->determine();
154
-            }
155
-        }
156
-
157
-        /**
158
-         * Reset all properties
159
-         */
160
-        public function reset()
161
-        {
162
-            $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
163
-            $this->_browser_name = self::BROWSER_UNKNOWN;
164
-            $this->_version = self::VERSION_UNKNOWN;
165
-            $this->_platform = self::PLATFORM_UNKNOWN;
166
-            $this->_os = self::OPERATING_SYSTEM_UNKNOWN;
167
-            $this->_is_aol = false;
168
-            $this->_is_mobile = false;
169
-            $this->_is_tablet = false;
170
-            $this->_is_robot = false;
171
-            $this->_is_facebook = false;
172
-            $this->_aol_version = self::VERSION_UNKNOWN;
173
-        }
174
-
175
-        /**
176
-         * Check to see if the specific browser is valid
177
-         * @param string $browserName
178
-         * @return bool True if the browser is the specified browser
179
-         */
180
-        function isBrowser($browserName)
181
-        {
182
-            return (0 == strcasecmp($this->_browser_name, trim($browserName)));
183
-        }
184
-
185
-        /**
186
-         * The name of the browser.  All return types are from the class contants
187
-         * @return string Name of the browser
188
-         */
189
-        public function getBrowser()
190
-        {
191
-            return $this->_browser_name;
192
-        }
193
-
194
-        /**
195
-         * Set the name of the browser
196
-         * @param $browser string The name of the Browser
197
-         */
198
-        public function setBrowser($browser)
199
-        {
200
-            $this->_browser_name = $browser;
201
-        }
202
-
203
-        /**
204
-         * The name of the platform.  All return types are from the class contants
205
-         * @return string Name of the browser
206
-         */
207
-        public function getPlatform()
208
-        {
209
-            return $this->_platform;
210
-        }
211
-
212
-        /**
213
-         * Set the name of the platform
214
-         * @param string $platform The name of the Platform
215
-         */
216
-        public function setPlatform($platform)
217
-        {
218
-            $this->_platform = $platform;
219
-        }
220
-
221
-        /**
222
-         * The version of the browser.
223
-         * @return string Version of the browser (will only contain alpha-numeric characters and a period)
224
-         */
225
-        public function getVersion()
226
-        {
227
-            return $this->_version;
228
-        }
229
-
230
-        /**
231
-         * Set the version of the browser
232
-         * @param string $version The version of the Browser
233
-         */
234
-        public function setVersion($version)
235
-        {
236
-            $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version);
237
-        }
238
-
239
-        /**
240
-         * The version of AOL.
241
-         * @return string Version of AOL (will only contain alpha-numeric characters and a period)
242
-         */
243
-        public function getAolVersion()
244
-        {
245
-            return $this->_aol_version;
246
-        }
247
-
248
-        /**
249
-         * Set the version of AOL
250
-         * @param string $version The version of AOL
251
-         */
252
-        public function setAolVersion($version)
253
-        {
254
-            $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version);
255
-        }
256
-
257
-        /**
258
-         * Is the browser from AOL?
259
-         * @return boolean True if the browser is from AOL otherwise false
260
-         */
261
-        public function isAol()
262
-        {
263
-            return $this->_is_aol;
264
-        }
265
-
266
-        /**
267
-         * Is the browser from a mobile device?
268
-         * @return boolean True if the browser is from a mobile device otherwise false
269
-         */
270
-        public function isMobile()
271
-        {
272
-            return $this->_is_mobile;
273
-        }
274
-
275
-        /**
276
-         * Is the browser from a tablet device?
277
-         * @return boolean True if the browser is from a tablet device otherwise false
278
-         */
279
-        public function isTablet()
280
-        {
281
-            return $this->_is_tablet;
282
-        }
283
-
284
-        /**
285
-         * Is the browser from a robot (ex Slurp,GoogleBot)?
286
-         * @return boolean True if the browser is from a robot otherwise false
287
-         */
288
-        public function isRobot()
289
-        {
290
-            return $this->_is_robot;
291
-        }
292
-
293
-        /**
294
-         * Is the browser from facebook?
295
-         * @return boolean True if the browser is from facebook otherwise false
296
-         */
297
-        public function isFacebook()
298
-        {
299
-            return $this->_is_facebook;
300
-        }
301
-
302
-        /**
303
-         * Set the browser to be from AOL
304
-         * @param $isAol
305
-         */
306
-        public function setAol($isAol)
307
-        {
308
-            $this->_is_aol = $isAol;
309
-        }
310
-
311
-        /**
312
-         * Set the Browser to be mobile
313
-         * @param boolean $value is the browser a mobile browser or not
314
-         */
315
-        protected function setMobile($value = true)
316
-        {
317
-            $this->_is_mobile = $value;
318
-        }
319
-
320
-        /**
321
-         * Set the Browser to be tablet
322
-         * @param boolean $value is the browser a tablet browser or not
323
-         */
324
-        protected function setTablet($value = true)
325
-        {
326
-            $this->_is_tablet = $value;
327
-        }
328
-
329
-        /**
330
-         * Set the Browser to be a robot
331
-         * @param boolean $value is the browser a robot or not
332
-         */
333
-        protected function setRobot($value = true)
334
-        {
335
-            $this->_is_robot = $value;
336
-        }
337
-
338
-        /**
339
-         * Set the Browser to be a Facebook request
340
-         * @param boolean $value is the browser a robot or not
341
-         */
342
-        protected function setFacebook($value = true)
343
-        {
344
-            $this->_is_facebook = $value;
345
-        }
346
-
347
-        /**
348
-         * Get the user agent value in use to determine the browser
349
-         * @return string The user agent from the HTTP header
350
-         */
351
-        public function getUserAgent()
352
-        {
353
-            return $this->_agent;
354
-        }
355
-
356
-        /**
357
-         * Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
358
-         * @param string $agent_string The value for the User Agent
359
-         */
360
-        public function setUserAgent($agent_string)
361
-        {
362
-            $this->reset();
363
-            $this->_agent = $agent_string;
364
-            $this->determine();
365
-        }
366
-
367
-        /**
368
-         * Used to determine if the browser is actually "chromeframe"
369
-         * @since 1.7
370
-         * @return boolean True if the browser is using chromeframe
371
-         */
372
-        public function isChromeFrame()
373
-        {
374
-            return (strpos($this->_agent, "chromeframe") !== false);
375
-        }
376
-
377
-        /**
378
-         * Returns a formatted string with a summary of the details of the browser.
379
-         * @return string formatted string with a summary of the browser
380
-         */
381
-        public function __toString()
382
-        {
383
-            return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
384
-                "<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
385
-                "<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
386
-                "<strong>Platform:</strong> {$this->getPlatform()}<br/>";
387
-        }
388
-
389
-        /**
390
-         * Protected routine to calculate and determine what the browser is in use (including platform)
391
-         */
392
-        protected function determine()
393
-        {
394
-            $this->checkPlatform();
395
-            $this->checkBrowsers();
396
-            $this->checkForAol();
397
-        }
398
-
399
-        /**
400
-         * Protected routine to determine the browser type
401
-         * @return boolean True if the browser was detected otherwise false
402
-         */
403
-        protected function checkBrowsers()
404
-        {
405
-            return (
406
-                // well-known, well-used
407
-                // Special Notes:
408
-                // (1) Opera must be checked before FireFox due to the odd
409
-                //     user agents used in some older versions of Opera
410
-                // (2) WebTV is strapped onto Internet Explorer so we must
411
-                //     check for WebTV before IE
412
-                // (3) (deprecated) Galeon is based on Firefox and needs to be
413
-                //     tested before Firefox is tested
414
-                // (4) OmniWeb is based on Safari so OmniWeb check must occur
415
-                //     before Safari
416
-                // (5) Netscape 9+ is based on Firefox so Netscape checks
417
-                //     before FireFox are necessary
418
-                // (6) Vivalid is UA contains both Firefox and Chrome so Vivalid checks
419
-                //     before Firefox and Chrome
420
-                $this->checkBrowserWebTv() ||
421
-                $this->checkBrowserEdge() ||
422
-                $this->checkBrowserInternetExplorer() ||
423
-                $this->checkBrowserOpera() ||
424
-                $this->checkBrowserGaleon() ||
425
-                $this->checkBrowserNetscapeNavigator9Plus() ||
426
-                $this->checkBrowserVivaldi() ||
427
-                $this->checkBrowserYandex() ||
428
-                $this->checkBrowserFirefox() ||
429
-                $this->checkBrowserChrome() ||
430
-                $this->checkBrowserOmniWeb() ||
431
-
432
-                // common mobile
433
-                $this->checkBrowserAndroid() ||
434
-                $this->checkBrowseriPad() ||
435
-                $this->checkBrowseriPod() ||
436
-                $this->checkBrowseriPhone() ||
437
-                $this->checkBrowserBlackBerry() ||
438
-                $this->checkBrowserNokia() ||
439
-
440
-                // common bots
441
-                $this->checkBrowserGoogleBot() ||
442
-                $this->checkBrowserMSNBot() ||
443
-                $this->checkBrowserBingBot() ||
444
-                $this->checkBrowserSlurp() ||
445
-
446
-                // Yandex bots
447
-                $this->checkBrowserYandexBot() ||
448
-                $this->checkBrowserYandexImageResizerBot() ||
449
-                $this->checkBrowserYandexBlogsBot() ||
450
-                $this->checkBrowserYandexCatalogBot() ||
451
-                $this->checkBrowserYandexDirectBot() ||
452
-                $this->checkBrowserYandexFaviconsBot() ||
453
-                $this->checkBrowserYandexImagesBot() ||
454
-                $this->checkBrowserYandexMediaBot() ||
455
-                $this->checkBrowserYandexMetrikaBot() ||
456
-                $this->checkBrowserYandexNewsBot() ||
457
-                $this->checkBrowserYandexVideoBot() ||
458
-                $this->checkBrowserYandexWebmasterBot() ||
459
-
460
-                // check for facebook external hit when loading URL
461
-                $this->checkFacebookExternalHit() ||
462
-
463
-                // WebKit base check (post mobile and others)
464
-                $this->checkBrowserSamsung() ||
465
-                $this->checkBrowserSilk() ||
466
-                $this->checkBrowserSafari() ||
467
-
468
-                // everyone else
469
-                $this->checkBrowserNetPositive() ||
470
-                $this->checkBrowserFirebird() ||
471
-                $this->checkBrowserKonqueror() ||
472
-                $this->checkBrowserIcab() ||
473
-                $this->checkBrowserPhoenix() ||
474
-                $this->checkBrowserAmaya() ||
475
-                $this->checkBrowserLynx() ||
476
-                $this->checkBrowserShiretoko() ||
477
-                $this->checkBrowserIceCat() ||
478
-                $this->checkBrowserIceweasel() ||
479
-                $this->checkBrowserW3CValidator() ||
480
-                $this->checkBrowserPlayStation() ||
481
-                $this->checkBrowserIframely() ||
482
-                $this->checkBrowserCocoa() ||
483
-                $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
484
-
485
-
486
-            );
487
-        }
488
-
489
-        /**
490
-         * Determine if the user is using a BlackBerry (last updated 1.7)
491
-         * @return boolean True if the browser is the BlackBerry browser otherwise false
492
-         */
493
-        protected function checkBrowserBlackBerry()
494
-        {
495
-            if (stripos($this->_agent, 'blackberry') !== false) {
496
-                $aresult = explode("/", stristr($this->_agent, "BlackBerry"));
497
-                if (isset($aresult[1])) {
498
-                    $aversion = explode(' ', $aresult[1]);
499
-                    $this->setVersion($aversion[0]);
500
-                    $this->_browser_name = self::BROWSER_BLACKBERRY;
501
-                    $this->setMobile(true);
502
-                    return true;
503
-                }
504
-            }
505
-            return false;
506
-        }
507
-
508
-        /**
509
-         * Determine if the user is using an AOL User Agent (last updated 1.7)
510
-         * @return boolean True if the browser is from AOL otherwise false
511
-         */
512
-        protected function checkForAol()
513
-        {
514
-            $this->setAol(false);
515
-            $this->setAolVersion(self::VERSION_UNKNOWN);
516
-
517
-            if (stripos($this->_agent, 'aol') !== false) {
518
-                $aversion = explode(' ', stristr($this->_agent, 'AOL'));
519
-                if (isset($aversion[1])) {
520
-                    $this->setAol(true);
521
-                    $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
522
-                    return true;
523
-                }
524
-            }
525
-            return false;
526
-        }
527
-
528
-        /**
529
-         * Determine if the browser is the GoogleBot or not (last updated 1.7)
530
-         * @return boolean True if the browser is the GoogletBot otherwise false
531
-         */
532
-        protected function checkBrowserGoogleBot()
533
-        {
534
-            if (stripos($this->_agent, 'googlebot') !== false) {
535
-                $aresult = explode('/', stristr($this->_agent, 'googlebot'));
536
-                if (isset($aresult[1])) {
537
-                    $aversion = explode(' ', $aresult[1]);
538
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
539
-                    $this->_browser_name = self::BROWSER_GOOGLEBOT;
540
-                    $this->setRobot(true);
541
-                    return true;
542
-                }
543
-            }
544
-            return false;
545
-        }
546
-
547
-        /**
548
-         * Determine if the browser is the YandexBot or not
549
-         * @return boolean True if the browser is the YandexBot otherwise false
550
-         */
551
-        protected function checkBrowserYandexBot()
552
-        {
553
-            if (stripos($this->_agent, 'YandexBot') !== false) {
554
-                $aresult = explode('/', stristr($this->_agent, 'YandexBot'));
555
-                if (isset($aresult[1])) {
556
-                    $aversion = explode(' ', $aresult[1]);
557
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
558
-                    $this->_browser_name = self::BROWSER_YANDEXBOT;
559
-                    $this->setRobot(true);
560
-                    return true;
561
-                }
562
-            }
563
-            return false;
564
-        }
565
-
566
-        /**
567
-         * Determine if the browser is the YandexImageResizer or not
568
-         * @return boolean True if the browser is the YandexImageResizer otherwise false
569
-         */
570
-        protected function checkBrowserYandexImageResizerBot()
571
-        {
572
-            if (stripos($this->_agent, 'YandexImageResizer') !== false) {
573
-                $aresult = explode('/', stristr($this->_agent, 'YandexImageResizer'));
574
-                if (isset($aresult[1])) {
575
-                    $aversion = explode(' ', $aresult[1]);
576
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
577
-                    $this->_browser_name = self::BROWSER_YANDEXIMAGERESIZER_BOT;
578
-                    $this->setRobot(true);
579
-                    return true;
580
-                }
581
-            }
582
-            return false;
583
-        }
584
-
585
-        /**
586
-         * Determine if the browser is the YandexCatalog or not
587
-         * @return boolean True if the browser is the YandexCatalog otherwise false
588
-         */
589
-        protected function checkBrowserYandexCatalogBot()
590
-        {
591
-            if (stripos($this->_agent, 'YandexCatalog') !== false) {
592
-                $aresult = explode('/', stristr($this->_agent, 'YandexCatalog'));
593
-                if (isset($aresult[1])) {
594
-                    $aversion = explode(' ', $aresult[1]);
595
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
596
-                    $this->_browser_name = self::BROWSER_YANDEXCATALOG_BOT;
597
-                    $this->setRobot(true);
598
-                    return true;
599
-                }
600
-            }
601
-            return false;
602
-        }
603
-
604
-        /**
605
-         * Determine if the browser is the YandexNews or not
606
-         * @return boolean True if the browser is the YandexNews otherwise false
607
-         */
608
-        protected function checkBrowserYandexNewsBot()
609
-        {
610
-            if (stripos($this->_agent, 'YandexNews') !== false) {
611
-                $aresult = explode('/', stristr($this->_agent, 'YandexNews'));
612
-                if (isset($aresult[1])) {
613
-                    $aversion = explode(' ', $aresult[1]);
614
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
615
-                    $this->_browser_name = self::BROWSER_YANDEXNEWS_BOT;
616
-                    $this->setRobot(true);
617
-                    return true;
618
-                }
619
-            }
620
-            return false;
621
-        }
622
-
623
-        /**
624
-         * Determine if the browser is the YandexMetrika or not
625
-         * @return boolean True if the browser is the YandexMetrika otherwise false
626
-         */
627
-        protected function checkBrowserYandexMetrikaBot()
628
-        {
629
-            if (stripos($this->_agent, 'YandexMetrika') !== false) {
630
-                $aresult = explode('/', stristr($this->_agent, 'YandexMetrika'));
631
-                if (isset($aresult[1])) {
632
-                    $aversion = explode(' ', $aresult[1]);
633
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
634
-                    $this->_browser_name = self::BROWSER_YANDEXMETRIKA_BOT;
635
-                    $this->setRobot(true);
636
-                    return true;
637
-                }
638
-            }
639
-            return false;
640
-        }
641
-
642
-        /**
643
-         * Determine if the browser is the YandexDirect or not
644
-         * @return boolean True if the browser is the YandexDirect otherwise false
645
-         */
646
-        protected function checkBrowserYandexDirectBot()
647
-        {
648
-            if (stripos($this->_agent, 'YandexDirect') !== false) {
649
-                $aresult = explode('/', stristr($this->_agent, 'YandexDirect'));
650
-                if (isset($aresult[1])) {
651
-                    $aversion = explode(' ', $aresult[1]);
652
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
653
-                    $this->_browser_name = self::BROWSER_YANDEXDIRECT_BOT;
654
-                    $this->setRobot(true);
655
-                    return true;
656
-                }
657
-            }
658
-            return false;
659
-        }
660
-
661
-        /**
662
-         * Determine if the browser is the YandexWebmaster or not
663
-         * @return boolean True if the browser is the YandexWebmaster otherwise false
664
-         */
665
-        protected function checkBrowserYandexWebmasterBot()
666
-        {
667
-            if (stripos($this->_agent, 'YandexWebmaster') !== false) {
668
-                $aresult = explode('/', stristr($this->_agent, 'YandexWebmaster'));
669
-                if (isset($aresult[1])) {
670
-                    $aversion = explode(' ', $aresult[1]);
671
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
672
-                    $this->_browser_name = self::BROWSER_YANDEXWEBMASTER_BOT;
673
-                    $this->setRobot(true);
674
-                    return true;
675
-                }
676
-            }
677
-            return false;
678
-        }
679
-
680
-        /**
681
-         * Determine if the browser is the YandexFavicons or not
682
-         * @return boolean True if the browser is the YandexFavicons otherwise false
683
-         */
684
-        protected function checkBrowserYandexFaviconsBot()
685
-        {
686
-            if (stripos($this->_agent, 'YandexFavicons') !== false) {
687
-                $aresult = explode('/', stristr($this->_agent, 'YandexFavicons'));
688
-                if (isset($aresult[1])) {
689
-                    $aversion = explode(' ', $aresult[1]);
690
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
691
-                    $this->_browser_name = self::BROWSER_YANDEXFAVICONS_BOT;
692
-                    $this->setRobot(true);
693
-                    return true;
694
-                }
695
-            }
696
-            return false;
697
-        }
698
-
699
-        /**
700
-         * Determine if the browser is the YandexBlogs or not
701
-         * @return boolean True if the browser is the YandexBlogs otherwise false
702
-         */
703
-        protected function checkBrowserYandexBlogsBot()
704
-        {
705
-            if (stripos($this->_agent, 'YandexBlogs') !== false) {
706
-                $aresult = explode('/', stristr($this->_agent, 'YandexBlogs'));
707
-                if (isset($aresult[1])) {
708
-                    $aversion = explode(' ', $aresult[1]);
709
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
710
-                    $this->_browser_name = self::BROWSER_YANDEXBLOGS_BOT;
711
-                    $this->setRobot(true);
712
-                    return true;
713
-                }
714
-            }
715
-            return false;
716
-        }
717
-
718
-        /**
719
-         * Determine if the browser is the YandexMedia or not
720
-         * @return boolean True if the browser is the YandexMedia otherwise false
721
-         */
722
-        protected function checkBrowserYandexMediaBot()
723
-        {
724
-            if (stripos($this->_agent, 'YandexMedia') !== false) {
725
-                $aresult = explode('/', stristr($this->_agent, 'YandexMedia'));
726
-                if (isset($aresult[1])) {
727
-                    $aversion = explode(' ', $aresult[1]);
728
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
729
-                    $this->_browser_name = self::BROWSER_YANDEXMEDIA_BOT;
730
-                    $this->setRobot(true);
731
-                    return true;
732
-                }
733
-            }
734
-            return false;
735
-        }
736
-
737
-        /**
738
-         * Determine if the browser is the YandexVideo or not
739
-         * @return boolean True if the browser is the YandexVideo otherwise false
740
-         */
741
-        protected function checkBrowserYandexVideoBot()
742
-        {
743
-            if (stripos($this->_agent, 'YandexVideo') !== false) {
744
-                $aresult = explode('/', stristr($this->_agent, 'YandexVideo'));
745
-                if (isset($aresult[1])) {
746
-                    $aversion = explode(' ', $aresult[1]);
747
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
748
-                    $this->_browser_name = self::BROWSER_YANDEXVIDEO_BOT;
749
-                    $this->setRobot(true);
750
-                    return true;
751
-                }
752
-            }
753
-            return false;
754
-        }
755
-
756
-        /**
757
-         * Determine if the browser is the YandexImages or not
758
-         * @return boolean True if the browser is the YandexImages otherwise false
759
-         */
760
-        protected function checkBrowserYandexImagesBot()
761
-        {
762
-            if (stripos($this->_agent, 'YandexImages') !== false) {
763
-                $aresult = explode('/', stristr($this->_agent, 'YandexImages'));
764
-                if (isset($aresult[1])) {
765
-                    $aversion = explode(' ', $aresult[1]);
766
-                    $this->setVersion(str_replace(';', '', $aversion[0]));
767
-                    $this->_browser_name = self::BROWSER_YANDEXIMAGES_BOT;
768
-                    $this->setRobot(true);
769
-                    return true;
770
-                }
771
-            }
772
-            return false;
773
-        }
774
-
775
-        /**
776
-         * Determine if the browser is the MSNBot or not (last updated 1.9)
777
-         * @return boolean True if the browser is the MSNBot otherwise false
778
-         */
779
-        protected function checkBrowserMSNBot()
780
-        {
781
-            if (stripos($this->_agent, "msnbot") !== false) {
782
-                $aresult = explode("/", stristr($this->_agent, "msnbot"));
783
-                if (isset($aresult[1])) {
784
-                    $aversion = explode(" ", $aresult[1]);
785
-                    $this->setVersion(str_replace(";", "", $aversion[0]));
786
-                    $this->_browser_name = self::BROWSER_MSNBOT;
787
-                    $this->setRobot(true);
788
-                    return true;
789
-                }
790
-            }
791
-            return false;
792
-        }
793
-
794
-        /**
795
-         * Determine if the browser is the BingBot or not (last updated 1.9)
796
-         * @return boolean True if the browser is the BingBot otherwise false
797
-         */
798
-        protected function checkBrowserBingBot()
799
-        {
800
-            if (stripos($this->_agent, "bingbot") !== false) {
801
-                $aresult = explode("/", stristr($this->_agent, "bingbot"));
802
-                if (isset($aresult[1])) {
803
-                    $aversion = explode(" ", $aresult[1]);
804
-                    $this->setVersion(str_replace(";", "", $aversion[0]));
805
-                    $this->_browser_name = self::BROWSER_BINGBOT;
806
-                    $this->setRobot(true);
807
-                    return true;
808
-                }
809
-            }
810
-            return false;
811
-        }
812
-
813
-        /**
814
-         * Determine if the browser is the W3C Validator or not (last updated 1.7)
815
-         * @return boolean True if the browser is the W3C Validator otherwise false
816
-         */
817
-        protected function checkBrowserW3CValidator()
818
-        {
819
-            if (stripos($this->_agent, 'W3C-checklink') !== false) {
820
-                $aresult = explode('/', stristr($this->_agent, 'W3C-checklink'));
821
-                if (isset($aresult[1])) {
822
-                    $aversion = explode(' ', $aresult[1]);
823
-                    $this->setVersion($aversion[0]);
824
-                    $this->_browser_name = self::BROWSER_W3CVALIDATOR;
825
-                    return true;
826
-                }
827
-            } else if (stripos($this->_agent, 'W3C_Validator') !== false) {
828
-                // Some of the Validator versions do not delineate w/ a slash - add it back in
829
-                $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
830
-                $aresult = explode('/', stristr($ua, 'W3C_Validator'));
831
-                if (isset($aresult[1])) {
832
-                    $aversion = explode(' ', $aresult[1]);
833
-                    $this->setVersion($aversion[0]);
834
-                    $this->_browser_name = self::BROWSER_W3CVALIDATOR;
835
-                    return true;
836
-                }
837
-            } else if (stripos($this->_agent, 'W3C-mobileOK') !== false) {
838
-                $this->_browser_name = self::BROWSER_W3CVALIDATOR;
839
-                $this->setMobile(true);
840
-                return true;
841
-            }
842
-            return false;
843
-        }
844
-
845
-        /**
846
-         * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
847
-         * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
848
-         */
849
-        protected function checkBrowserSlurp()
850
-        {
851
-            if (stripos($this->_agent, 'slurp') !== false) {
852
-                $aresult = explode('/', stristr($this->_agent, 'Slurp'));
853
-                if (isset($aresult[1])) {
854
-                    $aversion = explode(' ', $aresult[1]);
855
-                    $this->setVersion($aversion[0]);
856
-                    $this->_browser_name = self::BROWSER_SLURP;
857
-                    $this->setRobot(true);
858
-                    $this->setMobile(false);
859
-                    return true;
860
-                }
861
-            }
862
-            return false;
863
-        }
864
-
865
-        /**
866
-         * Determine if the browser is Edge or not
867
-         * @return boolean True if the browser is Edge otherwise false
868
-         */
869
-        protected function checkBrowserEdge()
870
-        {
871
-            if (stripos($this->_agent, 'Edge/') !== false) {
872
-                $aresult = explode('/', stristr($this->_agent, 'Edge'));
873
-                if (isset($aresult[1])) {
874
-                    $aversion = explode(' ', $aresult[1]);
875
-                    $this->setVersion($aversion[0]);
876
-                    $this->setBrowser(self::BROWSER_EDGE);
877
-                    if (stripos($this->_agent, 'Windows Phone') !== false || stripos($this->_agent, 'Android') !== false) {
878
-                        $this->setMobile(true);
879
-                    }
880
-                    return true;
881
-                }
882
-            }
883
-            return false;
884
-        }
885
-
886
-        /**
887
-         * Determine if the browser is Internet Explorer or not (last updated 1.7)
888
-         * @return boolean True if the browser is Internet Explorer otherwise false
889
-         */
890
-        protected function checkBrowserInternetExplorer()
891
-        {
892
-            //  Test for IE11
893
-            if (stripos($this->_agent, 'Trident/7.0; rv:11.0') !== false) {
894
-                $this->setBrowser(self::BROWSER_IE);
895
-                $this->setVersion('11.0');
896
-                return true;
897
-            } // Test for v1 - v1.5 IE
898
-            else if (stripos($this->_agent, 'microsoft internet explorer') !== false) {
899
-                $this->setBrowser(self::BROWSER_IE);
900
-                $this->setVersion('1.0');
901
-                $aresult = stristr($this->_agent, '/');
902
-                if (preg_match('/308|425|426|474|0b1/i', $aresult)) {
903
-                    $this->setVersion('1.5');
904
-                }
905
-                return true;
906
-            } // Test for versions > 1.5
907
-            else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) {
908
-                // See if the browser is the odd MSN Explorer
909
-                if (stripos($this->_agent, 'msnb') !== false) {
910
-                    $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN'));
911
-                    if (isset($aresult[1])) {
912
-                        $this->setBrowser(self::BROWSER_MSN);
913
-                        $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
914
-                        return true;
915
-                    }
916
-                }
917
-                $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie'));
918
-                if (isset($aresult[1])) {
919
-                    $this->setBrowser(self::BROWSER_IE);
920
-                    $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
921
-                    if(preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)){
922
-                        if($aresult[1] == '3.1'){
923
-                            $this->setVersion('7.0');
924
-                        }
925
-                        else if($aresult[1] == '4.0'){
926
-                            $this->setVersion('8.0');
927
-                        }
928
-                        else if($aresult[1] == '5.0'){
929
-                            $this->setVersion('9.0');
930
-                        }
931
-                        else if($aresult[1] == '6.0'){
932
-                            $this->setVersion('10.0');
933
-                        }
934
-                        else if($aresult[1] == '7.0'){
935
-                            $this->setVersion('11.0');
936
-                        }
937
-                        else if($aresult[1] == '8.0'){
938
-                            $this->setVersion('11.0');
939
-                        }
940
-                    }
941
-                    if(stripos($this->_agent, 'IEMobile') !== false) {
942
-                        $this->setBrowser(self::BROWSER_POCKET_IE);
943
-                        $this->setMobile(true);
944
-                    }
945
-                    return true;
946
-                }
947
-            } // Test for versions > IE 10
948
-            else if (stripos($this->_agent, 'trident') !== false) {
949
-                $this->setBrowser(self::BROWSER_IE);
950
-                $result = explode('rv:', $this->_agent);
951
-                if (isset($result[1])) {
952
-                    $this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1]));
953
-                    $this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent);
954
-                }
955
-            } // Test for Pocket IE
956
-            else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) {
957
-                $aresult = explode(' ', stristr($this->_agent, 'mspie'));
958
-                if (isset($aresult[1])) {
959
-                    $this->setPlatform(self::PLATFORM_WINDOWS_CE);
960
-                    $this->setBrowser(self::BROWSER_POCKET_IE);
961
-                    $this->setMobile(true);
962
-
963
-                    if (stripos($this->_agent, 'mspie') !== false) {
964
-                        $this->setVersion($aresult[1]);
965
-                    } else {
966
-                        $aversion = explode('/', $this->_agent);
967
-                        if (isset($aversion[1])) {
968
-                            $this->setVersion($aversion[1]);
969
-                        }
970
-                    }
971
-                    return true;
972
-                }
973
-            }
974
-            return false;
975
-        }
976
-
977
-        /**
978
-         * Determine if the browser is Opera or not (last updated 1.7)
979
-         * @return boolean True if the browser is Opera otherwise false
980
-         */
981
-        protected function checkBrowserOpera()
982
-        {
983
-            if (stripos($this->_agent, 'opera mini') !== false) {
984
-                $resultant = stristr($this->_agent, 'opera mini');
985
-                if (preg_match('/\//', $resultant)) {
986
-                    $aresult = explode('/', $resultant);
987
-                    if (isset($aresult[1])) {
988
-                        $aversion = explode(' ', $aresult[1]);
989
-                        $this->setVersion($aversion[0]);
990
-                    }
991
-                } else {
992
-                    $aversion = explode(' ', stristr($resultant, 'opera mini'));
993
-                    if (isset($aversion[1])) {
994
-                        $this->setVersion($aversion[1]);
995
-                    }
996
-                }
997
-                $this->_browser_name = self::BROWSER_OPERA_MINI;
998
-                $this->setMobile(true);
999
-                return true;
1000
-            } else if (stripos($this->_agent, 'opera') !== false) {
1001
-                $resultant = stristr($this->_agent, 'opera');
1002
-                if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) {
1003
-                    $this->setVersion($matches[1]);
1004
-                } else if (preg_match('/\//', $resultant)) {
1005
-                    $aresult = explode('/', str_replace("(", " ", $resultant));
1006
-                    if (isset($aresult[1])) {
1007
-                        $aversion = explode(' ', $aresult[1]);
1008
-                        $this->setVersion($aversion[0]);
1009
-                    }
1010
-                } else {
1011
-                    $aversion = explode(' ', stristr($resultant, 'opera'));
1012
-                    $this->setVersion(isset($aversion[1]) ? $aversion[1] : "");
1013
-                }
1014
-                if (stripos($this->_agent, 'Opera Mobi') !== false) {
1015
-                    $this->setMobile(true);
1016
-                }
1017
-                $this->_browser_name = self::BROWSER_OPERA;
1018
-                return true;
1019
-            } else if (stripos($this->_agent, 'OPR') !== false) {
1020
-                $resultant = stristr($this->_agent, 'OPR');
1021
-                if (preg_match('/\//', $resultant)) {
1022
-                    $aresult = explode('/', str_replace("(", " ", $resultant));
1023
-                    if (isset($aresult[1])) {
1024
-                        $aversion = explode(' ', $aresult[1]);
1025
-                        $this->setVersion($aversion[0]);
1026
-                    }
1027
-                }
1028
-                if (stripos($this->_agent, 'Mobile') !== false) {
1029
-                    $this->setMobile(true);
1030
-                }
1031
-                $this->_browser_name = self::BROWSER_OPERA;
1032
-                return true;
1033
-            }
1034
-            return false;
1035
-        }
1036
-
1037
-        /**
1038
-         * Determine if the browser is Chrome or not (last updated 1.7)
1039
-         * @return boolean True if the browser is Chrome otherwise false
1040
-         */
1041
-        protected function checkBrowserChrome()
1042
-        {
1043
-            if (stripos($this->_agent, 'Chrome') !== false) {
1044
-                $aresult = explode('/', stristr($this->_agent, 'Chrome'));
1045
-                if (isset($aresult[1])) {
1046
-                    $aversion = explode(' ', $aresult[1]);
1047
-                    $this->setVersion($aversion[0]);
1048
-                    $this->setBrowser(self::BROWSER_CHROME);
1049
-                    //Chrome on Android
1050
-                    if (stripos($this->_agent, 'Android') !== false) {
1051
-                        if (stripos($this->_agent, 'Mobile') !== false) {
1052
-                            $this->setMobile(true);
1053
-                        } else {
1054
-                            $this->setTablet(true);
1055
-                        }
1056
-                    }
1057
-                    return true;
1058
-                }
1059
-            }
1060
-            return false;
1061
-        }
1062
-
1063
-
1064
-        /**
1065
-         * Determine if the browser is WebTv or not (last updated 1.7)
1066
-         * @return boolean True if the browser is WebTv otherwise false
1067
-         */
1068
-        protected function checkBrowserWebTv()
1069
-        {
1070
-            if (stripos($this->_agent, 'webtv') !== false) {
1071
-                $aresult = explode('/', stristr($this->_agent, 'webtv'));
1072
-                if (isset($aresult[1])) {
1073
-                    $aversion = explode(' ', $aresult[1]);
1074
-                    $this->setVersion($aversion[0]);
1075
-                    $this->setBrowser(self::BROWSER_WEBTV);
1076
-                    return true;
1077
-                }
1078
-            }
1079
-            return false;
1080
-        }
1081
-
1082
-        /**
1083
-         * Determine if the browser is NetPositive or not (last updated 1.7)
1084
-         * @return boolean True if the browser is NetPositive otherwise false
1085
-         */
1086
-        protected function checkBrowserNetPositive()
1087
-        {
1088
-            if (stripos($this->_agent, 'NetPositive') !== false) {
1089
-                $aresult = explode('/', stristr($this->_agent, 'NetPositive'));
1090
-                if (isset($aresult[1])) {
1091
-                    $aversion = explode(' ', $aresult[1]);
1092
-                    $this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0]));
1093
-                    $this->setBrowser(self::BROWSER_NETPOSITIVE);
1094
-                    return true;
1095
-                }
1096
-            }
1097
-            return false;
1098
-        }
1099
-
1100
-        /**
1101
-         * Determine if the browser is Galeon or not (last updated 1.7)
1102
-         * @return boolean True if the browser is Galeon otherwise false
1103
-         */
1104
-        protected function checkBrowserGaleon()
1105
-        {
1106
-            if (stripos($this->_agent, 'galeon') !== false) {
1107
-                $aresult = explode(' ', stristr($this->_agent, 'galeon'));
1108
-                $aversion = explode('/', $aresult[0]);
1109
-                if (isset($aversion[1])) {
1110
-                    $this->setVersion($aversion[1]);
1111
-                    $this->setBrowser(self::BROWSER_GALEON);
1112
-                    return true;
1113
-                }
1114
-            }
1115
-            return false;
1116
-        }
1117
-
1118
-        /**
1119
-         * Determine if the browser is Konqueror or not (last updated 1.7)
1120
-         * @return boolean True if the browser is Konqueror otherwise false
1121
-         */
1122
-        protected function checkBrowserKonqueror()
1123
-        {
1124
-            if (stripos($this->_agent, 'Konqueror') !== false) {
1125
-                $aresult = explode(' ', stristr($this->_agent, 'Konqueror'));
1126
-                $aversion = explode('/', $aresult[0]);
1127
-                if (isset($aversion[1])) {
1128
-                    $this->setVersion($aversion[1]);
1129
-                    $this->setBrowser(self::BROWSER_KONQUEROR);
1130
-                    return true;
1131
-                }
1132
-            }
1133
-            return false;
1134
-        }
1135
-
1136
-        /**
1137
-         * Determine if the browser is iCab or not (last updated 1.7)
1138
-         * @return boolean True if the browser is iCab otherwise false
1139
-         */
1140
-        protected function checkBrowserIcab()
1141
-        {
1142
-            if (stripos($this->_agent, 'icab') !== false) {
1143
-                $aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab'));
1144
-                if (isset($aversion[1])) {
1145
-                    $this->setVersion($aversion[1]);
1146
-                    $this->setBrowser(self::BROWSER_ICAB);
1147
-                    return true;
1148
-                }
1149
-            }
1150
-            return false;
1151
-        }
1152
-
1153
-        /**
1154
-         * Determine if the browser is OmniWeb or not (last updated 1.7)
1155
-         * @return boolean True if the browser is OmniWeb otherwise false
1156
-         */
1157
-        protected function checkBrowserOmniWeb()
1158
-        {
1159
-            if (stripos($this->_agent, 'omniweb') !== false) {
1160
-                $aresult = explode('/', stristr($this->_agent, 'omniweb'));
1161
-                $aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : "");
1162
-                $this->setVersion($aversion[0]);
1163
-                $this->setBrowser(self::BROWSER_OMNIWEB);
1164
-                return true;
1165
-            }
1166
-            return false;
1167
-        }
1168
-
1169
-        /**
1170
-         * Determine if the browser is Phoenix or not (last updated 1.7)
1171
-         * @return boolean True if the browser is Phoenix otherwise false
1172
-         */
1173
-        protected function checkBrowserPhoenix()
1174
-        {
1175
-            if (stripos($this->_agent, 'Phoenix') !== false) {
1176
-                $aversion = explode('/', stristr($this->_agent, 'Phoenix'));
1177
-                if (isset($aversion[1])) {
1178
-                    $this->setVersion($aversion[1]);
1179
-                    $this->setBrowser(self::BROWSER_PHOENIX);
1180
-                    return true;
1181
-                }
1182
-            }
1183
-            return false;
1184
-        }
1185
-
1186
-        /**
1187
-         * Determine if the browser is Firebird or not (last updated 1.7)
1188
-         * @return boolean True if the browser is Firebird otherwise false
1189
-         */
1190
-        protected function checkBrowserFirebird()
1191
-        {
1192
-            if (stripos($this->_agent, 'Firebird') !== false) {
1193
-                $aversion = explode('/', stristr($this->_agent, 'Firebird'));
1194
-                if (isset($aversion[1])) {
1195
-                    $this->setVersion($aversion[1]);
1196
-                    $this->setBrowser(self::BROWSER_FIREBIRD);
1197
-                    return true;
1198
-                }
1199
-            }
1200
-            return false;
1201
-        }
1202
-
1203
-        /**
1204
-         * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
1205
-         * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
1206
-         * @return boolean True if the browser is Netscape Navigator 9+ otherwise false
1207
-         */
1208
-        protected function checkBrowserNetscapeNavigator9Plus()
1209
-        {
1210
-            if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) {
1211
-                $this->setVersion($matches[1]);
1212
-                $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
1213
-                return true;
1214
-            } else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) {
1215
-                $this->setVersion($matches[1]);
1216
-                $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
1217
-                return true;
1218
-            }
1219
-            return false;
1220
-        }
1221
-
1222
-        /**
1223
-         * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
1224
-         * @return boolean True if the browser is Shiretoko otherwise false
1225
-         */
1226
-        protected function checkBrowserShiretoko()
1227
-        {
1228
-            if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) {
1229
-                $this->setVersion($matches[1]);
1230
-                $this->setBrowser(self::BROWSER_SHIRETOKO);
1231
-                return true;
1232
-            }
1233
-            return false;
1234
-        }
1235
-
1236
-        /**
1237
-         * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
1238
-         * @return boolean True if the browser is Ice Cat otherwise false
1239
-         */
1240
-        protected function checkBrowserIceCat()
1241
-        {
1242
-            if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) {
1243
-                $this->setVersion($matches[1]);
1244
-                $this->setBrowser(self::BROWSER_ICECAT);
1245
-                return true;
1246
-            }
1247
-            return false;
1248
-        }
1249
-
1250
-        /**
1251
-         * Determine if the browser is Nokia or not (last updated 1.7)
1252
-         * @return boolean True if the browser is Nokia otherwise false
1253
-         */
1254
-        protected function checkBrowserNokia()
1255
-        {
1256
-            if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) {
1257
-                $this->setVersion($matches[2]);
1258
-                if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) {
1259
-                    $this->setBrowser(self::BROWSER_NOKIA_S60);
1260
-                } else {
1261
-                    $this->setBrowser(self::BROWSER_NOKIA);
1262
-                }
1263
-                $this->setMobile(true);
1264
-                return true;
1265
-            }
1266
-            return false;
1267
-        }
1268
-
1269
-        /**
1270
-         * Determine if the browser is Firefox or not (last updated 1.7)
1271
-         * @return boolean True if the browser is Firefox otherwise false
1272
-         */
1273
-        protected function checkBrowserFirefox()
1274
-        {
1275
-            if (stripos($this->_agent, 'safari') === false) {
1276
-                if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) {
1277
-                    $this->setVersion($matches[1]);
1278
-                    $this->setBrowser(self::BROWSER_FIREFOX);
1279
-                    //Firefox on Android
1280
-                    if (stripos($this->_agent, 'Android') !== false) {
1281
-                        if (stripos($this->_agent, 'Mobile') !== false) {
1282
-                            $this->setMobile(true);
1283
-                        } else {
1284
-                            $this->setTablet(true);
1285
-                        }
1286
-                    }
1287
-                    return true;
1288
-                } else if (preg_match("/Firefox$/i", $this->_agent, $matches)) {
1289
-                    $this->setVersion("");
1290
-                    $this->setBrowser(self::BROWSER_FIREFOX);
1291
-                    return true;
1292
-                }
1293
-            }
1294
-            return false;
1295
-        }
1296
-
1297
-        /**
1298
-         * Determine if the browser is Firefox or not (last updated 1.7)
1299
-         * @return boolean True if the browser is Firefox otherwise false
1300
-         */
1301
-        protected function checkBrowserIceweasel()
1302
-        {
1303
-            if (stripos($this->_agent, 'Iceweasel') !== false) {
1304
-                $aresult = explode('/', stristr($this->_agent, 'Iceweasel'));
1305
-                if (isset($aresult[1])) {
1306
-                    $aversion = explode(' ', $aresult[1]);
1307
-                    $this->setVersion($aversion[0]);
1308
-                    $this->setBrowser(self::BROWSER_ICEWEASEL);
1309
-                    return true;
1310
-                }
1311
-            }
1312
-            return false;
1313
-        }
1314
-
1315
-        /**
1316
-         * Determine if the browser is Mozilla or not (last updated 1.7)
1317
-         * @return boolean True if the browser is Mozilla otherwise false
1318
-         */
1319
-        protected function checkBrowserMozilla()
1320
-        {
1321
-            if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
1322
-                $aversion = explode(' ', stristr($this->_agent, 'rv:'));
1323
-                preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion);
1324
-                $this->setVersion(str_replace('rv:', '', $aversion[0]));
1325
-                $this->setBrowser(self::BROWSER_MOZILLA);
1326
-                return true;
1327
-            } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
1328
-                $aversion = explode('', stristr($this->_agent, 'rv:'));
1329
-                $this->setVersion(str_replace('rv:', '', $aversion[0]));
1330
-                $this->setBrowser(self::BROWSER_MOZILLA);
1331
-                return true;
1332
-            } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) {
1333
-                $this->setVersion($matches[1]);
1334
-                $this->setBrowser(self::BROWSER_MOZILLA);
1335
-                return true;
1336
-            }
1337
-            return false;
1338
-        }
1339
-
1340
-        /**
1341
-         * Determine if the browser is Lynx or not (last updated 1.7)
1342
-         * @return boolean True if the browser is Lynx otherwise false
1343
-         */
1344
-        protected function checkBrowserLynx()
1345
-        {
1346
-            if (stripos($this->_agent, 'lynx') !== false) {
1347
-                $aresult = explode('/', stristr($this->_agent, 'Lynx'));
1348
-                $aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : ""));
1349
-                $this->setVersion($aversion[0]);
1350
-                $this->setBrowser(self::BROWSER_LYNX);
1351
-                return true;
1352
-            }
1353
-            return false;
1354
-        }
1355
-
1356
-        /**
1357
-         * Determine if the browser is Amaya or not (last updated 1.7)
1358
-         * @return boolean True if the browser is Amaya otherwise false
1359
-         */
1360
-        protected function checkBrowserAmaya()
1361
-        {
1362
-            if (stripos($this->_agent, 'amaya') !== false) {
1363
-                $aresult = explode('/', stristr($this->_agent, 'Amaya'));
1364
-                if (isset($aresult[1])) {
1365
-                    $aversion = explode(' ', $aresult[1]);
1366
-                    $this->setVersion($aversion[0]);
1367
-                    $this->setBrowser(self::BROWSER_AMAYA);
1368
-                    return true;
1369
-                }
1370
-            }
1371
-            return false;
1372
-        }
1373
-
1374
-        /**
1375
-         * Determine if the browser is Safari or not (last updated 1.7)
1376
-         * @return boolean True if the browser is Safari otherwise false
1377
-         */
1378
-        protected function checkBrowserSafari()
1379
-        {
1380
-            if (stripos($this->_agent, 'Safari') !== false
1381
-                && stripos($this->_agent, 'iPhone') === false
1382
-                && stripos($this->_agent, 'iPod') === false
1383
-            ) {
1384
-
1385
-                $aresult = explode('/', stristr($this->_agent, 'Version'));
1386
-                if (isset($aresult[1])) {
1387
-                    $aversion = explode(' ', $aresult[1]);
1388
-                    $this->setVersion($aversion[0]);
1389
-                } else {
1390
-                    $this->setVersion(self::VERSION_UNKNOWN);
1391
-                }
1392
-                $this->setBrowser(self::BROWSER_SAFARI);
1393
-                return true;
1394
-            }
1395
-            return false;
1396
-        }
1397
-
1398
-        protected function checkBrowserSamsung()
1399
-        {
1400
-            if (stripos($this->_agent, 'SamsungBrowser') !== false) {
1401
-
1402
-                $aresult = explode('/', stristr($this->_agent, 'SamsungBrowser'));
1403
-                if (isset($aresult[1])) {
1404
-                    $aversion = explode(' ', $aresult[1]);
1405
-                    $this->setVersion($aversion[0]);
1406
-                } else {
1407
-                    $this->setVersion(self::VERSION_UNKNOWN);
1408
-                }
1409
-                $this->setBrowser(self::BROWSER_SAMSUNG);
1410
-                return true;
1411
-            }
1412
-            return false;
1413
-        }
1414
-
1415
-        protected function checkBrowserSilk()
1416
-        {
1417
-            if (stripos($this->_agent, 'Silk') !== false) {
1418
-                $aresult = explode('/', stristr($this->_agent, 'Silk'));
1419
-                if (isset($aresult[1])) {
1420
-                    $aversion = explode(' ', $aresult[1]);
1421
-                    $this->setVersion($aversion[0]);
1422
-                } else {
1423
-                    $this->setVersion(self::VERSION_UNKNOWN);
1424
-                }
1425
-                $this->setBrowser(self::BROWSER_SILK);
1426
-                return true;
1427
-            }
1428
-            return false;
1429
-        }
1430
-
1431
-        protected function checkBrowserIframely()
1432
-        {
1433
-            if (stripos($this->_agent, 'Iframely') !== false) {
1434
-                $aresult = explode('/', stristr($this->_agent, 'Iframely'));
1435
-                if (isset($aresult[1])) {
1436
-                    $aversion = explode(' ', $aresult[1]);
1437
-                    $this->setVersion($aversion[0]);
1438
-                } else {
1439
-                    $this->setVersion(self::VERSION_UNKNOWN);
1440
-                }
1441
-                $this->setBrowser(self::BROWSER_I_FRAME);
1442
-                return true;
1443
-            }
1444
-            return false;
1445
-        }
1446
-
1447
-        protected function checkBrowserCocoa()
1448
-        {
1449
-            if (stripos($this->_agent, 'CocoaRestClient') !== false) {
1450
-                $aresult = explode('/', stristr($this->_agent, 'CocoaRestClient'));
1451
-                if (isset($aresult[1])) {
1452
-                    $aversion = explode(' ', $aresult[1]);
1453
-                    $this->setVersion($aversion[0]);
1454
-                } else {
1455
-                    $this->setVersion(self::VERSION_UNKNOWN);
1456
-                }
1457
-                $this->setBrowser(self::BROWSER_COCOA);
1458
-                return true;
1459
-            }
1460
-            return false;
1461
-        }
1462
-
1463
-        /**
1464
-         * Detect if URL is loaded from FacebookExternalHit
1465
-         * @return boolean True if it detects FacebookExternalHit otherwise false
1466
-         */
1467
-        protected function checkFacebookExternalHit()
1468
-        {
1469
-            if (stristr($this->_agent, 'FacebookExternalHit')) {
1470
-                $this->setRobot(true);
1471
-                $this->setFacebook(true);
1472
-                return true;
1473
-            }
1474
-            return false;
1475
-        }
1476
-
1477
-        /**
1478
-         * Detect if URL is being loaded from internal Facebook browser
1479
-         * @return boolean True if it detects internal Facebook browser otherwise false
1480
-         */
1481
-        protected function checkForFacebookIos()
1482
-        {
1483
-            if (stristr($this->_agent, 'FBIOS')) {
1484
-                $this->setFacebook(true);
1485
-                return true;
1486
-            }
1487
-            return false;
1488
-        }
1489
-
1490
-        /**
1491
-         * Detect Version for the Safari browser on iOS devices
1492
-         * @return boolean True if it detects the version correctly otherwise false
1493
-         */
1494
-        protected function getSafariVersionOnIos()
1495
-        {
1496
-            $aresult = explode('/', stristr($this->_agent, 'Version'));
1497
-            if (isset($aresult[1])) {
1498
-                $aversion = explode(' ', $aresult[1]);
1499
-                $this->setVersion($aversion[0]);
1500
-                return true;
1501
-            }
1502
-            return false;
1503
-        }
1504
-
1505
-        /**
1506
-         * Detect Version for the Chrome browser on iOS devices
1507
-         * @return boolean True if it detects the version correctly otherwise false
1508
-         */
1509
-        protected function getChromeVersionOnIos()
1510
-        {
1511
-            $aresult = explode('/', stristr($this->_agent, 'CriOS'));
1512
-            if (isset($aresult[1])) {
1513
-                $aversion = explode(' ', $aresult[1]);
1514
-                $this->setVersion($aversion[0]);
1515
-                $this->setBrowser(self::BROWSER_CHROME);
1516
-                return true;
1517
-            }
1518
-            return false;
1519
-        }
1520
-
1521
-        /**
1522
-         * Determine if the browser is iPhone or not (last updated 1.7)
1523
-         * @return boolean True if the browser is iPhone otherwise false
1524
-         */
1525
-        protected function checkBrowseriPhone()
1526
-        {
1527
-            if (stripos($this->_agent, 'iPhone') !== false) {
1528
-                $this->setVersion(self::VERSION_UNKNOWN);
1529
-                $this->setBrowser(self::BROWSER_IPHONE);
1530
-                $this->getSafariVersionOnIos();
1531
-                $this->getChromeVersionOnIos();
1532
-                $this->checkForFacebookIos();
1533
-                $this->setMobile(true);
1534
-                return true;
1535
-
1536
-            }
1537
-            return false;
1538
-        }
1539
-
1540
-        /**
1541
-         * Determine if the browser is iPad or not (last updated 1.7)
1542
-         * @return boolean True if the browser is iPad otherwise false
1543
-         */
1544
-        protected function checkBrowseriPad()
1545
-        {
1546
-            if (stripos($this->_agent, 'iPad') !== false) {
1547
-                $this->setVersion(self::VERSION_UNKNOWN);
1548
-                $this->setBrowser(self::BROWSER_IPAD);
1549
-                $this->getSafariVersionOnIos();
1550
-                $this->getChromeVersionOnIos();
1551
-                $this->checkForFacebookIos();
1552
-                $this->setTablet(true);
1553
-                return true;
1554
-            }
1555
-            return false;
1556
-        }
1557
-
1558
-        /**
1559
-         * Determine if the browser is iPod or not (last updated 1.7)
1560
-         * @return boolean True if the browser is iPod otherwise false
1561
-         */
1562
-        protected function checkBrowseriPod()
1563
-        {
1564
-            if (stripos($this->_agent, 'iPod') !== false) {
1565
-                $this->setVersion(self::VERSION_UNKNOWN);
1566
-                $this->setBrowser(self::BROWSER_IPOD);
1567
-                $this->getSafariVersionOnIos();
1568
-                $this->getChromeVersionOnIos();
1569
-                $this->checkForFacebookIos();
1570
-                $this->setMobile(true);
1571
-                return true;
1572
-            }
1573
-            return false;
1574
-        }
1575
-
1576
-        /**
1577
-         * Determine if the browser is Android or not (last updated 1.7)
1578
-         * @return boolean True if the browser is Android otherwise false
1579
-         */
1580
-        protected function checkBrowserAndroid()
1581
-        {
1582
-            if (stripos($this->_agent, 'Android') !== false) {
1583
-                $aresult = explode(' ', stristr($this->_agent, 'Android'));
1584
-                if (isset($aresult[1])) {
1585
-                    $aversion = explode(' ', $aresult[1]);
1586
-                    $this->setVersion($aversion[0]);
1587
-                } else {
1588
-                    $this->setVersion(self::VERSION_UNKNOWN);
1589
-                }
1590
-                if (stripos($this->_agent, 'Mobile') !== false) {
1591
-                    $this->setMobile(true);
1592
-                } else {
1593
-                    $this->setTablet(true);
1594
-                }
1595
-                $this->setBrowser(self::BROWSER_ANDROID);
1596
-                return true;
1597
-            }
1598
-            return false;
1599
-        }
1600
-
1601
-        /**
1602
-         * Determine if the browser is Vivaldi
1603
-         * @return boolean True if the browser is Vivaldi otherwise false
1604
-         */
1605
-        protected function checkBrowserVivaldi()
1606
-        {
1607
-            if (stripos($this->_agent, 'Vivaldi') !== false) {
1608
-                $aresult = explode('/', stristr($this->_agent, 'Vivaldi'));
1609
-                if (isset($aresult[1])) {
1610
-                    $aversion = explode(' ', $aresult[1]);
1611
-                    $this->setVersion($aversion[0]);
1612
-                    $this->setBrowser(self::BROWSER_VIVALDI);
1613
-                    return true;
1614
-                }
1615
-            }
1616
-            return false;
1617
-        }
1618
-
1619
-        /**
1620
-         * Determine if the browser is Yandex
1621
-         * @return boolean True if the browser is Yandex otherwise false
1622
-         */
1623
-        protected function checkBrowserYandex()
1624
-        {
1625
-            if (stripos($this->_agent, 'YaBrowser') !== false) {
1626
-                $aresult = explode('/', stristr($this->_agent, 'YaBrowser'));
1627
-                if (isset($aresult[1])) {
1628
-                    $aversion = explode(' ', $aresult[1]);
1629
-                    $this->setVersion($aversion[0]);
1630
-                    $this->setBrowser(self::BROWSER_YANDEX);
1631
-
1632
-                    if (stripos($this->_agent, 'iPad') !== false) {
1633
-                        $this->setTablet(true);
1634
-                    } elseif (stripos($this->_agent, 'Mobile') !== false) {
1635
-                        $this->setMobile(true);
1636
-                    } elseif (stripos($this->_agent, 'Android') !== false) {
1637
-                        $this->setTablet(true);
1638
-                    }
1639
-
1640
-                    return true;
1641
-                }
1642
-            }
1643
-
1644
-            return false;
1645
-        }
1646
-
1647
-        /**
1648
-         * Determine if the browser is a PlayStation
1649
-         * @return boolean True if the browser is PlayStation otherwise false
1650
-         */
1651
-        protected function checkBrowserPlayStation()
1652
-        {
1653
-            if (stripos($this->_agent, 'PlayStation ') !== false) {
1654
-                $aresult = explode(' ', stristr($this->_agent, 'PlayStation '));
1655
-                $this->setBrowser(self::BROWSER_PLAYSTATION);
1656
-                if (isset($aresult[0])) {
1657
-                    $aversion = explode(')', $aresult[2]);
1658
-                    $this->setVersion($aversion[0]);
1659
-                    if (stripos($this->_agent, 'Portable)') !== false || stripos($this->_agent, 'Vita') !== false) {
1660
-                        $this->setMobile(true);
1661
-                    }
1662
-                    return true;
1663
-                }
1664
-            }
1665
-            return false;
1666
-        }
1667
-
1668
-        /**
1669
-         * Determine the user's platform (last updated 2.0)
1670
-         */
1671
-        protected function checkPlatform()
1672
-        {
1673
-            if (stripos($this->_agent, 'windows') !== false) {
1674
-                $this->_platform = self::PLATFORM_WINDOWS;
1675
-            } else if (stripos($this->_agent, 'iPad') !== false) {
1676
-                $this->_platform = self::PLATFORM_IPAD;
1677
-            } else if (stripos($this->_agent, 'iPod') !== false) {
1678
-                $this->_platform = self::PLATFORM_IPOD;
1679
-            } else if (stripos($this->_agent, 'iPhone') !== false) {
1680
-                $this->_platform = self::PLATFORM_IPHONE;
1681
-            } elseif (stripos($this->_agent, 'mac') !== false) {
1682
-                $this->_platform = self::PLATFORM_APPLE;
1683
-            } elseif (stripos($this->_agent, 'android') !== false) {
1684
-                $this->_platform = self::PLATFORM_ANDROID;
1685
-            } elseif (stripos($this->_agent, 'Silk') !== false) {
1686
-                $this->_platform = self::PLATFORM_FIRE_OS;
1687
-            } elseif (stripos($this->_agent, 'linux') !== false && stripos($this->_agent, 'SMART-TV') !== false ) {
1688
-                $this->_platform = self::PLATFORM_LINUX .'/'.self::PLATFORM_SMART_TV;
1689
-            } elseif (stripos($this->_agent, 'linux') !== false) {
1690
-                $this->_platform = self::PLATFORM_LINUX;
1691
-            } else if (stripos($this->_agent, 'Nokia') !== false) {
1692
-                $this->_platform = self::PLATFORM_NOKIA;
1693
-            } else if (stripos($this->_agent, 'BlackBerry') !== false) {
1694
-                $this->_platform = self::PLATFORM_BLACKBERRY;
1695
-            } elseif (stripos($this->_agent, 'FreeBSD') !== false) {
1696
-                $this->_platform = self::PLATFORM_FREEBSD;
1697
-            } elseif (stripos($this->_agent, 'OpenBSD') !== false) {
1698
-                $this->_platform = self::PLATFORM_OPENBSD;
1699
-            } elseif (stripos($this->_agent, 'NetBSD') !== false) {
1700
-                $this->_platform = self::PLATFORM_NETBSD;
1701
-            } elseif (stripos($this->_agent, 'OpenSolaris') !== false) {
1702
-                $this->_platform = self::PLATFORM_OPENSOLARIS;
1703
-            } elseif (stripos($this->_agent, 'SunOS') !== false) {
1704
-                $this->_platform = self::PLATFORM_SUNOS;
1705
-            } elseif (stripos($this->_agent, 'OS\/2') !== false) {
1706
-                $this->_platform = self::PLATFORM_OS2;
1707
-            } elseif (stripos($this->_agent, 'BeOS') !== false) {
1708
-                $this->_platform = self::PLATFORM_BEOS;
1709
-            } elseif (stripos($this->_agent, 'win') !== false) {
1710
-                $this->_platform = self::PLATFORM_WINDOWS;
1711
-            } elseif (stripos($this->_agent, 'Playstation') !== false) {
1712
-                $this->_platform = self::PLATFORM_PLAYSTATION;
1713
-            } elseif (stripos($this->_agent, 'Roku') !== false) {
1714
-                $this->_platform = self::PLATFORM_ROKU;
1715
-            } elseif (stripos($this->_agent, 'iOS') !== false) {
1716
-                $this->_platform = self::PLATFORM_IPHONE . '/' . self::PLATFORM_IPAD;
1717
-            } elseif (stripos($this->_agent, 'tvOS') !== false) {
1718
-                $this->_platform = self::PLATFORM_APPLE_TV;
1719
-            } elseif (stripos($this->_agent, 'curl') !== false) {
1720
-                $this->_platform = self::PLATFORM_TERMINAL;
1721
-            } elseif (stripos($this->_agent, 'CrOS') !== false) {
1722
-                $this->_platform = self::PLATFORM_CHROME_OS;
1723
-            } elseif (stripos($this->_agent, 'okhttp') !== false) {
1724
-                $this->_platform = self::PLATFORM_JAVA_ANDROID;
1725
-            } elseif (stripos($this->_agent, 'PostmanRuntime') !== false) {
1726
-                $this->_platform = self::PLATFORM_POSTMAN;
1727
-            } elseif (stripos($this->_agent, 'Iframely') !== false) {
1728
-                $this->_platform = self::PLATFORM_I_FRAME;
1729
-            }
1730
-
1731
-        }
1732
-    }
2
+	defined('ROOT_PATH') || exit('Access denied');
3
+	/**
4
+	 * File: Browser.php
5
+	 * Author: Chris Schuld (http://chrisschuld.com/)
6
+	 * Last Modified: July 22nd, 2016
7
+	 * @version 2.0
8
+	 * @package PegasusPHP
9
+	 *
10
+	 * Copyright (C) 2008-2010 Chris Schuld  ([email protected])
11
+	 *
12
+	 * This program is free software; you can redistribute it and/or
13
+	 * modify it under the terms of the GNU General Public License as
14
+	 * published by the Free Software Foundation; either version 2 of
15
+	 * the License, or (at your option) any later version.
16
+	 *
17
+	 * This program is distributed in the hope that it will be useful,
18
+	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
+	 * GNU General Public License for more details at:
21
+	 * http://www.gnu.org/copyleft/gpl.html
22
+	 *
23
+	 *
24
+	 * Typical Usage:
25
+	 *
26
+	 *   $browser = new Browser();
27
+	 *   if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
28
+	 *    echo 'You have FireFox version 2 or greater';
29
+	 *   }
30
+	 *
31
+	 * User Agents Sampled from: http://www.useragentstring.com/
32
+	 *
33
+	 * This implementation is based on the original work from Gary White
34
+	 * http://apptools.com/phptools/browser/
35
+	 *
36
+	 */
37
+	class Browser
38
+	{
39
+		private $_agent = '';
40
+		private $_browser_name = '';
41
+		private $_version = '';
42
+		private $_platform = '';
43
+		private $_os = '';
44
+		private $_is_aol = false;
45
+		private $_is_mobile = false;
46
+		private $_is_tablet = false;
47
+		private $_is_robot = false;
48
+		private $_is_facebook = false;
49
+		private $_aol_version = '';
50
+
51
+		const BROWSER_UNKNOWN = 'unknown';
52
+		const VERSION_UNKNOWN = 'unknown';
53
+
54
+		const BROWSER_OPERA = 'Opera'; // http://www.opera.com/
55
+		const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/
56
+		const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/
57
+		const BROWSER_EDGE = 'Edge'; // https://www.microsoft.com/edge
58
+		const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/
59
+		const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
60
+		const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/
61
+		const BROWSER_ICAB = 'iCab'; // http://www.icab.de/
62
+		const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/
63
+		const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/
64
+		const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html
65
+		const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/
66
+		const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko
67
+		const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/
68
+		const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/
69
+		const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx
70
+		const BROWSER_SAFARI = 'Safari'; // http://apple.com
71
+		const BROWSER_IPHONE = 'iPhone'; // http://apple.com
72
+		const BROWSER_IPOD = 'iPod'; // http://apple.com
73
+		const BROWSER_IPAD = 'iPad'; // http://apple.com
74
+		const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome
75
+		const BROWSER_ANDROID = 'Android'; // http://www.android.com/
76
+		const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot
77
+
78
+		const BROWSER_YANDEXBOT = 'YandexBot'; // http://yandex.com/bots
79
+		const BROWSER_YANDEXIMAGERESIZER_BOT = 'YandexImageResizer'; // http://yandex.com/bots
80
+		const BROWSER_YANDEXIMAGES_BOT = 'YandexImages'; // http://yandex.com/bots
81
+		const BROWSER_YANDEXVIDEO_BOT = 'YandexVideo'; // http://yandex.com/bots
82
+		const BROWSER_YANDEXMEDIA_BOT = 'YandexMedia'; // http://yandex.com/bots
83
+		const BROWSER_YANDEXBLOGS_BOT = 'YandexBlogs'; // http://yandex.com/bots
84
+		const BROWSER_YANDEXFAVICONS_BOT = 'YandexFavicons'; // http://yandex.com/bots
85
+		const BROWSER_YANDEXWEBMASTER_BOT = 'YandexWebmaster'; // http://yandex.com/bots
86
+		const BROWSER_YANDEXDIRECT_BOT = 'YandexDirect'; // http://yandex.com/bots
87
+		const BROWSER_YANDEXMETRIKA_BOT = 'YandexMetrika'; // http://yandex.com/bots
88
+		const BROWSER_YANDEXNEWS_BOT = 'YandexNews'; // http://yandex.com/bots
89
+		const BROWSER_YANDEXCATALOG_BOT = 'YandexCatalog'; // http://yandex.com/bots
90
+
91
+		const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp
92
+		const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/
93
+		const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/
94
+		const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat
95
+		const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60
96
+		const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
97
+		const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/
98
+		const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm
99
+		const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot
100
+		const BROWSER_VIVALDI = 'Vivalidi'; // https://vivaldi.com/
101
+		const BROWSER_YANDEX = 'Yandex'; // https://browser.yandex.ua/
102
+
103
+		const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED)
104
+		const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED)
105
+		const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
106
+		const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
107
+		const BROWSER_PLAYSTATION = "PlayStation";
108
+		const BROWSER_SAMSUNG = "SamsungBrowser";
109
+		const BROWSER_SILK = "Silk";
110
+		const BROWSER_I_FRAME = "Iframely";
111
+		const BROWSER_COCOA = "CocoaRestClient";
112
+
113
+		const PLATFORM_UNKNOWN = 'unknown';
114
+		const PLATFORM_WINDOWS = 'Windows';
115
+		const PLATFORM_WINDOWS_CE = 'Windows CE';
116
+		const PLATFORM_APPLE = 'Apple';
117
+		const PLATFORM_LINUX = 'Linux';
118
+		const PLATFORM_OS2 = 'OS/2';
119
+		const PLATFORM_BEOS = 'BeOS';
120
+		const PLATFORM_IPHONE = 'iPhone';
121
+		const PLATFORM_IPOD = 'iPod';
122
+		const PLATFORM_IPAD = 'iPad';
123
+		const PLATFORM_BLACKBERRY = 'BlackBerry';
124
+		const PLATFORM_NOKIA = 'Nokia';
125
+		const PLATFORM_FREEBSD = 'FreeBSD';
126
+		const PLATFORM_OPENBSD = 'OpenBSD';
127
+		const PLATFORM_NETBSD = 'NetBSD';
128
+		const PLATFORM_SUNOS = 'SunOS';
129
+		const PLATFORM_OPENSOLARIS = 'OpenSolaris';
130
+		const PLATFORM_ANDROID = 'Android';
131
+		const PLATFORM_PLAYSTATION = "Sony PlayStation";
132
+		const PLATFORM_ROKU = "Roku";
133
+		const PLATFORM_APPLE_TV = "Apple TV";
134
+		const PLATFORM_TERMINAL = "Terminal";
135
+		const PLATFORM_FIRE_OS = "Fire OS";
136
+		const PLATFORM_SMART_TV = "SMART-TV";
137
+		const PLATFORM_CHROME_OS = "Chrome OS";
138
+		const PLATFORM_JAVA_ANDROID = "Java/Android";
139
+		const PLATFORM_POSTMAN = "Postman";
140
+		const PLATFORM_I_FRAME = "Iframely";
141
+
142
+		const OPERATING_SYSTEM_UNKNOWN = 'unknown';
143
+
144
+		/**
145
+		 * Class constructor
146
+		 */
147
+		public function __construct($userAgent = "")
148
+		{
149
+			$this->reset();
150
+			if ($userAgent != "") {
151
+				$this->setUserAgent($userAgent);
152
+			} else {
153
+				$this->determine();
154
+			}
155
+		}
156
+
157
+		/**
158
+		 * Reset all properties
159
+		 */
160
+		public function reset()
161
+		{
162
+			$this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
163
+			$this->_browser_name = self::BROWSER_UNKNOWN;
164
+			$this->_version = self::VERSION_UNKNOWN;
165
+			$this->_platform = self::PLATFORM_UNKNOWN;
166
+			$this->_os = self::OPERATING_SYSTEM_UNKNOWN;
167
+			$this->_is_aol = false;
168
+			$this->_is_mobile = false;
169
+			$this->_is_tablet = false;
170
+			$this->_is_robot = false;
171
+			$this->_is_facebook = false;
172
+			$this->_aol_version = self::VERSION_UNKNOWN;
173
+		}
174
+
175
+		/**
176
+		 * Check to see if the specific browser is valid
177
+		 * @param string $browserName
178
+		 * @return bool True if the browser is the specified browser
179
+		 */
180
+		function isBrowser($browserName)
181
+		{
182
+			return (0 == strcasecmp($this->_browser_name, trim($browserName)));
183
+		}
184
+
185
+		/**
186
+		 * The name of the browser.  All return types are from the class contants
187
+		 * @return string Name of the browser
188
+		 */
189
+		public function getBrowser()
190
+		{
191
+			return $this->_browser_name;
192
+		}
193
+
194
+		/**
195
+		 * Set the name of the browser
196
+		 * @param $browser string The name of the Browser
197
+		 */
198
+		public function setBrowser($browser)
199
+		{
200
+			$this->_browser_name = $browser;
201
+		}
202
+
203
+		/**
204
+		 * The name of the platform.  All return types are from the class contants
205
+		 * @return string Name of the browser
206
+		 */
207
+		public function getPlatform()
208
+		{
209
+			return $this->_platform;
210
+		}
211
+
212
+		/**
213
+		 * Set the name of the platform
214
+		 * @param string $platform The name of the Platform
215
+		 */
216
+		public function setPlatform($platform)
217
+		{
218
+			$this->_platform = $platform;
219
+		}
220
+
221
+		/**
222
+		 * The version of the browser.
223
+		 * @return string Version of the browser (will only contain alpha-numeric characters and a period)
224
+		 */
225
+		public function getVersion()
226
+		{
227
+			return $this->_version;
228
+		}
229
+
230
+		/**
231
+		 * Set the version of the browser
232
+		 * @param string $version The version of the Browser
233
+		 */
234
+		public function setVersion($version)
235
+		{
236
+			$this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version);
237
+		}
238
+
239
+		/**
240
+		 * The version of AOL.
241
+		 * @return string Version of AOL (will only contain alpha-numeric characters and a period)
242
+		 */
243
+		public function getAolVersion()
244
+		{
245
+			return $this->_aol_version;
246
+		}
247
+
248
+		/**
249
+		 * Set the version of AOL
250
+		 * @param string $version The version of AOL
251
+		 */
252
+		public function setAolVersion($version)
253
+		{
254
+			$this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version);
255
+		}
256
+
257
+		/**
258
+		 * Is the browser from AOL?
259
+		 * @return boolean True if the browser is from AOL otherwise false
260
+		 */
261
+		public function isAol()
262
+		{
263
+			return $this->_is_aol;
264
+		}
265
+
266
+		/**
267
+		 * Is the browser from a mobile device?
268
+		 * @return boolean True if the browser is from a mobile device otherwise false
269
+		 */
270
+		public function isMobile()
271
+		{
272
+			return $this->_is_mobile;
273
+		}
274
+
275
+		/**
276
+		 * Is the browser from a tablet device?
277
+		 * @return boolean True if the browser is from a tablet device otherwise false
278
+		 */
279
+		public function isTablet()
280
+		{
281
+			return $this->_is_tablet;
282
+		}
283
+
284
+		/**
285
+		 * Is the browser from a robot (ex Slurp,GoogleBot)?
286
+		 * @return boolean True if the browser is from a robot otherwise false
287
+		 */
288
+		public function isRobot()
289
+		{
290
+			return $this->_is_robot;
291
+		}
292
+
293
+		/**
294
+		 * Is the browser from facebook?
295
+		 * @return boolean True if the browser is from facebook otherwise false
296
+		 */
297
+		public function isFacebook()
298
+		{
299
+			return $this->_is_facebook;
300
+		}
301
+
302
+		/**
303
+		 * Set the browser to be from AOL
304
+		 * @param $isAol
305
+		 */
306
+		public function setAol($isAol)
307
+		{
308
+			$this->_is_aol = $isAol;
309
+		}
310
+
311
+		/**
312
+		 * Set the Browser to be mobile
313
+		 * @param boolean $value is the browser a mobile browser or not
314
+		 */
315
+		protected function setMobile($value = true)
316
+		{
317
+			$this->_is_mobile = $value;
318
+		}
319
+
320
+		/**
321
+		 * Set the Browser to be tablet
322
+		 * @param boolean $value is the browser a tablet browser or not
323
+		 */
324
+		protected function setTablet($value = true)
325
+		{
326
+			$this->_is_tablet = $value;
327
+		}
328
+
329
+		/**
330
+		 * Set the Browser to be a robot
331
+		 * @param boolean $value is the browser a robot or not
332
+		 */
333
+		protected function setRobot($value = true)
334
+		{
335
+			$this->_is_robot = $value;
336
+		}
337
+
338
+		/**
339
+		 * Set the Browser to be a Facebook request
340
+		 * @param boolean $value is the browser a robot or not
341
+		 */
342
+		protected function setFacebook($value = true)
343
+		{
344
+			$this->_is_facebook = $value;
345
+		}
346
+
347
+		/**
348
+		 * Get the user agent value in use to determine the browser
349
+		 * @return string The user agent from the HTTP header
350
+		 */
351
+		public function getUserAgent()
352
+		{
353
+			return $this->_agent;
354
+		}
355
+
356
+		/**
357
+		 * Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
358
+		 * @param string $agent_string The value for the User Agent
359
+		 */
360
+		public function setUserAgent($agent_string)
361
+		{
362
+			$this->reset();
363
+			$this->_agent = $agent_string;
364
+			$this->determine();
365
+		}
366
+
367
+		/**
368
+		 * Used to determine if the browser is actually "chromeframe"
369
+		 * @since 1.7
370
+		 * @return boolean True if the browser is using chromeframe
371
+		 */
372
+		public function isChromeFrame()
373
+		{
374
+			return (strpos($this->_agent, "chromeframe") !== false);
375
+		}
376
+
377
+		/**
378
+		 * Returns a formatted string with a summary of the details of the browser.
379
+		 * @return string formatted string with a summary of the browser
380
+		 */
381
+		public function __toString()
382
+		{
383
+			return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
384
+				"<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
385
+				"<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
386
+				"<strong>Platform:</strong> {$this->getPlatform()}<br/>";
387
+		}
388
+
389
+		/**
390
+		 * Protected routine to calculate and determine what the browser is in use (including platform)
391
+		 */
392
+		protected function determine()
393
+		{
394
+			$this->checkPlatform();
395
+			$this->checkBrowsers();
396
+			$this->checkForAol();
397
+		}
398
+
399
+		/**
400
+		 * Protected routine to determine the browser type
401
+		 * @return boolean True if the browser was detected otherwise false
402
+		 */
403
+		protected function checkBrowsers()
404
+		{
405
+			return (
406
+				// well-known, well-used
407
+				// Special Notes:
408
+				// (1) Opera must be checked before FireFox due to the odd
409
+				//     user agents used in some older versions of Opera
410
+				// (2) WebTV is strapped onto Internet Explorer so we must
411
+				//     check for WebTV before IE
412
+				// (3) (deprecated) Galeon is based on Firefox and needs to be
413
+				//     tested before Firefox is tested
414
+				// (4) OmniWeb is based on Safari so OmniWeb check must occur
415
+				//     before Safari
416
+				// (5) Netscape 9+ is based on Firefox so Netscape checks
417
+				//     before FireFox are necessary
418
+				// (6) Vivalid is UA contains both Firefox and Chrome so Vivalid checks
419
+				//     before Firefox and Chrome
420
+				$this->checkBrowserWebTv() ||
421
+				$this->checkBrowserEdge() ||
422
+				$this->checkBrowserInternetExplorer() ||
423
+				$this->checkBrowserOpera() ||
424
+				$this->checkBrowserGaleon() ||
425
+				$this->checkBrowserNetscapeNavigator9Plus() ||
426
+				$this->checkBrowserVivaldi() ||
427
+				$this->checkBrowserYandex() ||
428
+				$this->checkBrowserFirefox() ||
429
+				$this->checkBrowserChrome() ||
430
+				$this->checkBrowserOmniWeb() ||
431
+
432
+				// common mobile
433
+				$this->checkBrowserAndroid() ||
434
+				$this->checkBrowseriPad() ||
435
+				$this->checkBrowseriPod() ||
436
+				$this->checkBrowseriPhone() ||
437
+				$this->checkBrowserBlackBerry() ||
438
+				$this->checkBrowserNokia() ||
439
+
440
+				// common bots
441
+				$this->checkBrowserGoogleBot() ||
442
+				$this->checkBrowserMSNBot() ||
443
+				$this->checkBrowserBingBot() ||
444
+				$this->checkBrowserSlurp() ||
445
+
446
+				// Yandex bots
447
+				$this->checkBrowserYandexBot() ||
448
+				$this->checkBrowserYandexImageResizerBot() ||
449
+				$this->checkBrowserYandexBlogsBot() ||
450
+				$this->checkBrowserYandexCatalogBot() ||
451
+				$this->checkBrowserYandexDirectBot() ||
452
+				$this->checkBrowserYandexFaviconsBot() ||
453
+				$this->checkBrowserYandexImagesBot() ||
454
+				$this->checkBrowserYandexMediaBot() ||
455
+				$this->checkBrowserYandexMetrikaBot() ||
456
+				$this->checkBrowserYandexNewsBot() ||
457
+				$this->checkBrowserYandexVideoBot() ||
458
+				$this->checkBrowserYandexWebmasterBot() ||
459
+
460
+				// check for facebook external hit when loading URL
461
+				$this->checkFacebookExternalHit() ||
462
+
463
+				// WebKit base check (post mobile and others)
464
+				$this->checkBrowserSamsung() ||
465
+				$this->checkBrowserSilk() ||
466
+				$this->checkBrowserSafari() ||
467
+
468
+				// everyone else
469
+				$this->checkBrowserNetPositive() ||
470
+				$this->checkBrowserFirebird() ||
471
+				$this->checkBrowserKonqueror() ||
472
+				$this->checkBrowserIcab() ||
473
+				$this->checkBrowserPhoenix() ||
474
+				$this->checkBrowserAmaya() ||
475
+				$this->checkBrowserLynx() ||
476
+				$this->checkBrowserShiretoko() ||
477
+				$this->checkBrowserIceCat() ||
478
+				$this->checkBrowserIceweasel() ||
479
+				$this->checkBrowserW3CValidator() ||
480
+				$this->checkBrowserPlayStation() ||
481
+				$this->checkBrowserIframely() ||
482
+				$this->checkBrowserCocoa() ||
483
+				$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
484
+
485
+
486
+			);
487
+		}
488
+
489
+		/**
490
+		 * Determine if the user is using a BlackBerry (last updated 1.7)
491
+		 * @return boolean True if the browser is the BlackBerry browser otherwise false
492
+		 */
493
+		protected function checkBrowserBlackBerry()
494
+		{
495
+			if (stripos($this->_agent, 'blackberry') !== false) {
496
+				$aresult = explode("/", stristr($this->_agent, "BlackBerry"));
497
+				if (isset($aresult[1])) {
498
+					$aversion = explode(' ', $aresult[1]);
499
+					$this->setVersion($aversion[0]);
500
+					$this->_browser_name = self::BROWSER_BLACKBERRY;
501
+					$this->setMobile(true);
502
+					return true;
503
+				}
504
+			}
505
+			return false;
506
+		}
507
+
508
+		/**
509
+		 * Determine if the user is using an AOL User Agent (last updated 1.7)
510
+		 * @return boolean True if the browser is from AOL otherwise false
511
+		 */
512
+		protected function checkForAol()
513
+		{
514
+			$this->setAol(false);
515
+			$this->setAolVersion(self::VERSION_UNKNOWN);
516
+
517
+			if (stripos($this->_agent, 'aol') !== false) {
518
+				$aversion = explode(' ', stristr($this->_agent, 'AOL'));
519
+				if (isset($aversion[1])) {
520
+					$this->setAol(true);
521
+					$this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
522
+					return true;
523
+				}
524
+			}
525
+			return false;
526
+		}
527
+
528
+		/**
529
+		 * Determine if the browser is the GoogleBot or not (last updated 1.7)
530
+		 * @return boolean True if the browser is the GoogletBot otherwise false
531
+		 */
532
+		protected function checkBrowserGoogleBot()
533
+		{
534
+			if (stripos($this->_agent, 'googlebot') !== false) {
535
+				$aresult = explode('/', stristr($this->_agent, 'googlebot'));
536
+				if (isset($aresult[1])) {
537
+					$aversion = explode(' ', $aresult[1]);
538
+					$this->setVersion(str_replace(';', '', $aversion[0]));
539
+					$this->_browser_name = self::BROWSER_GOOGLEBOT;
540
+					$this->setRobot(true);
541
+					return true;
542
+				}
543
+			}
544
+			return false;
545
+		}
546
+
547
+		/**
548
+		 * Determine if the browser is the YandexBot or not
549
+		 * @return boolean True if the browser is the YandexBot otherwise false
550
+		 */
551
+		protected function checkBrowserYandexBot()
552
+		{
553
+			if (stripos($this->_agent, 'YandexBot') !== false) {
554
+				$aresult = explode('/', stristr($this->_agent, 'YandexBot'));
555
+				if (isset($aresult[1])) {
556
+					$aversion = explode(' ', $aresult[1]);
557
+					$this->setVersion(str_replace(';', '', $aversion[0]));
558
+					$this->_browser_name = self::BROWSER_YANDEXBOT;
559
+					$this->setRobot(true);
560
+					return true;
561
+				}
562
+			}
563
+			return false;
564
+		}
565
+
566
+		/**
567
+		 * Determine if the browser is the YandexImageResizer or not
568
+		 * @return boolean True if the browser is the YandexImageResizer otherwise false
569
+		 */
570
+		protected function checkBrowserYandexImageResizerBot()
571
+		{
572
+			if (stripos($this->_agent, 'YandexImageResizer') !== false) {
573
+				$aresult = explode('/', stristr($this->_agent, 'YandexImageResizer'));
574
+				if (isset($aresult[1])) {
575
+					$aversion = explode(' ', $aresult[1]);
576
+					$this->setVersion(str_replace(';', '', $aversion[0]));
577
+					$this->_browser_name = self::BROWSER_YANDEXIMAGERESIZER_BOT;
578
+					$this->setRobot(true);
579
+					return true;
580
+				}
581
+			}
582
+			return false;
583
+		}
584
+
585
+		/**
586
+		 * Determine if the browser is the YandexCatalog or not
587
+		 * @return boolean True if the browser is the YandexCatalog otherwise false
588
+		 */
589
+		protected function checkBrowserYandexCatalogBot()
590
+		{
591
+			if (stripos($this->_agent, 'YandexCatalog') !== false) {
592
+				$aresult = explode('/', stristr($this->_agent, 'YandexCatalog'));
593
+				if (isset($aresult[1])) {
594
+					$aversion = explode(' ', $aresult[1]);
595
+					$this->setVersion(str_replace(';', '', $aversion[0]));
596
+					$this->_browser_name = self::BROWSER_YANDEXCATALOG_BOT;
597
+					$this->setRobot(true);
598
+					return true;
599
+				}
600
+			}
601
+			return false;
602
+		}
603
+
604
+		/**
605
+		 * Determine if the browser is the YandexNews or not
606
+		 * @return boolean True if the browser is the YandexNews otherwise false
607
+		 */
608
+		protected function checkBrowserYandexNewsBot()
609
+		{
610
+			if (stripos($this->_agent, 'YandexNews') !== false) {
611
+				$aresult = explode('/', stristr($this->_agent, 'YandexNews'));
612
+				if (isset($aresult[1])) {
613
+					$aversion = explode(' ', $aresult[1]);
614
+					$this->setVersion(str_replace(';', '', $aversion[0]));
615
+					$this->_browser_name = self::BROWSER_YANDEXNEWS_BOT;
616
+					$this->setRobot(true);
617
+					return true;
618
+				}
619
+			}
620
+			return false;
621
+		}
622
+
623
+		/**
624
+		 * Determine if the browser is the YandexMetrika or not
625
+		 * @return boolean True if the browser is the YandexMetrika otherwise false
626
+		 */
627
+		protected function checkBrowserYandexMetrikaBot()
628
+		{
629
+			if (stripos($this->_agent, 'YandexMetrika') !== false) {
630
+				$aresult = explode('/', stristr($this->_agent, 'YandexMetrika'));
631
+				if (isset($aresult[1])) {
632
+					$aversion = explode(' ', $aresult[1]);
633
+					$this->setVersion(str_replace(';', '', $aversion[0]));
634
+					$this->_browser_name = self::BROWSER_YANDEXMETRIKA_BOT;
635
+					$this->setRobot(true);
636
+					return true;
637
+				}
638
+			}
639
+			return false;
640
+		}
641
+
642
+		/**
643
+		 * Determine if the browser is the YandexDirect or not
644
+		 * @return boolean True if the browser is the YandexDirect otherwise false
645
+		 */
646
+		protected function checkBrowserYandexDirectBot()
647
+		{
648
+			if (stripos($this->_agent, 'YandexDirect') !== false) {
649
+				$aresult = explode('/', stristr($this->_agent, 'YandexDirect'));
650
+				if (isset($aresult[1])) {
651
+					$aversion = explode(' ', $aresult[1]);
652
+					$this->setVersion(str_replace(';', '', $aversion[0]));
653
+					$this->_browser_name = self::BROWSER_YANDEXDIRECT_BOT;
654
+					$this->setRobot(true);
655
+					return true;
656
+				}
657
+			}
658
+			return false;
659
+		}
660
+
661
+		/**
662
+		 * Determine if the browser is the YandexWebmaster or not
663
+		 * @return boolean True if the browser is the YandexWebmaster otherwise false
664
+		 */
665
+		protected function checkBrowserYandexWebmasterBot()
666
+		{
667
+			if (stripos($this->_agent, 'YandexWebmaster') !== false) {
668
+				$aresult = explode('/', stristr($this->_agent, 'YandexWebmaster'));
669
+				if (isset($aresult[1])) {
670
+					$aversion = explode(' ', $aresult[1]);
671
+					$this->setVersion(str_replace(';', '', $aversion[0]));
672
+					$this->_browser_name = self::BROWSER_YANDEXWEBMASTER_BOT;
673
+					$this->setRobot(true);
674
+					return true;
675
+				}
676
+			}
677
+			return false;
678
+		}
679
+
680
+		/**
681
+		 * Determine if the browser is the YandexFavicons or not
682
+		 * @return boolean True if the browser is the YandexFavicons otherwise false
683
+		 */
684
+		protected function checkBrowserYandexFaviconsBot()
685
+		{
686
+			if (stripos($this->_agent, 'YandexFavicons') !== false) {
687
+				$aresult = explode('/', stristr($this->_agent, 'YandexFavicons'));
688
+				if (isset($aresult[1])) {
689
+					$aversion = explode(' ', $aresult[1]);
690
+					$this->setVersion(str_replace(';', '', $aversion[0]));
691
+					$this->_browser_name = self::BROWSER_YANDEXFAVICONS_BOT;
692
+					$this->setRobot(true);
693
+					return true;
694
+				}
695
+			}
696
+			return false;
697
+		}
698
+
699
+		/**
700
+		 * Determine if the browser is the YandexBlogs or not
701
+		 * @return boolean True if the browser is the YandexBlogs otherwise false
702
+		 */
703
+		protected function checkBrowserYandexBlogsBot()
704
+		{
705
+			if (stripos($this->_agent, 'YandexBlogs') !== false) {
706
+				$aresult = explode('/', stristr($this->_agent, 'YandexBlogs'));
707
+				if (isset($aresult[1])) {
708
+					$aversion = explode(' ', $aresult[1]);
709
+					$this->setVersion(str_replace(';', '', $aversion[0]));
710
+					$this->_browser_name = self::BROWSER_YANDEXBLOGS_BOT;
711
+					$this->setRobot(true);
712
+					return true;
713
+				}
714
+			}
715
+			return false;
716
+		}
717
+
718
+		/**
719
+		 * Determine if the browser is the YandexMedia or not
720
+		 * @return boolean True if the browser is the YandexMedia otherwise false
721
+		 */
722
+		protected function checkBrowserYandexMediaBot()
723
+		{
724
+			if (stripos($this->_agent, 'YandexMedia') !== false) {
725
+				$aresult = explode('/', stristr($this->_agent, 'YandexMedia'));
726
+				if (isset($aresult[1])) {
727
+					$aversion = explode(' ', $aresult[1]);
728
+					$this->setVersion(str_replace(';', '', $aversion[0]));
729
+					$this->_browser_name = self::BROWSER_YANDEXMEDIA_BOT;
730
+					$this->setRobot(true);
731
+					return true;
732
+				}
733
+			}
734
+			return false;
735
+		}
736
+
737
+		/**
738
+		 * Determine if the browser is the YandexVideo or not
739
+		 * @return boolean True if the browser is the YandexVideo otherwise false
740
+		 */
741
+		protected function checkBrowserYandexVideoBot()
742
+		{
743
+			if (stripos($this->_agent, 'YandexVideo') !== false) {
744
+				$aresult = explode('/', stristr($this->_agent, 'YandexVideo'));
745
+				if (isset($aresult[1])) {
746
+					$aversion = explode(' ', $aresult[1]);
747
+					$this->setVersion(str_replace(';', '', $aversion[0]));
748
+					$this->_browser_name = self::BROWSER_YANDEXVIDEO_BOT;
749
+					$this->setRobot(true);
750
+					return true;
751
+				}
752
+			}
753
+			return false;
754
+		}
755
+
756
+		/**
757
+		 * Determine if the browser is the YandexImages or not
758
+		 * @return boolean True if the browser is the YandexImages otherwise false
759
+		 */
760
+		protected function checkBrowserYandexImagesBot()
761
+		{
762
+			if (stripos($this->_agent, 'YandexImages') !== false) {
763
+				$aresult = explode('/', stristr($this->_agent, 'YandexImages'));
764
+				if (isset($aresult[1])) {
765
+					$aversion = explode(' ', $aresult[1]);
766
+					$this->setVersion(str_replace(';', '', $aversion[0]));
767
+					$this->_browser_name = self::BROWSER_YANDEXIMAGES_BOT;
768
+					$this->setRobot(true);
769
+					return true;
770
+				}
771
+			}
772
+			return false;
773
+		}
774
+
775
+		/**
776
+		 * Determine if the browser is the MSNBot or not (last updated 1.9)
777
+		 * @return boolean True if the browser is the MSNBot otherwise false
778
+		 */
779
+		protected function checkBrowserMSNBot()
780
+		{
781
+			if (stripos($this->_agent, "msnbot") !== false) {
782
+				$aresult = explode("/", stristr($this->_agent, "msnbot"));
783
+				if (isset($aresult[1])) {
784
+					$aversion = explode(" ", $aresult[1]);
785
+					$this->setVersion(str_replace(";", "", $aversion[0]));
786
+					$this->_browser_name = self::BROWSER_MSNBOT;
787
+					$this->setRobot(true);
788
+					return true;
789
+				}
790
+			}
791
+			return false;
792
+		}
793
+
794
+		/**
795
+		 * Determine if the browser is the BingBot or not (last updated 1.9)
796
+		 * @return boolean True if the browser is the BingBot otherwise false
797
+		 */
798
+		protected function checkBrowserBingBot()
799
+		{
800
+			if (stripos($this->_agent, "bingbot") !== false) {
801
+				$aresult = explode("/", stristr($this->_agent, "bingbot"));
802
+				if (isset($aresult[1])) {
803
+					$aversion = explode(" ", $aresult[1]);
804
+					$this->setVersion(str_replace(";", "", $aversion[0]));
805
+					$this->_browser_name = self::BROWSER_BINGBOT;
806
+					$this->setRobot(true);
807
+					return true;
808
+				}
809
+			}
810
+			return false;
811
+		}
812
+
813
+		/**
814
+		 * Determine if the browser is the W3C Validator or not (last updated 1.7)
815
+		 * @return boolean True if the browser is the W3C Validator otherwise false
816
+		 */
817
+		protected function checkBrowserW3CValidator()
818
+		{
819
+			if (stripos($this->_agent, 'W3C-checklink') !== false) {
820
+				$aresult = explode('/', stristr($this->_agent, 'W3C-checklink'));
821
+				if (isset($aresult[1])) {
822
+					$aversion = explode(' ', $aresult[1]);
823
+					$this->setVersion($aversion[0]);
824
+					$this->_browser_name = self::BROWSER_W3CVALIDATOR;
825
+					return true;
826
+				}
827
+			} else if (stripos($this->_agent, 'W3C_Validator') !== false) {
828
+				// Some of the Validator versions do not delineate w/ a slash - add it back in
829
+				$ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
830
+				$aresult = explode('/', stristr($ua, 'W3C_Validator'));
831
+				if (isset($aresult[1])) {
832
+					$aversion = explode(' ', $aresult[1]);
833
+					$this->setVersion($aversion[0]);
834
+					$this->_browser_name = self::BROWSER_W3CVALIDATOR;
835
+					return true;
836
+				}
837
+			} else if (stripos($this->_agent, 'W3C-mobileOK') !== false) {
838
+				$this->_browser_name = self::BROWSER_W3CVALIDATOR;
839
+				$this->setMobile(true);
840
+				return true;
841
+			}
842
+			return false;
843
+		}
844
+
845
+		/**
846
+		 * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
847
+		 * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
848
+		 */
849
+		protected function checkBrowserSlurp()
850
+		{
851
+			if (stripos($this->_agent, 'slurp') !== false) {
852
+				$aresult = explode('/', stristr($this->_agent, 'Slurp'));
853
+				if (isset($aresult[1])) {
854
+					$aversion = explode(' ', $aresult[1]);
855
+					$this->setVersion($aversion[0]);
856
+					$this->_browser_name = self::BROWSER_SLURP;
857
+					$this->setRobot(true);
858
+					$this->setMobile(false);
859
+					return true;
860
+				}
861
+			}
862
+			return false;
863
+		}
864
+
865
+		/**
866
+		 * Determine if the browser is Edge or not
867
+		 * @return boolean True if the browser is Edge otherwise false
868
+		 */
869
+		protected function checkBrowserEdge()
870
+		{
871
+			if (stripos($this->_agent, 'Edge/') !== false) {
872
+				$aresult = explode('/', stristr($this->_agent, 'Edge'));
873
+				if (isset($aresult[1])) {
874
+					$aversion = explode(' ', $aresult[1]);
875
+					$this->setVersion($aversion[0]);
876
+					$this->setBrowser(self::BROWSER_EDGE);
877
+					if (stripos($this->_agent, 'Windows Phone') !== false || stripos($this->_agent, 'Android') !== false) {
878
+						$this->setMobile(true);
879
+					}
880
+					return true;
881
+				}
882
+			}
883
+			return false;
884
+		}
885
+
886
+		/**
887
+		 * Determine if the browser is Internet Explorer or not (last updated 1.7)
888
+		 * @return boolean True if the browser is Internet Explorer otherwise false
889
+		 */
890
+		protected function checkBrowserInternetExplorer()
891
+		{
892
+			//  Test for IE11
893
+			if (stripos($this->_agent, 'Trident/7.0; rv:11.0') !== false) {
894
+				$this->setBrowser(self::BROWSER_IE);
895
+				$this->setVersion('11.0');
896
+				return true;
897
+			} // Test for v1 - v1.5 IE
898
+			else if (stripos($this->_agent, 'microsoft internet explorer') !== false) {
899
+				$this->setBrowser(self::BROWSER_IE);
900
+				$this->setVersion('1.0');
901
+				$aresult = stristr($this->_agent, '/');
902
+				if (preg_match('/308|425|426|474|0b1/i', $aresult)) {
903
+					$this->setVersion('1.5');
904
+				}
905
+				return true;
906
+			} // Test for versions > 1.5
907
+			else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) {
908
+				// See if the browser is the odd MSN Explorer
909
+				if (stripos($this->_agent, 'msnb') !== false) {
910
+					$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN'));
911
+					if (isset($aresult[1])) {
912
+						$this->setBrowser(self::BROWSER_MSN);
913
+						$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
914
+						return true;
915
+					}
916
+				}
917
+				$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie'));
918
+				if (isset($aresult[1])) {
919
+					$this->setBrowser(self::BROWSER_IE);
920
+					$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
921
+					if(preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)){
922
+						if($aresult[1] == '3.1'){
923
+							$this->setVersion('7.0');
924
+						}
925
+						else if($aresult[1] == '4.0'){
926
+							$this->setVersion('8.0');
927
+						}
928
+						else if($aresult[1] == '5.0'){
929
+							$this->setVersion('9.0');
930
+						}
931
+						else if($aresult[1] == '6.0'){
932
+							$this->setVersion('10.0');
933
+						}
934
+						else if($aresult[1] == '7.0'){
935
+							$this->setVersion('11.0');
936
+						}
937
+						else if($aresult[1] == '8.0'){
938
+							$this->setVersion('11.0');
939
+						}
940
+					}
941
+					if(stripos($this->_agent, 'IEMobile') !== false) {
942
+						$this->setBrowser(self::BROWSER_POCKET_IE);
943
+						$this->setMobile(true);
944
+					}
945
+					return true;
946
+				}
947
+			} // Test for versions > IE 10
948
+			else if (stripos($this->_agent, 'trident') !== false) {
949
+				$this->setBrowser(self::BROWSER_IE);
950
+				$result = explode('rv:', $this->_agent);
951
+				if (isset($result[1])) {
952
+					$this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1]));
953
+					$this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent);
954
+				}
955
+			} // Test for Pocket IE
956
+			else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) {
957
+				$aresult = explode(' ', stristr($this->_agent, 'mspie'));
958
+				if (isset($aresult[1])) {
959
+					$this->setPlatform(self::PLATFORM_WINDOWS_CE);
960
+					$this->setBrowser(self::BROWSER_POCKET_IE);
961
+					$this->setMobile(true);
962
+
963
+					if (stripos($this->_agent, 'mspie') !== false) {
964
+						$this->setVersion($aresult[1]);
965
+					} else {
966
+						$aversion = explode('/', $this->_agent);
967
+						if (isset($aversion[1])) {
968
+							$this->setVersion($aversion[1]);
969
+						}
970
+					}
971
+					return true;
972
+				}
973
+			}
974
+			return false;
975
+		}
976
+
977
+		/**
978
+		 * Determine if the browser is Opera or not (last updated 1.7)
979
+		 * @return boolean True if the browser is Opera otherwise false
980
+		 */
981
+		protected function checkBrowserOpera()
982
+		{
983
+			if (stripos($this->_agent, 'opera mini') !== false) {
984
+				$resultant = stristr($this->_agent, 'opera mini');
985
+				if (preg_match('/\//', $resultant)) {
986
+					$aresult = explode('/', $resultant);
987
+					if (isset($aresult[1])) {
988
+						$aversion = explode(' ', $aresult[1]);
989
+						$this->setVersion($aversion[0]);
990
+					}
991
+				} else {
992
+					$aversion = explode(' ', stristr($resultant, 'opera mini'));
993
+					if (isset($aversion[1])) {
994
+						$this->setVersion($aversion[1]);
995
+					}
996
+				}
997
+				$this->_browser_name = self::BROWSER_OPERA_MINI;
998
+				$this->setMobile(true);
999
+				return true;
1000
+			} else if (stripos($this->_agent, 'opera') !== false) {
1001
+				$resultant = stristr($this->_agent, 'opera');
1002
+				if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) {
1003
+					$this->setVersion($matches[1]);
1004
+				} else if (preg_match('/\//', $resultant)) {
1005
+					$aresult = explode('/', str_replace("(", " ", $resultant));
1006
+					if (isset($aresult[1])) {
1007
+						$aversion = explode(' ', $aresult[1]);
1008
+						$this->setVersion($aversion[0]);
1009
+					}
1010
+				} else {
1011
+					$aversion = explode(' ', stristr($resultant, 'opera'));
1012
+					$this->setVersion(isset($aversion[1]) ? $aversion[1] : "");
1013
+				}
1014
+				if (stripos($this->_agent, 'Opera Mobi') !== false) {
1015
+					$this->setMobile(true);
1016
+				}
1017
+				$this->_browser_name = self::BROWSER_OPERA;
1018
+				return true;
1019
+			} else if (stripos($this->_agent, 'OPR') !== false) {
1020
+				$resultant = stristr($this->_agent, 'OPR');
1021
+				if (preg_match('/\//', $resultant)) {
1022
+					$aresult = explode('/', str_replace("(", " ", $resultant));
1023
+					if (isset($aresult[1])) {
1024
+						$aversion = explode(' ', $aresult[1]);
1025
+						$this->setVersion($aversion[0]);
1026
+					}
1027
+				}
1028
+				if (stripos($this->_agent, 'Mobile') !== false) {
1029
+					$this->setMobile(true);
1030
+				}
1031
+				$this->_browser_name = self::BROWSER_OPERA;
1032
+				return true;
1033
+			}
1034
+			return false;
1035
+		}
1036
+
1037
+		/**
1038
+		 * Determine if the browser is Chrome or not (last updated 1.7)
1039
+		 * @return boolean True if the browser is Chrome otherwise false
1040
+		 */
1041
+		protected function checkBrowserChrome()
1042
+		{
1043
+			if (stripos($this->_agent, 'Chrome') !== false) {
1044
+				$aresult = explode('/', stristr($this->_agent, 'Chrome'));
1045
+				if (isset($aresult[1])) {
1046
+					$aversion = explode(' ', $aresult[1]);
1047
+					$this->setVersion($aversion[0]);
1048
+					$this->setBrowser(self::BROWSER_CHROME);
1049
+					//Chrome on Android
1050
+					if (stripos($this->_agent, 'Android') !== false) {
1051
+						if (stripos($this->_agent, 'Mobile') !== false) {
1052
+							$this->setMobile(true);
1053
+						} else {
1054
+							$this->setTablet(true);
1055
+						}
1056
+					}
1057
+					return true;
1058
+				}
1059
+			}
1060
+			return false;
1061
+		}
1062
+
1063
+
1064
+		/**
1065
+		 * Determine if the browser is WebTv or not (last updated 1.7)
1066
+		 * @return boolean True if the browser is WebTv otherwise false
1067
+		 */
1068
+		protected function checkBrowserWebTv()
1069
+		{
1070
+			if (stripos($this->_agent, 'webtv') !== false) {
1071
+				$aresult = explode('/', stristr($this->_agent, 'webtv'));
1072
+				if (isset($aresult[1])) {
1073
+					$aversion = explode(' ', $aresult[1]);
1074
+					$this->setVersion($aversion[0]);
1075
+					$this->setBrowser(self::BROWSER_WEBTV);
1076
+					return true;
1077
+				}
1078
+			}
1079
+			return false;
1080
+		}
1081
+
1082
+		/**
1083
+		 * Determine if the browser is NetPositive or not (last updated 1.7)
1084
+		 * @return boolean True if the browser is NetPositive otherwise false
1085
+		 */
1086
+		protected function checkBrowserNetPositive()
1087
+		{
1088
+			if (stripos($this->_agent, 'NetPositive') !== false) {
1089
+				$aresult = explode('/', stristr($this->_agent, 'NetPositive'));
1090
+				if (isset($aresult[1])) {
1091
+					$aversion = explode(' ', $aresult[1]);
1092
+					$this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0]));
1093
+					$this->setBrowser(self::BROWSER_NETPOSITIVE);
1094
+					return true;
1095
+				}
1096
+			}
1097
+			return false;
1098
+		}
1099
+
1100
+		/**
1101
+		 * Determine if the browser is Galeon or not (last updated 1.7)
1102
+		 * @return boolean True if the browser is Galeon otherwise false
1103
+		 */
1104
+		protected function checkBrowserGaleon()
1105
+		{
1106
+			if (stripos($this->_agent, 'galeon') !== false) {
1107
+				$aresult = explode(' ', stristr($this->_agent, 'galeon'));
1108
+				$aversion = explode('/', $aresult[0]);
1109
+				if (isset($aversion[1])) {
1110
+					$this->setVersion($aversion[1]);
1111
+					$this->setBrowser(self::BROWSER_GALEON);
1112
+					return true;
1113
+				}
1114
+			}
1115
+			return false;
1116
+		}
1117
+
1118
+		/**
1119
+		 * Determine if the browser is Konqueror or not (last updated 1.7)
1120
+		 * @return boolean True if the browser is Konqueror otherwise false
1121
+		 */
1122
+		protected function checkBrowserKonqueror()
1123
+		{
1124
+			if (stripos($this->_agent, 'Konqueror') !== false) {
1125
+				$aresult = explode(' ', stristr($this->_agent, 'Konqueror'));
1126
+				$aversion = explode('/', $aresult[0]);
1127
+				if (isset($aversion[1])) {
1128
+					$this->setVersion($aversion[1]);
1129
+					$this->setBrowser(self::BROWSER_KONQUEROR);
1130
+					return true;
1131
+				}
1132
+			}
1133
+			return false;
1134
+		}
1135
+
1136
+		/**
1137
+		 * Determine if the browser is iCab or not (last updated 1.7)
1138
+		 * @return boolean True if the browser is iCab otherwise false
1139
+		 */
1140
+		protected function checkBrowserIcab()
1141
+		{
1142
+			if (stripos($this->_agent, 'icab') !== false) {
1143
+				$aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab'));
1144
+				if (isset($aversion[1])) {
1145
+					$this->setVersion($aversion[1]);
1146
+					$this->setBrowser(self::BROWSER_ICAB);
1147
+					return true;
1148
+				}
1149
+			}
1150
+			return false;
1151
+		}
1152
+
1153
+		/**
1154
+		 * Determine if the browser is OmniWeb or not (last updated 1.7)
1155
+		 * @return boolean True if the browser is OmniWeb otherwise false
1156
+		 */
1157
+		protected function checkBrowserOmniWeb()
1158
+		{
1159
+			if (stripos($this->_agent, 'omniweb') !== false) {
1160
+				$aresult = explode('/', stristr($this->_agent, 'omniweb'));
1161
+				$aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : "");
1162
+				$this->setVersion($aversion[0]);
1163
+				$this->setBrowser(self::BROWSER_OMNIWEB);
1164
+				return true;
1165
+			}
1166
+			return false;
1167
+		}
1168
+
1169
+		/**
1170
+		 * Determine if the browser is Phoenix or not (last updated 1.7)
1171
+		 * @return boolean True if the browser is Phoenix otherwise false
1172
+		 */
1173
+		protected function checkBrowserPhoenix()
1174
+		{
1175
+			if (stripos($this->_agent, 'Phoenix') !== false) {
1176
+				$aversion = explode('/', stristr($this->_agent, 'Phoenix'));
1177
+				if (isset($aversion[1])) {
1178
+					$this->setVersion($aversion[1]);
1179
+					$this->setBrowser(self::BROWSER_PHOENIX);
1180
+					return true;
1181
+				}
1182
+			}
1183
+			return false;
1184
+		}
1185
+
1186
+		/**
1187
+		 * Determine if the browser is Firebird or not (last updated 1.7)
1188
+		 * @return boolean True if the browser is Firebird otherwise false
1189
+		 */
1190
+		protected function checkBrowserFirebird()
1191
+		{
1192
+			if (stripos($this->_agent, 'Firebird') !== false) {
1193
+				$aversion = explode('/', stristr($this->_agent, 'Firebird'));
1194
+				if (isset($aversion[1])) {
1195
+					$this->setVersion($aversion[1]);
1196
+					$this->setBrowser(self::BROWSER_FIREBIRD);
1197
+					return true;
1198
+				}
1199
+			}
1200
+			return false;
1201
+		}
1202
+
1203
+		/**
1204
+		 * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
1205
+		 * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
1206
+		 * @return boolean True if the browser is Netscape Navigator 9+ otherwise false
1207
+		 */
1208
+		protected function checkBrowserNetscapeNavigator9Plus()
1209
+		{
1210
+			if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) {
1211
+				$this->setVersion($matches[1]);
1212
+				$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
1213
+				return true;
1214
+			} else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) {
1215
+				$this->setVersion($matches[1]);
1216
+				$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
1217
+				return true;
1218
+			}
1219
+			return false;
1220
+		}
1221
+
1222
+		/**
1223
+		 * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
1224
+		 * @return boolean True if the browser is Shiretoko otherwise false
1225
+		 */
1226
+		protected function checkBrowserShiretoko()
1227
+		{
1228
+			if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) {
1229
+				$this->setVersion($matches[1]);
1230
+				$this->setBrowser(self::BROWSER_SHIRETOKO);
1231
+				return true;
1232
+			}
1233
+			return false;
1234
+		}
1235
+
1236
+		/**
1237
+		 * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
1238
+		 * @return boolean True if the browser is Ice Cat otherwise false
1239
+		 */
1240
+		protected function checkBrowserIceCat()
1241
+		{
1242
+			if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) {
1243
+				$this->setVersion($matches[1]);
1244
+				$this->setBrowser(self::BROWSER_ICECAT);
1245
+				return true;
1246
+			}
1247
+			return false;
1248
+		}
1249
+
1250
+		/**
1251
+		 * Determine if the browser is Nokia or not (last updated 1.7)
1252
+		 * @return boolean True if the browser is Nokia otherwise false
1253
+		 */
1254
+		protected function checkBrowserNokia()
1255
+		{
1256
+			if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) {
1257
+				$this->setVersion($matches[2]);
1258
+				if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) {
1259
+					$this->setBrowser(self::BROWSER_NOKIA_S60);
1260
+				} else {
1261
+					$this->setBrowser(self::BROWSER_NOKIA);
1262
+				}
1263
+				$this->setMobile(true);
1264
+				return true;
1265
+			}
1266
+			return false;
1267
+		}
1268
+
1269
+		/**
1270
+		 * Determine if the browser is Firefox or not (last updated 1.7)
1271
+		 * @return boolean True if the browser is Firefox otherwise false
1272
+		 */
1273
+		protected function checkBrowserFirefox()
1274
+		{
1275
+			if (stripos($this->_agent, 'safari') === false) {
1276
+				if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) {
1277
+					$this->setVersion($matches[1]);
1278
+					$this->setBrowser(self::BROWSER_FIREFOX);
1279
+					//Firefox on Android
1280
+					if (stripos($this->_agent, 'Android') !== false) {
1281
+						if (stripos($this->_agent, 'Mobile') !== false) {
1282
+							$this->setMobile(true);
1283
+						} else {
1284
+							$this->setTablet(true);
1285
+						}
1286
+					}
1287
+					return true;
1288
+				} else if (preg_match("/Firefox$/i", $this->_agent, $matches)) {
1289
+					$this->setVersion("");
1290
+					$this->setBrowser(self::BROWSER_FIREFOX);
1291
+					return true;
1292
+				}
1293
+			}
1294
+			return false;
1295
+		}
1296
+
1297
+		/**
1298
+		 * Determine if the browser is Firefox or not (last updated 1.7)
1299
+		 * @return boolean True if the browser is Firefox otherwise false
1300
+		 */
1301
+		protected function checkBrowserIceweasel()
1302
+		{
1303
+			if (stripos($this->_agent, 'Iceweasel') !== false) {
1304
+				$aresult = explode('/', stristr($this->_agent, 'Iceweasel'));
1305
+				if (isset($aresult[1])) {
1306
+					$aversion = explode(' ', $aresult[1]);
1307
+					$this->setVersion($aversion[0]);
1308
+					$this->setBrowser(self::BROWSER_ICEWEASEL);
1309
+					return true;
1310
+				}
1311
+			}
1312
+			return false;
1313
+		}
1314
+
1315
+		/**
1316
+		 * Determine if the browser is Mozilla or not (last updated 1.7)
1317
+		 * @return boolean True if the browser is Mozilla otherwise false
1318
+		 */
1319
+		protected function checkBrowserMozilla()
1320
+		{
1321
+			if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
1322
+				$aversion = explode(' ', stristr($this->_agent, 'rv:'));
1323
+				preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion);
1324
+				$this->setVersion(str_replace('rv:', '', $aversion[0]));
1325
+				$this->setBrowser(self::BROWSER_MOZILLA);
1326
+				return true;
1327
+			} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
1328
+				$aversion = explode('', stristr($this->_agent, 'rv:'));
1329
+				$this->setVersion(str_replace('rv:', '', $aversion[0]));
1330
+				$this->setBrowser(self::BROWSER_MOZILLA);
1331
+				return true;
1332
+			} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) {
1333
+				$this->setVersion($matches[1]);
1334
+				$this->setBrowser(self::BROWSER_MOZILLA);
1335
+				return true;
1336
+			}
1337
+			return false;
1338
+		}
1339
+
1340
+		/**
1341
+		 * Determine if the browser is Lynx or not (last updated 1.7)
1342
+		 * @return boolean True if the browser is Lynx otherwise false
1343
+		 */
1344
+		protected function checkBrowserLynx()
1345
+		{
1346
+			if (stripos($this->_agent, 'lynx') !== false) {
1347
+				$aresult = explode('/', stristr($this->_agent, 'Lynx'));
1348
+				$aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : ""));
1349
+				$this->setVersion($aversion[0]);
1350
+				$this->setBrowser(self::BROWSER_LYNX);
1351
+				return true;
1352
+			}
1353
+			return false;
1354
+		}
1355
+
1356
+		/**
1357
+		 * Determine if the browser is Amaya or not (last updated 1.7)
1358
+		 * @return boolean True if the browser is Amaya otherwise false
1359
+		 */
1360
+		protected function checkBrowserAmaya()
1361
+		{
1362
+			if (stripos($this->_agent, 'amaya') !== false) {
1363
+				$aresult = explode('/', stristr($this->_agent, 'Amaya'));
1364
+				if (isset($aresult[1])) {
1365
+					$aversion = explode(' ', $aresult[1]);
1366
+					$this->setVersion($aversion[0]);
1367
+					$this->setBrowser(self::BROWSER_AMAYA);
1368
+					return true;
1369
+				}
1370
+			}
1371
+			return false;
1372
+		}
1373
+
1374
+		/**
1375
+		 * Determine if the browser is Safari or not (last updated 1.7)
1376
+		 * @return boolean True if the browser is Safari otherwise false
1377
+		 */
1378
+		protected function checkBrowserSafari()
1379
+		{
1380
+			if (stripos($this->_agent, 'Safari') !== false
1381
+				&& stripos($this->_agent, 'iPhone') === false
1382
+				&& stripos($this->_agent, 'iPod') === false
1383
+			) {
1384
+
1385
+				$aresult = explode('/', stristr($this->_agent, 'Version'));
1386
+				if (isset($aresult[1])) {
1387
+					$aversion = explode(' ', $aresult[1]);
1388
+					$this->setVersion($aversion[0]);
1389
+				} else {
1390
+					$this->setVersion(self::VERSION_UNKNOWN);
1391
+				}
1392
+				$this->setBrowser(self::BROWSER_SAFARI);
1393
+				return true;
1394
+			}
1395
+			return false;
1396
+		}
1397
+
1398
+		protected function checkBrowserSamsung()
1399
+		{
1400
+			if (stripos($this->_agent, 'SamsungBrowser') !== false) {
1401
+
1402
+				$aresult = explode('/', stristr($this->_agent, 'SamsungBrowser'));
1403
+				if (isset($aresult[1])) {
1404
+					$aversion = explode(' ', $aresult[1]);
1405
+					$this->setVersion($aversion[0]);
1406
+				} else {
1407
+					$this->setVersion(self::VERSION_UNKNOWN);
1408
+				}
1409
+				$this->setBrowser(self::BROWSER_SAMSUNG);
1410
+				return true;
1411
+			}
1412
+			return false;
1413
+		}
1414
+
1415
+		protected function checkBrowserSilk()
1416
+		{
1417
+			if (stripos($this->_agent, 'Silk') !== false) {
1418
+				$aresult = explode('/', stristr($this->_agent, 'Silk'));
1419
+				if (isset($aresult[1])) {
1420
+					$aversion = explode(' ', $aresult[1]);
1421
+					$this->setVersion($aversion[0]);
1422
+				} else {
1423
+					$this->setVersion(self::VERSION_UNKNOWN);
1424
+				}
1425
+				$this->setBrowser(self::BROWSER_SILK);
1426
+				return true;
1427
+			}
1428
+			return false;
1429
+		}
1430
+
1431
+		protected function checkBrowserIframely()
1432
+		{
1433
+			if (stripos($this->_agent, 'Iframely') !== false) {
1434
+				$aresult = explode('/', stristr($this->_agent, 'Iframely'));
1435
+				if (isset($aresult[1])) {
1436
+					$aversion = explode(' ', $aresult[1]);
1437
+					$this->setVersion($aversion[0]);
1438
+				} else {
1439
+					$this->setVersion(self::VERSION_UNKNOWN);
1440
+				}
1441
+				$this->setBrowser(self::BROWSER_I_FRAME);
1442
+				return true;
1443
+			}
1444
+			return false;
1445
+		}
1446
+
1447
+		protected function checkBrowserCocoa()
1448
+		{
1449
+			if (stripos($this->_agent, 'CocoaRestClient') !== false) {
1450
+				$aresult = explode('/', stristr($this->_agent, 'CocoaRestClient'));
1451
+				if (isset($aresult[1])) {
1452
+					$aversion = explode(' ', $aresult[1]);
1453
+					$this->setVersion($aversion[0]);
1454
+				} else {
1455
+					$this->setVersion(self::VERSION_UNKNOWN);
1456
+				}
1457
+				$this->setBrowser(self::BROWSER_COCOA);
1458
+				return true;
1459
+			}
1460
+			return false;
1461
+		}
1462
+
1463
+		/**
1464
+		 * Detect if URL is loaded from FacebookExternalHit
1465
+		 * @return boolean True if it detects FacebookExternalHit otherwise false
1466
+		 */
1467
+		protected function checkFacebookExternalHit()
1468
+		{
1469
+			if (stristr($this->_agent, 'FacebookExternalHit')) {
1470
+				$this->setRobot(true);
1471
+				$this->setFacebook(true);
1472
+				return true;
1473
+			}
1474
+			return false;
1475
+		}
1476
+
1477
+		/**
1478
+		 * Detect if URL is being loaded from internal Facebook browser
1479
+		 * @return boolean True if it detects internal Facebook browser otherwise false
1480
+		 */
1481
+		protected function checkForFacebookIos()
1482
+		{
1483
+			if (stristr($this->_agent, 'FBIOS')) {
1484
+				$this->setFacebook(true);
1485
+				return true;
1486
+			}
1487
+			return false;
1488
+		}
1489
+
1490
+		/**
1491
+		 * Detect Version for the Safari browser on iOS devices
1492
+		 * @return boolean True if it detects the version correctly otherwise false
1493
+		 */
1494
+		protected function getSafariVersionOnIos()
1495
+		{
1496
+			$aresult = explode('/', stristr($this->_agent, 'Version'));
1497
+			if (isset($aresult[1])) {
1498
+				$aversion = explode(' ', $aresult[1]);
1499
+				$this->setVersion($aversion[0]);
1500
+				return true;
1501
+			}
1502
+			return false;
1503
+		}
1504
+
1505
+		/**
1506
+		 * Detect Version for the Chrome browser on iOS devices
1507
+		 * @return boolean True if it detects the version correctly otherwise false
1508
+		 */
1509
+		protected function getChromeVersionOnIos()
1510
+		{
1511
+			$aresult = explode('/', stristr($this->_agent, 'CriOS'));
1512
+			if (isset($aresult[1])) {
1513
+				$aversion = explode(' ', $aresult[1]);
1514
+				$this->setVersion($aversion[0]);
1515
+				$this->setBrowser(self::BROWSER_CHROME);
1516
+				return true;
1517
+			}
1518
+			return false;
1519
+		}
1520
+
1521
+		/**
1522
+		 * Determine if the browser is iPhone or not (last updated 1.7)
1523
+		 * @return boolean True if the browser is iPhone otherwise false
1524
+		 */
1525
+		protected function checkBrowseriPhone()
1526
+		{
1527
+			if (stripos($this->_agent, 'iPhone') !== false) {
1528
+				$this->setVersion(self::VERSION_UNKNOWN);
1529
+				$this->setBrowser(self::BROWSER_IPHONE);
1530
+				$this->getSafariVersionOnIos();
1531
+				$this->getChromeVersionOnIos();
1532
+				$this->checkForFacebookIos();
1533
+				$this->setMobile(true);
1534
+				return true;
1535
+
1536
+			}
1537
+			return false;
1538
+		}
1539
+
1540
+		/**
1541
+		 * Determine if the browser is iPad or not (last updated 1.7)
1542
+		 * @return boolean True if the browser is iPad otherwise false
1543
+		 */
1544
+		protected function checkBrowseriPad()
1545
+		{
1546
+			if (stripos($this->_agent, 'iPad') !== false) {
1547
+				$this->setVersion(self::VERSION_UNKNOWN);
1548
+				$this->setBrowser(self::BROWSER_IPAD);
1549
+				$this->getSafariVersionOnIos();
1550
+				$this->getChromeVersionOnIos();
1551
+				$this->checkForFacebookIos();
1552
+				$this->setTablet(true);
1553
+				return true;
1554
+			}
1555
+			return false;
1556
+		}
1557
+
1558
+		/**
1559
+		 * Determine if the browser is iPod or not (last updated 1.7)
1560
+		 * @return boolean True if the browser is iPod otherwise false
1561
+		 */
1562
+		protected function checkBrowseriPod()
1563
+		{
1564
+			if (stripos($this->_agent, 'iPod') !== false) {
1565
+				$this->setVersion(self::VERSION_UNKNOWN);
1566
+				$this->setBrowser(self::BROWSER_IPOD);
1567
+				$this->getSafariVersionOnIos();
1568
+				$this->getChromeVersionOnIos();
1569
+				$this->checkForFacebookIos();
1570
+				$this->setMobile(true);
1571
+				return true;
1572
+			}
1573
+			return false;
1574
+		}
1575
+
1576
+		/**
1577
+		 * Determine if the browser is Android or not (last updated 1.7)
1578
+		 * @return boolean True if the browser is Android otherwise false
1579
+		 */
1580
+		protected function checkBrowserAndroid()
1581
+		{
1582
+			if (stripos($this->_agent, 'Android') !== false) {
1583
+				$aresult = explode(' ', stristr($this->_agent, 'Android'));
1584
+				if (isset($aresult[1])) {
1585
+					$aversion = explode(' ', $aresult[1]);
1586
+					$this->setVersion($aversion[0]);
1587
+				} else {
1588
+					$this->setVersion(self::VERSION_UNKNOWN);
1589
+				}
1590
+				if (stripos($this->_agent, 'Mobile') !== false) {
1591
+					$this->setMobile(true);
1592
+				} else {
1593
+					$this->setTablet(true);
1594
+				}
1595
+				$this->setBrowser(self::BROWSER_ANDROID);
1596
+				return true;
1597
+			}
1598
+			return false;
1599
+		}
1600
+
1601
+		/**
1602
+		 * Determine if the browser is Vivaldi
1603
+		 * @return boolean True if the browser is Vivaldi otherwise false
1604
+		 */
1605
+		protected function checkBrowserVivaldi()
1606
+		{
1607
+			if (stripos($this->_agent, 'Vivaldi') !== false) {
1608
+				$aresult = explode('/', stristr($this->_agent, 'Vivaldi'));
1609
+				if (isset($aresult[1])) {
1610
+					$aversion = explode(' ', $aresult[1]);
1611
+					$this->setVersion($aversion[0]);
1612
+					$this->setBrowser(self::BROWSER_VIVALDI);
1613
+					return true;
1614
+				}
1615
+			}
1616
+			return false;
1617
+		}
1618
+
1619
+		/**
1620
+		 * Determine if the browser is Yandex
1621
+		 * @return boolean True if the browser is Yandex otherwise false
1622
+		 */
1623
+		protected function checkBrowserYandex()
1624
+		{
1625
+			if (stripos($this->_agent, 'YaBrowser') !== false) {
1626
+				$aresult = explode('/', stristr($this->_agent, 'YaBrowser'));
1627
+				if (isset($aresult[1])) {
1628
+					$aversion = explode(' ', $aresult[1]);
1629
+					$this->setVersion($aversion[0]);
1630
+					$this->setBrowser(self::BROWSER_YANDEX);
1631
+
1632
+					if (stripos($this->_agent, 'iPad') !== false) {
1633
+						$this->setTablet(true);
1634
+					} elseif (stripos($this->_agent, 'Mobile') !== false) {
1635
+						$this->setMobile(true);
1636
+					} elseif (stripos($this->_agent, 'Android') !== false) {
1637
+						$this->setTablet(true);
1638
+					}
1639
+
1640
+					return true;
1641
+				}
1642
+			}
1643
+
1644
+			return false;
1645
+		}
1646
+
1647
+		/**
1648
+		 * Determine if the browser is a PlayStation
1649
+		 * @return boolean True if the browser is PlayStation otherwise false
1650
+		 */
1651
+		protected function checkBrowserPlayStation()
1652
+		{
1653
+			if (stripos($this->_agent, 'PlayStation ') !== false) {
1654
+				$aresult = explode(' ', stristr($this->_agent, 'PlayStation '));
1655
+				$this->setBrowser(self::BROWSER_PLAYSTATION);
1656
+				if (isset($aresult[0])) {
1657
+					$aversion = explode(')', $aresult[2]);
1658
+					$this->setVersion($aversion[0]);
1659
+					if (stripos($this->_agent, 'Portable)') !== false || stripos($this->_agent, 'Vita') !== false) {
1660
+						$this->setMobile(true);
1661
+					}
1662
+					return true;
1663
+				}
1664
+			}
1665
+			return false;
1666
+		}
1667
+
1668
+		/**
1669
+		 * Determine the user's platform (last updated 2.0)
1670
+		 */
1671
+		protected function checkPlatform()
1672
+		{
1673
+			if (stripos($this->_agent, 'windows') !== false) {
1674
+				$this->_platform = self::PLATFORM_WINDOWS;
1675
+			} else if (stripos($this->_agent, 'iPad') !== false) {
1676
+				$this->_platform = self::PLATFORM_IPAD;
1677
+			} else if (stripos($this->_agent, 'iPod') !== false) {
1678
+				$this->_platform = self::PLATFORM_IPOD;
1679
+			} else if (stripos($this->_agent, 'iPhone') !== false) {
1680
+				$this->_platform = self::PLATFORM_IPHONE;
1681
+			} elseif (stripos($this->_agent, 'mac') !== false) {
1682
+				$this->_platform = self::PLATFORM_APPLE;
1683
+			} elseif (stripos($this->_agent, 'android') !== false) {
1684
+				$this->_platform = self::PLATFORM_ANDROID;
1685
+			} elseif (stripos($this->_agent, 'Silk') !== false) {
1686
+				$this->_platform = self::PLATFORM_FIRE_OS;
1687
+			} elseif (stripos($this->_agent, 'linux') !== false && stripos($this->_agent, 'SMART-TV') !== false ) {
1688
+				$this->_platform = self::PLATFORM_LINUX .'/'.self::PLATFORM_SMART_TV;
1689
+			} elseif (stripos($this->_agent, 'linux') !== false) {
1690
+				$this->_platform = self::PLATFORM_LINUX;
1691
+			} else if (stripos($this->_agent, 'Nokia') !== false) {
1692
+				$this->_platform = self::PLATFORM_NOKIA;
1693
+			} else if (stripos($this->_agent, 'BlackBerry') !== false) {
1694
+				$this->_platform = self::PLATFORM_BLACKBERRY;
1695
+			} elseif (stripos($this->_agent, 'FreeBSD') !== false) {
1696
+				$this->_platform = self::PLATFORM_FREEBSD;
1697
+			} elseif (stripos($this->_agent, 'OpenBSD') !== false) {
1698
+				$this->_platform = self::PLATFORM_OPENBSD;
1699
+			} elseif (stripos($this->_agent, 'NetBSD') !== false) {
1700
+				$this->_platform = self::PLATFORM_NETBSD;
1701
+			} elseif (stripos($this->_agent, 'OpenSolaris') !== false) {
1702
+				$this->_platform = self::PLATFORM_OPENSOLARIS;
1703
+			} elseif (stripos($this->_agent, 'SunOS') !== false) {
1704
+				$this->_platform = self::PLATFORM_SUNOS;
1705
+			} elseif (stripos($this->_agent, 'OS\/2') !== false) {
1706
+				$this->_platform = self::PLATFORM_OS2;
1707
+			} elseif (stripos($this->_agent, 'BeOS') !== false) {
1708
+				$this->_platform = self::PLATFORM_BEOS;
1709
+			} elseif (stripos($this->_agent, 'win') !== false) {
1710
+				$this->_platform = self::PLATFORM_WINDOWS;
1711
+			} elseif (stripos($this->_agent, 'Playstation') !== false) {
1712
+				$this->_platform = self::PLATFORM_PLAYSTATION;
1713
+			} elseif (stripos($this->_agent, 'Roku') !== false) {
1714
+				$this->_platform = self::PLATFORM_ROKU;
1715
+			} elseif (stripos($this->_agent, 'iOS') !== false) {
1716
+				$this->_platform = self::PLATFORM_IPHONE . '/' . self::PLATFORM_IPAD;
1717
+			} elseif (stripos($this->_agent, 'tvOS') !== false) {
1718
+				$this->_platform = self::PLATFORM_APPLE_TV;
1719
+			} elseif (stripos($this->_agent, 'curl') !== false) {
1720
+				$this->_platform = self::PLATFORM_TERMINAL;
1721
+			} elseif (stripos($this->_agent, 'CrOS') !== false) {
1722
+				$this->_platform = self::PLATFORM_CHROME_OS;
1723
+			} elseif (stripos($this->_agent, 'okhttp') !== false) {
1724
+				$this->_platform = self::PLATFORM_JAVA_ANDROID;
1725
+			} elseif (stripos($this->_agent, 'PostmanRuntime') !== false) {
1726
+				$this->_platform = self::PLATFORM_POSTMAN;
1727
+			} elseif (stripos($this->_agent, 'Iframely') !== false) {
1728
+				$this->_platform = self::PLATFORM_I_FRAME;
1729
+			}
1730
+
1731
+		}
1732
+	}
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -918,27 +918,27 @@  discard block
 block discarded – undo
918 918
                 if (isset($aresult[1])) {
919 919
                     $this->setBrowser(self::BROWSER_IE);
920 920
                     $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
921
-                    if(preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)){
922
-                        if($aresult[1] == '3.1'){
921
+                    if (preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)) {
922
+                        if ($aresult[1] == '3.1') {
923 923
                             $this->setVersion('7.0');
924 924
                         }
925
-                        else if($aresult[1] == '4.0'){
925
+                        else if ($aresult[1] == '4.0') {
926 926
                             $this->setVersion('8.0');
927 927
                         }
928
-                        else if($aresult[1] == '5.0'){
928
+                        else if ($aresult[1] == '5.0') {
929 929
                             $this->setVersion('9.0');
930 930
                         }
931
-                        else if($aresult[1] == '6.0'){
931
+                        else if ($aresult[1] == '6.0') {
932 932
                             $this->setVersion('10.0');
933 933
                         }
934
-                        else if($aresult[1] == '7.0'){
934
+                        else if ($aresult[1] == '7.0') {
935 935
                             $this->setVersion('11.0');
936 936
                         }
937
-                        else if($aresult[1] == '8.0'){
937
+                        else if ($aresult[1] == '8.0') {
938 938
                             $this->setVersion('11.0');
939 939
                         }
940 940
                     }
941
-                    if(stripos($this->_agent, 'IEMobile') !== false) {
941
+                    if (stripos($this->_agent, 'IEMobile') !== false) {
942 942
                         $this->setBrowser(self::BROWSER_POCKET_IE);
943 943
                         $this->setMobile(true);
944 944
                     }
@@ -1684,8 +1684,8 @@  discard block
 block discarded – undo
1684 1684
                 $this->_platform = self::PLATFORM_ANDROID;
1685 1685
             } elseif (stripos($this->_agent, 'Silk') !== false) {
1686 1686
                 $this->_platform = self::PLATFORM_FIRE_OS;
1687
-            } elseif (stripos($this->_agent, 'linux') !== false && stripos($this->_agent, 'SMART-TV') !== false ) {
1688
-                $this->_platform = self::PLATFORM_LINUX .'/'.self::PLATFORM_SMART_TV;
1687
+            } elseif (stripos($this->_agent, 'linux') !== false && stripos($this->_agent, 'SMART-TV') !== false) {
1688
+                $this->_platform = self::PLATFORM_LINUX . '/' . self::PLATFORM_SMART_TV;
1689 1689
             } elseif (stripos($this->_agent, 'linux') !== false) {
1690 1690
                 $this->_platform = self::PLATFORM_LINUX;
1691 1691
             } else if (stripos($this->_agent, 'Nokia') !== false) {
Please login to merge, or discard this patch.
Braces   +5 added lines, -10 removed lines patch added patch discarded remove patch
@@ -921,20 +921,15 @@
 block discarded – undo
921 921
                     if(preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)){
922 922
                         if($aresult[1] == '3.1'){
923 923
                             $this->setVersion('7.0');
924
-                        }
925
-                        else if($aresult[1] == '4.0'){
924
+                        } else if($aresult[1] == '4.0'){
926 925
                             $this->setVersion('8.0');
927
-                        }
928
-                        else if($aresult[1] == '5.0'){
926
+                        } else if($aresult[1] == '5.0'){
929 927
                             $this->setVersion('9.0');
930
-                        }
931
-                        else if($aresult[1] == '6.0'){
928
+                        } else if($aresult[1] == '6.0'){
932 929
                             $this->setVersion('10.0');
933
-                        }
934
-                        else if($aresult[1] == '7.0'){
930
+                        } else if($aresult[1] == '7.0'){
935 931
                             $this->setVersion('11.0');
936
-                        }
937
-                        else if($aresult[1] == '8.0'){
932
+                        } else if($aresult[1] == '8.0'){
938 933
                             $this->setVersion('11.0');
939 934
                         }
940 935
                     }
Please login to merge, or discard this patch.
core/functions/function_lang.php 2 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@
 block discarded – undo
22 22
 	 * You should have received a copy of the GNU General Public License
23 23
 	 * along with this program; if not, write to the Free Software
24 24
 	 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
-	*/
25
+	 */
26 26
 
27 27
 	if(! function_exists('__')){
28 28
 		/**
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -24,7 +24,7 @@  discard block
 block discarded – undo
24 24
 	 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25 25
 	*/
26 26
 
27
-	if(! function_exists('__')){
27
+	if (!function_exists('__')) {
28 28
 		/**
29 29
 		 * function for the shortcut to Lang::get()
30 30
 		 * @param  string $key the language key to retrieve
@@ -32,20 +32,20 @@  discard block
 block discarded – undo
32 32
 		 * for the given key
33 33
 		 * @return string  the language value
34 34
 		 */
35
-		function __($key, $default = 'LANGUAGE_ERROR'){
35
+		function __($key, $default = 'LANGUAGE_ERROR') {
36 36
 			return get_instance()->lang->get($key, $default);
37 37
 		}
38 38
 
39 39
 	}
40 40
 
41 41
 
42
-	if(! function_exists('get_languages')){
42
+	if (!function_exists('get_languages')) {
43 43
 		/**
44 44
 		 * function for the shortcut to Lang::getSupported()
45 45
 		 * 
46 46
 		 * @return array all the supported languages
47 47
 		 */
48
-		function get_languages(){
48
+		function get_languages() {
49 49
 			return get_instance()->lang->getSupported();
50 50
 		}
51 51
 
Please login to merge, or discard this patch.
core/functions/function_user_agent.php 3 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@
 block discarded – undo
22 22
 	 * You should have received a copy of the GNU General Public License
23 23
 	 * along with this program; if not, write to the Free Software
24 24
 	 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
-	*/
25
+	 */
26 26
 
27 27
 
28 28
 	/**
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -41,7 +41,7 @@  discard block
 block discarded – undo
41 41
 	 */
42 42
 	
43 43
 	 
44
-	if(! function_exists('get_ip')){
44
+	if (!function_exists('get_ip')) {
45 45
 		/**
46 46
 		 *  Retrieves the user's IP address
47 47
 		 *  
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
 		 *  
51 51
 		 *  @return string the IP address.
52 52
 		 */
53
-		function get_ip(){
53
+		function get_ip() {
54 54
 			$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
55 55
 
56 56
 			if (isset($_SERVER["HTTP_CLIENT_IP"])) {
Please login to merge, or discard this patch.
Braces   +4 added lines, -8 removed lines patch added patch discarded remove patch
@@ -55,17 +55,13 @@
 block discarded – undo
55 55
 
56 56
 			if (isset($_SERVER["HTTP_CLIENT_IP"])) {
57 57
 				$ip = $_SERVER["HTTP_CLIENT_IP"];
58
-			}
59
-			else if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
58
+			} else if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
60 59
 				$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
61
-			} 
62
-			else if (isset($_SERVER["HTTP_X_FORWARDED"])) {
60
+			} else if (isset($_SERVER["HTTP_X_FORWARDED"])) {
63 61
 				$ip = $_SERVER["HTTP_X_FORWARDED"];
64
-			} 
65
-			else if (isset($_SERVER["HTTP_FORWARDED_FOR"])) {
62
+			} else if (isset($_SERVER["HTTP_FORWARDED_FOR"])) {
66 63
 				$ip = $_SERVER["HTTP_FORWARDED_FOR"];
67
-			} 
68
-			else if (isset($_SERVER["HTTP_FORWARDED"])) {
64
+			} else if (isset($_SERVER["HTTP_FORWARDED"])) {
69 65
 				$ip = $_SERVER["HTTP_FORWARDED"];
70 66
 			} 
71 67
 
Please login to merge, or discard this patch.
core/functions/function_string.php 2 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@
 block discarded – undo
22 22
 	 * You should have received a copy of the GNU General Public License
23 23
 	 * along with this program; if not, write to the Free Software
24 24
 	 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
-	*/
25
+	 */
26 26
 
27 27
 	/**
28 28
 	 *  @file function_string.php
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
 	 *  @filesource
40 40
 	 */
41 41
 
42
-	if(! function_exists('get_random_string')){
42
+	if (!function_exists('get_random_string')) {
43 43
 		/**
44 44
 		 * Generate a random string
45 45
 		 * @param  string $type the type of generation. It can take the values: "alpha" for alphabetic characters,
@@ -49,9 +49,9 @@  discard block
 block discarded – undo
49 49
 		 * @param  boolean $lower if we return the generated string in lowercase (true). By default it's false.
50 50
 		 * @return string the generated string.
51 51
 		 */
52
-		function get_random_string($type = 'alnum', $length = 10, $lower = false){
52
+		function get_random_string($type = 'alnum', $length = 10, $lower = false) {
53 53
 			$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
54
-			switch($type){
54
+			switch ($type) {
55 55
 				case 'alpha':
56 56
 					$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
57 57
 				break;
@@ -63,10 +63,10 @@  discard block
 block discarded – undo
63 63
 				break;
64 64
 			}
65 65
 			$random = null;
66
-			for($i = 0; $i < $length; $i++){
66
+			for ($i = 0; $i < $length; $i++) {
67 67
 				$random .= $str[mt_rand() % strlen($str)];
68 68
 			}
69
-			if($lower){
69
+			if ($lower) {
70 70
 				$random = strtolower($random);
71 71
 			}
72 72
 			return $random;
Please login to merge, or discard this patch.
core/views/errors.php 1 patch
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@  discard block
 block discarded – undo
6 6
     <meta name="viewport" content="width=device-width, initial-scale=1">
7 7
     <meta name="description" content="">
8 8
     <meta name="author" content="Tony NGUEREZA">
9
-    <title><?php echo $title;?></title>
9
+    <title><?php echo $title; ?></title>
10 10
 	<style type = 'text/css'>
11 11
 	/* reset */
12 12
 		*{
@@ -64,10 +64,10 @@  discard block
 block discarded – undo
64 64
   <body>
65 65
 	<div class="container">
66 66
 		<div class = "title">
67
-			<h2><?php echo $title;?></h2>
67
+			<h2><?php echo $title; ?></h2>
68 68
 		</div>
69 69
 		<div class = "body">
70
-			<p><?php echo $error;?></p>
70
+			<p><?php echo $error; ?></p>
71 71
 		</div>
72 72
 	</div> <!-- ./container-->
73 73
    </body>
Please login to merge, or discard this patch.
core/common.php 3 patches
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 	 * You should have received a copy of the GNU General Public License
23 23
 	 * along with this program; if not, write to the Free Software
24 24
 	 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
-	*/
25
+	 */
26 26
 
27 27
 	/**
28 28
 	 *  @file common.php
@@ -413,12 +413,12 @@  discard block
 block discarded – undo
413 413
 
414 414
 
415 415
 	/**
416
-	* Function to stringfy PHP variable, useful in debug situation
417
-	*
418
-	* @param mixed $var the variable to stringfy
419
-	*
420
-	* @return string the stringfy value
421
-	*/
416
+	 * Function to stringfy PHP variable, useful in debug situation
417
+	 *
418
+	 * @param mixed $var the variable to stringfy
419
+	 *
420
+	 * @return string the stringfy value
421
+	 */
422 422
 	function stringfy_vars($var){
423 423
 		return print_r($var, true);
424 424
 	}
@@ -556,13 +556,13 @@  discard block
 block discarded – undo
556 556
 	}
557 557
 	
558 558
 	/**
559
-	* This function is very useful, it allows to recover the instance of the global controller.
560
-	* Note this function always returns the address of the super instance.
561
-	* For example :
562
-	* $obj = & get_instance();
563
-	*  
564
-	* @return object the instance of the "Controller" class
565
-	*/
559
+	 * This function is very useful, it allows to recover the instance of the global controller.
560
+	 * Note this function always returns the address of the super instance.
561
+	 * For example :
562
+	 * $obj = & get_instance();
563
+	 *  
564
+	 * @return object the instance of the "Controller" class
565
+	 */
566 566
 	function & get_instance(){
567 567
 		return Controller::get_instance();
568 568
 	}
Please login to merge, or discard this patch.
Spacing   +71 added lines, -71 removed lines patch added patch discarded remove patch
@@ -51,14 +51,14 @@  discard block
 block discarded – undo
51 51
 		//put the first letter of class to upper case 
52 52
 		$class = ucfirst($class);
53 53
 		static $classes = array();
54
-		if(isset($classes[$class]) /*hack for duplicate log Logger name*/ && $class != 'Log'){
54
+		if (isset($classes[$class]) /*hack for duplicate log Logger name*/ && $class != 'Log') {
55 55
 			return $classes[$class];
56 56
 		}
57 57
 		$found = false;
58 58
 		foreach (array(ROOT_PATH, CORE_PATH) as $path) {
59 59
 			$file = $path . $dir . '/' . $class . '.php';
60
-			if(file_exists($file)){
61
-				if(class_exists($class, false) == false){
60
+			if (file_exists($file)) {
61
+				if (class_exists($class, false) == false) {
62 62
 					require_once $file;
63 63
 				}
64 64
 				//already found
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
 				break;
67 67
 			}
68 68
 		}
69
-		if(! $found){
69
+		if (!$found) {
70 70
 			//can't use show_error() at this time because some dependencies not yet loaded
71 71
 			set_http_status_header(503);
72 72
 			echo 'Cannot find the class [' . $class . ']';
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 		/*
77 77
 		   TODO use the best method to get the Log instance
78 78
 		 */
79
-		if($class == 'Log'){
79
+		if ($class == 'Log') {
80 80
 			//can't use the instruction like "return new Log()" 
81 81
 			//because we need return the reference instance of the loaded class.
82 82
 			$log = new Log();
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
 	 */
99 99
 	function & class_loaded($class = null){
100 100
 		static $list = array();
101
-		if($class != null){
101
+		if ($class != null) {
102 102
 			$list[strtolower($class)] = $class;
103 103
 		}
104 104
 		return $list;
@@ -111,22 +111,22 @@  discard block
 block discarded – undo
111 111
 	 */
112 112
 	function & load_configurations(array $overwrite_values = array()){
113 113
 		static $config;
114
-		if(empty($config)){
114
+		if (empty($config)) {
115 115
 			$file = CONFIG_PATH . 'config.php';
116 116
 			$found = false;
117
-			if(file_exists($file)){
117
+			if (file_exists($file)) {
118 118
 				require_once $file;
119 119
 				$found = true;
120 120
 			}
121
-			if(! $found){
121
+			if (!$found) {
122 122
 				set_http_status_header(503);
123 123
 				echo 'Unable to find the configuration file [' . $file . ']';
124 124
 				exit(1);
125 125
 			}
126 126
 
127
-			if(! isset($config) || !is_array($config)){
127
+			if (!isset($config) || !is_array($config)) {
128 128
 				set_http_status_header(503);
129
-				echo 'No configuration found in file ['  . $file . ']';
129
+				echo 'No configuration found in file [' . $file . ']';
130 130
 				exit(1);
131 131
 			}
132 132
 		}
@@ -142,9 +142,9 @@  discard block
 block discarded – undo
142 142
 	 * @param  mixed $default the default value to return if can't find the config item in the configuration
143 143
 	 * @return mixed          the config value
144 144
 	 */
145
-	function get_config($key, $default = null){
145
+	function get_config($key, $default = null) {
146 146
 		static $cfg;
147
-		if(empty($cfg)){
147
+		if (empty($cfg)) {
148 148
 			$cfg[0] = & load_configurations();
149 149
 		}
150 150
 		return array_key_exists($key, $cfg[0]) ? $cfg[0][$key] : $default;
@@ -156,9 +156,9 @@  discard block
 block discarded – undo
156 156
 	 * @param  string $message the log message to be saved
157 157
 	 * @param  string $logger  the logger to use if is set
158 158
 	 */
159
-	function save_to_log($level, $message, $logger = null){
160
-		$log =& class_loader('Log', 'classes');
161
-		if($logger){
159
+	function save_to_log($level, $message, $logger = null) {
160
+		$log = & class_loader('Log', 'classes');
161
+		if ($logger) {
162 162
 			$log->setLogger($logger);
163 163
 		}
164 164
 		$log->writeLog($message, $level);
@@ -169,11 +169,11 @@  discard block
 block discarded – undo
169 169
 	 * @param integer $code the HTTP status code
170 170
 	 * @param string  $text the HTTP status text
171 171
 	 */
172
-	function set_http_status_header($code = 200, $text = null){
173
-		if(! $code || !is_numeric($code)){
172
+	function set_http_status_header($code = 200, $text = null) {
173
+		if (!$code || !is_numeric($code)) {
174 174
 			show_error('HTTP status code must be an integer');
175 175
 		}
176
-		if(empty($text)){
176
+		if (empty($text)) {
177 177
 			$code = abs($code);
178 178
 			$http_status = array(
179 179
 								100 => 'Continue',
@@ -222,18 +222,18 @@  discard block
 block discarded – undo
222 222
 								504 => 'Gateway Timeout',
223 223
 								505 => 'HTTP Version Not Supported',
224 224
 							);
225
-			if(isset($http_status[$code])){
225
+			if (isset($http_status[$code])) {
226 226
 				$text = $http_status[$code];
227 227
 			}
228
-			else{
228
+			else {
229 229
 				show_error('No HTTP status text found for your code please check it.');
230 230
 			}
231 231
 		}
232 232
 		
233
-		if(strpos(php_sapi_name(), 'cgi') === 0){
233
+		if (strpos(php_sapi_name(), 'cgi') === 0) {
234 234
 			header('Status: ' . $code . ' ' . $text, TRUE);
235 235
 		}
236
-		else{
236
+		else {
237 237
 			$proto = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
238 238
 			header($proto . ' ' . $code . ' ' . $text, TRUE, $code);
239 239
 		}
@@ -246,12 +246,12 @@  discard block
 block discarded – undo
246 246
 	 *  @param $title the message title: "error", "info", "warning", etc.
247 247
 	 *  @param $logging either to save error in log
248 248
 	 */
249
-	function show_error($msg, $title = 'error', $logging = true){
249
+	function show_error($msg, $title = 'error', $logging = true) {
250 250
 		$title = strtoupper($title);
251 251
 		$data['error'] = $msg;
252 252
 		$data['title'] = $title;
253
-		if($logging){
254
-			save_to_log('error', '['.$title.'] '.strip_tags($msg), 'GLOBAL::ERROR');
253
+		if ($logging) {
254
+			save_to_log('error', '[' . $title . '] ' . strip_tags($msg), 'GLOBAL::ERROR');
255 255
 		}
256 256
 		$response = & class_loader('Response', 'classes');
257 257
 		$response->sendError($data);
@@ -264,18 +264,18 @@  discard block
 block discarded – undo
264 264
 	 *  
265 265
 	 *  @return boolean true if the web server uses the https protocol, false if not.
266 266
 	 */
267
-	function is_https(){
267
+	function is_https() {
268 268
 		/*
269 269
 		* some servers pass the "HTTPS" parameter in the server variable,
270 270
 		* if is the case, check if the value is "on", "true", "1".
271 271
 		*/
272
-		if(isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off'){
272
+		if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
273 273
 			return true;
274 274
 		}
275
-		else if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'){
275
+		else if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
276 276
 			return true;
277 277
 		}
278
-		else if(isset($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off'){
278
+		else if (isset($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
279 279
 			return true;
280 280
 		}
281 281
 		return false;
@@ -288,7 +288,7 @@  discard block
 block discarded – undo
288 288
 	 *  @param string $url the URL address to check
289 289
 	 *  @return boolean true if is a valid URL address or false.
290 290
 	 */
291
-	function is_url($url){
291
+	function is_url($url) {
292 292
 		return preg_match('/^(http|https|ftp):\/\/(.*)/', $url);
293 293
 	}
294 294
 	
@@ -297,8 +297,8 @@  discard block
 block discarded – undo
297 297
 	 *  
298 298
 	 *  @param string $controllerClass the controller class name to be loaded
299 299
 	 */
300
-	function autoload_controller($controllerClass){
301
-		if(file_exists($path = APPS_CONTROLLER_PATH . $controllerClass . '.php')){
300
+	function autoload_controller($controllerClass) {
301
+		if (file_exists($path = APPS_CONTROLLER_PATH . $controllerClass . '.php')) {
302 302
 			require_once $path;
303 303
 		}
304 304
 	}
@@ -310,11 +310,11 @@  discard block
 block discarded – undo
310 310
 	 *  @param object $ex instance of the "Exception" class or a derived class
311 311
 	 *  @return boolean
312 312
 	 */
313
-	function php_exception_handler($ex){
314
-		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
315
-			show_error('An exception is occured in file '. $ex->getFile() .' at line ' . $ex->getLine() . ' raison : ' . $ex->getMessage(), 'PHP Exception #' . $ex->getCode());
313
+	function php_exception_handler($ex) {
314
+		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))) {
315
+			show_error('An exception is occured in file ' . $ex->getFile() . ' at line ' . $ex->getLine() . ' raison : ' . $ex->getMessage(), 'PHP Exception #' . $ex->getCode());
316 316
 		}
317
-		else{
317
+		else {
318 318
 			save_to_log('error', 'An exception is occured in file ' . $ex->getFile() . ' at line ' . $ex->getLine() . ' raison : ' . $ex->getMessage(), 'PHP Exception');
319 319
 		}
320 320
 		exit(1);
@@ -331,16 +331,16 @@  discard block
 block discarded – undo
331 331
 	 *  @param array $errcontext the context
332 332
 	 *  @return boolean	
333 333
 	 */
334
-	function php_error_handler($errno , $errstr, $errfile , $errline, array $errcontext = array()){
334
+	function php_error_handler($errno, $errstr, $errfile, $errline, array $errcontext = array()) {
335 335
 		$isError = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $errno) === $errno);
336
-		if($isError){
336
+		if ($isError) {
337 337
 			set_http_status_header(500);
338 338
 		}
339
-		if (! (error_reporting() & $errno)) {
339
+		if (!(error_reporting() & $errno)) {
340 340
 			save_to_log('error', 'An error is occurred in the file ' . $errfile . ' at line ' . $errline . ' raison : ' . $errstr, 'PHP ' . $error_type, 'PHP ERROR');
341 341
 			return;
342 342
 		}
343
-		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
343
+		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))) {
344 344
 			$errorType = 'error';
345 345
 			switch ($errno) {
346 346
 				case E_USER_ERROR:
@@ -356,9 +356,9 @@  discard block
 block discarded – undo
356 356
 					$errorType = 'error';
357 357
 					break;
358 358
 			}
359
-			show_error('An error is occurred in the file <b>' . $errfile . '</b> at line <b>' . $errline .'</b> raison : ' . $errstr, 'PHP ' . $errorType);
359
+			show_error('An error is occurred in the file <b>' . $errfile . '</b> at line <b>' . $errline . '</b> raison : ' . $errstr, 'PHP ' . $errorType);
360 360
 		}
361
-		if ($isError){
361
+		if ($isError) {
362 362
 			exit(1);
363 363
 		}
364 364
 		return true;
@@ -367,10 +367,10 @@  discard block
 block discarded – undo
367 367
 	/**
368 368
 	 * This function is used to run in shutdown situation of the script
369 369
 	 */
370
-	function php_shudown_handler(){
370
+	function php_shudown_handler() {
371 371
 		$lastError = error_get_last();
372 372
 		if (isset($lastError) &&
373
-			($lastError['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))){
373
+			($lastError['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) {
374 374
 			php_error_handler($lastError['type'], $lastError['message'], $lastError['file'], $lastError['line']);
375 375
 		}
376 376
 	}
@@ -387,11 +387,11 @@  discard block
 block discarded – undo
387 387
 	 *  @param $attributes associative array to convert to a string attribute.
388 388
 	 *  @return string string of the HTML attribute.
389 389
 	 */
390
-	function attributes_to_string(array $attributes){
390
+	function attributes_to_string(array $attributes) {
391 391
 		$str = ' ';
392 392
 		//we check that the array passed as an argument is not empty.
393
-		if(! empty($attributes)){
394
-			foreach($attributes as $key => $value){
393
+		if (!empty($attributes)) {
394
+			foreach ($attributes as $key => $value) {
395 395
 				$key = trim(htmlspecialchars($key));
396 396
 				$value = trim(htmlspecialchars($value));
397 397
 				/*
@@ -401,10 +401,10 @@  discard block
 block discarded – undo
401 401
 				* 	$attr = array('placeholder' => 'I am a "puple"')
402 402
 				* 	$str = attributes_to_string($attr); => placeholder = "I am a \"puple\""
403 403
 				 */
404
-				if($value && strpos('"', $value) !== false){
404
+				if ($value && strpos('"', $value) !== false) {
405 405
 					$value = addslashes($value);
406 406
 				}
407
-				$str .= $key.' = "'.$value.'" ';
407
+				$str .= $key . ' = "' . $value . '" ';
408 408
 			}
409 409
 		}
410 410
 		//remove the space after using rtrim()
@@ -419,7 +419,7 @@  discard block
 block discarded – undo
419 419
 	*
420 420
 	* @return string the stringfy value
421 421
 	*/
422
-	function stringfy_vars($var){
422
+	function stringfy_vars($var) {
423 423
 		return print_r($var, true);
424 424
 	}
425 425
 
@@ -428,18 +428,18 @@  discard block
 block discarded – undo
428 428
 	 * @param  mixed $str the value to clean
429 429
 	 * @return mixed   the sanitize value
430 430
 	 */
431
-	function clean_input($str){
432
-		if(is_array($str)){
431
+	function clean_input($str) {
432
+		if (is_array($str)) {
433 433
 			$str = array_map('clean_input', $str);
434 434
 		}
435
-		else if(is_object($str)){
435
+		else if (is_object($str)) {
436 436
 			$obj = $str;
437 437
 			foreach ($str as $var => $value) {
438 438
 				$obj->$var = clean_input($value);
439 439
 			}
440 440
 			$str = $obj;
441 441
 		}
442
-		else{
442
+		else {
443 443
 			$str = htmlspecialchars(strip_tags($str), ENT_QUOTES, 'UTF-8');
444 444
 		}
445 445
 		return $str;
@@ -456,11 +456,11 @@  discard block
 block discarded – undo
456 456
 	 *
457 457
 	 * @return string the string with the hidden part.
458 458
 	 */
459
-	function string_hidden($str, $startCount = 0, $endCount = 0, $hiddenChar = '*'){
459
+	function string_hidden($str, $startCount = 0, $endCount = 0, $hiddenChar = '*') {
460 460
 		//get the string length
461 461
 		$len = strlen($str);
462 462
 		//if str is empty
463
-		if($len <= 0){
463
+		if ($len <= 0) {
464 464
 			return str_repeat($hiddenChar, 6);
465 465
 		}
466 466
 		//if the length is less than startCount and endCount
@@ -468,14 +468,14 @@  discard block
 block discarded – undo
468 468
 		//or startCount is negative or endCount is negative
469 469
 		//return the full string hidden
470 470
 		
471
-		if((($startCount + $endCount) > $len) || ($startCount == 0 && $endCount == 0) || ($startCount < 0 || $endCount < 0)){
471
+		if ((($startCount + $endCount) > $len) || ($startCount == 0 && $endCount == 0) || ($startCount < 0 || $endCount < 0)) {
472 472
 			return str_repeat($hiddenChar, $len);
473 473
 		}
474 474
 		//the start non hidden string
475 475
 		$startNonHiddenStr = substr($str, 0, $startCount);
476 476
 		//the end non hidden string
477 477
 		$endNonHiddenStr = null;
478
-		if($endCount > 0){
478
+		if ($endCount > 0) {
479 479
 			$endNonHiddenStr = substr($str, - $endCount);
480 480
 		}
481 481
 		//the hidden string
@@ -487,31 +487,31 @@  discard block
 block discarded – undo
487 487
 	/**
488 488
 	 * This function is used to set the initial session config regarding the configuration
489 489
 	 */
490
-	function set_session_config(){
490
+	function set_session_config() {
491 491
 		//$_SESSION is not available on cli mode 
492
-		if(! IS_CLI){
493
-			$logger =& class_loader('Log', 'classes');
492
+		if (!IS_CLI) {
493
+			$logger = & class_loader('Log', 'classes');
494 494
 			$logger->setLogger('PHPSession');
495 495
 			//set session params
496 496
 			$sessionHandler = get_config('session_handler', 'files'); //the default is to store in the files
497 497
 			$sessionName = get_config('session_name');
498
-			if($sessionName){
498
+			if ($sessionName) {
499 499
 				session_name($sessionName);
500 500
 			}
501 501
 			$logger->info('Session handler: ' . $sessionHandler);
502 502
 			$logger->info('Session name: ' . $sessionName);
503 503
 
504
-			if($sessionHandler == 'files'){
504
+			if ($sessionHandler == 'files') {
505 505
 				$sessionSavePath = get_config('session_save_path');
506
-				if($sessionSavePath){
507
-					if(! is_dir($sessionSavePath)){
506
+				if ($sessionSavePath) {
507
+					if (!is_dir($sessionSavePath)) {
508 508
 						mkdir($sessionSavePath, 1773);
509 509
 					}
510 510
 					session_save_path($sessionSavePath);
511 511
 					$logger->info('Session save path: ' . $sessionSavePath);
512 512
 				}
513 513
 			}
514
-			else if($sessionHandler == 'database'){
514
+			else if ($sessionHandler == 'database') {
515 515
 				//load database session handle library
516 516
 				//Model
517 517
 				require_once CORE_CLASSES_MODEL_PATH . 'Model.php';
@@ -519,11 +519,11 @@  discard block
 block discarded – undo
519 519
 				//Database Session handler Model
520 520
 				require_once CORE_CLASSES_MODEL_PATH . 'DBSessionHandlerModel.php';
521 521
 
522
-				$DBS =& class_loader('DBSessionHandler', 'classes');
522
+				$DBS = & class_loader('DBSessionHandler', 'classes');
523 523
 				session_set_save_handler($DBS, true);
524 524
 				$logger->info('session save path: ' . get_config('session_save_path'));
525 525
 			}
526
-			else{
526
+			else {
527 527
 				show_error('Invalid session handler configuration');
528 528
 			}
529 529
 			$lifetime = get_config('session_cookie_lifetime', 0);
@@ -546,9 +546,9 @@  discard block
 block discarded – undo
546 546
 			$logger->info('Session lifetime: ' . $lifetime);
547 547
 			$logger->info('Session cookie path: ' . $path);
548 548
 			$logger->info('Session domain: ' . $domain);
549
-			$logger->info('Session is secure: ' . ($secure ? 'TRUE':'FALSE'));
549
+			$logger->info('Session is secure: ' . ($secure ? 'TRUE' : 'FALSE'));
550 550
 			
551
-			if((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()){
551
+			if ((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
552 552
 				$logger->info('Session not yet start, start it now');
553 553
 				session_start();
554 554
 			}
Please login to merge, or discard this patch.
Braces   +9 added lines, -18 removed lines patch added patch discarded remove patch
@@ -224,16 +224,14 @@  discard block
 block discarded – undo
224 224
 							);
225 225
 			if(isset($http_status[$code])){
226 226
 				$text = $http_status[$code];
227
-			}
228
-			else{
227
+			} else{
229 228
 				show_error('No HTTP status text found for your code please check it.');
230 229
 			}
231 230
 		}
232 231
 		
233 232
 		if(strpos(php_sapi_name(), 'cgi') === 0){
234 233
 			header('Status: ' . $code . ' ' . $text, TRUE);
235
-		}
236
-		else{
234
+		} else{
237 235
 			$proto = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
238 236
 			header($proto . ' ' . $code . ' ' . $text, TRUE, $code);
239 237
 		}
@@ -271,11 +269,9 @@  discard block
 block discarded – undo
271 269
 		*/
272 270
 		if(isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off'){
273 271
 			return true;
274
-		}
275
-		else if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'){
272
+		} else if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'){
276 273
 			return true;
277
-		}
278
-		else if(isset($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off'){
274
+		} else if(isset($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off'){
279 275
 			return true;
280 276
 		}
281 277
 		return false;
@@ -313,8 +309,7 @@  discard block
 block discarded – undo
313 309
 	function php_exception_handler($ex){
314 310
 		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
315 311
 			show_error('An exception is occured in file '. $ex->getFile() .' at line ' . $ex->getLine() . ' raison : ' . $ex->getMessage(), 'PHP Exception #' . $ex->getCode());
316
-		}
317
-		else{
312
+		} else{
318 313
 			save_to_log('error', 'An exception is occured in file ' . $ex->getFile() . ' at line ' . $ex->getLine() . ' raison : ' . $ex->getMessage(), 'PHP Exception');
319 314
 		}
320 315
 		exit(1);
@@ -431,15 +426,13 @@  discard block
 block discarded – undo
431 426
 	function clean_input($str){
432 427
 		if(is_array($str)){
433 428
 			$str = array_map('clean_input', $str);
434
-		}
435
-		else if(is_object($str)){
429
+		} else if(is_object($str)){
436 430
 			$obj = $str;
437 431
 			foreach ($str as $var => $value) {
438 432
 				$obj->$var = clean_input($value);
439 433
 			}
440 434
 			$str = $obj;
441
-		}
442
-		else{
435
+		} else{
443 436
 			$str = htmlspecialchars(strip_tags($str), ENT_QUOTES, 'UTF-8');
444 437
 		}
445 438
 		return $str;
@@ -510,8 +503,7 @@  discard block
 block discarded – undo
510 503
 					session_save_path($sessionSavePath);
511 504
 					$logger->info('Session save path: ' . $sessionSavePath);
512 505
 				}
513
-			}
514
-			else if($sessionHandler == 'database'){
506
+			} else if($sessionHandler == 'database'){
515 507
 				//load database session handle library
516 508
 				//Model
517 509
 				require_once CORE_CLASSES_MODEL_PATH . 'Model.php';
@@ -522,8 +514,7 @@  discard block
 block discarded – undo
522 514
 				$DBS =& class_loader('DBSessionHandler', 'classes');
523 515
 				session_set_save_handler($DBS, true);
524 516
 				$logger->info('session save path: ' . get_config('session_save_path'));
525
-			}
526
-			else{
517
+			} else{
527 518
 				show_error('Invalid session handler configuration');
528 519
 			}
529 520
 			$lifetime = get_config('session_cookie_lifetime', 0);
Please login to merge, or discard this patch.
core/lang/en/lang_form_validation.php 2 patches
Indentation   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -1,24 +1,24 @@
 block discarded – undo
1 1
 <?php 
2
-    defined('ROOT_PATH') || exit('Access denied');
2
+	defined('ROOT_PATH') || exit('Access denied');
3 3
  	/**
4 4
  	 * Form validation language message (English) 
5 5
  	 */
6 6
  	$lang['fv_required']     		= 'Field %1 is required.';
7
-    $lang['fv_min_length']   		= 'Field %1 must contain at least %2 characters.';
8
-    $lang['fv_max_length']   		= 'Field %1 must contain at most %2 characters.';
9
-    $lang['fv_exact_length'] 		= 'Field %1 must contain exactly %2 characters.';
10
-    $lang['fv_less_than'] 		    = 'Field %1 must less than %2.';
11
-    $lang['fv_greater_than'] 		= 'Field %1 must greater than %2.';
12
-    $lang['fv_matches']      		= 'Field %1 must be identical to field %2.';
13
-    $lang['fv_valid_email']  		= 'Field %1 must contain a valid E-mail address.';
14
-    $lang['fv_not_equal_post_key']  = 'Field %1 must not be the same as field %2.';
15
-    $lang['fv_not_equal_string']    = 'Field %1 must not contain the value %2.';
16
-    $lang['fv_depends']      		= 'Field %1 depends on field %2 which is not valid.';
7
+	$lang['fv_min_length']   		= 'Field %1 must contain at least %2 characters.';
8
+	$lang['fv_max_length']   		= 'Field %1 must contain at most %2 characters.';
9
+	$lang['fv_exact_length'] 		= 'Field %1 must contain exactly %2 characters.';
10
+	$lang['fv_less_than'] 		    = 'Field %1 must less than %2.';
11
+	$lang['fv_greater_than'] 		= 'Field %1 must greater than %2.';
12
+	$lang['fv_matches']      		= 'Field %1 must be identical to field %2.';
13
+	$lang['fv_valid_email']  		= 'Field %1 must contain a valid E-mail address.';
14
+	$lang['fv_not_equal_post_key']  = 'Field %1 must not be the same as field %2.';
15
+	$lang['fv_not_equal_string']    = 'Field %1 must not contain the value %2.';
16
+	$lang['fv_depends']      		= 'Field %1 depends on field %2 which is not valid.';
17 17
 	$lang['fv_is_unique']	   		= 'The value of field %1 already exists.';
18 18
 	$lang['fv_is_unique_update']	= 'The value of field %1 already exists for another record.';
19
-    $lang['fv_exists']	   			= 'The value of the field %1 does not exist.';
20
-    $lang['fv_regex']	   			= 'The value of the field %1 does not use the correct format.';
21
-    $lang['fv_in_list']	   			= 'The value of field %1 must be one of the list (%2).';
22
-    $lang['fv_numeric']	   			= 'The value of field %1 must be a number.';
23
-    $lang['fv_callback']	   		= 'The value of field %1 is not valid.';
19
+	$lang['fv_exists']	   			= 'The value of the field %1 does not exist.';
20
+	$lang['fv_regex']	   			= 'The value of the field %1 does not use the correct format.';
21
+	$lang['fv_in_list']	   			= 'The value of field %1 must be one of the list (%2).';
22
+	$lang['fv_numeric']	   			= 'The value of field %1 must be a number.';
23
+	$lang['fv_callback']	   		= 'The value of field %1 is not valid.';
24 24
  	
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -3,11 +3,11 @@  discard block
 block discarded – undo
3 3
  	/**
4 4
  	 * Form validation language message (English) 
5 5
  	 */
6
- 	$lang['fv_required']     		= 'Field %1 is required.';
6
+ 	$lang['fv_required'] = 'Field %1 is required.';
7 7
     $lang['fv_min_length']   		= 'Field %1 must contain at least %2 characters.';
8 8
     $lang['fv_max_length']   		= 'Field %1 must contain at most %2 characters.';
9 9
     $lang['fv_exact_length'] 		= 'Field %1 must contain exactly %2 characters.';
10
-    $lang['fv_less_than'] 		    = 'Field %1 must less than %2.';
10
+    $lang['fv_less_than'] = 'Field %1 must less than %2.';
11 11
     $lang['fv_greater_than'] 		= 'Field %1 must greater than %2.';
12 12
     $lang['fv_matches']      		= 'Field %1 must be identical to field %2.';
13 13
     $lang['fv_valid_email']  		= 'Field %1 must contain a valid E-mail address.';
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
     $lang['fv_depends']      		= 'Field %1 depends on field %2 which is not valid.';
17 17
 	$lang['fv_is_unique']	   		= 'The value of field %1 already exists.';
18 18
 	$lang['fv_is_unique_update']	= 'The value of field %1 already exists for another record.';
19
-    $lang['fv_exists']	   			= 'The value of the field %1 does not exist.';
19
+    $lang['fv_exists'] = 'The value of the field %1 does not exist.';
20 20
     $lang['fv_regex']	   			= 'The value of the field %1 does not use the correct format.';
21 21
     $lang['fv_in_list']	   			= 'The value of field %1 must be one of the list (%2).';
22 22
     $lang['fv_numeric']	   			= 'The value of field %1 must be a number.';
Please login to merge, or discard this patch.
core/lang/en/lang_file_upload.php 2 patches
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -1,17 +1,17 @@
 block discarded – undo
1 1
 <?php 
2
-    defined('ROOT_PATH') || exit('Access denied');
2
+	defined('ROOT_PATH') || exit('Access denied');
3 3
  	/**
4 4
  	 * File upload language messages (English) 
5 5
  	 */
6 6
  	$lang['fu_upload_err_ini_size']     = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
7
-    $lang['fu_upload_err_form_size']   	= 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
8
-    $lang['fu_upload_err_partial']   	= 'The uploaded file was only partially uploaded.';
9
-    $lang['fu_upload_err_no_file'] 		= 'No file was choosed. Please select one.';
10
-    $lang['fu_upload_err_no_tmp_dir']   = 'Missing a temporary folder.';
11
-    $lang['fu_upload_err_cant_write'] 	= 'Failed to write file to disk.';
12
-    $lang['fu_upload_err_extension']    = 'A PHP extension stopped the file upload.';
13
-    $lang['fu_accept_file_types']  		= 'Filetype not allowed';
14
-    $lang['fu_file_uploads_disabled']   = 'File uploading option is disabled in php.ini';
15
-    $lang['fu_max_file_size']           = 'The uploaded file size is too big max size is %s';
16
-    $lang['fu_overwritten_not_allowed'] = 'You don\'t allow overwriting existing file';
7
+	$lang['fu_upload_err_form_size']   	= 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
8
+	$lang['fu_upload_err_partial']   	= 'The uploaded file was only partially uploaded.';
9
+	$lang['fu_upload_err_no_file'] 		= 'No file was choosed. Please select one.';
10
+	$lang['fu_upload_err_no_tmp_dir']   = 'Missing a temporary folder.';
11
+	$lang['fu_upload_err_cant_write'] 	= 'Failed to write file to disk.';
12
+	$lang['fu_upload_err_extension']    = 'A PHP extension stopped the file upload.';
13
+	$lang['fu_accept_file_types']  		= 'Filetype not allowed';
14
+	$lang['fu_file_uploads_disabled']   = 'File uploading option is disabled in php.ini';
15
+	$lang['fu_max_file_size']           = 'The uploaded file size is too big max size is %s';
16
+	$lang['fu_overwritten_not_allowed'] = 'You don\'t allow overwriting existing file';
17 17
 	
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -6,11 +6,11 @@
 block discarded – undo
6 6
  	$lang['fu_upload_err_ini_size']     = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
7 7
     $lang['fu_upload_err_form_size']   	= 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
8 8
     $lang['fu_upload_err_partial']   	= 'The uploaded file was only partially uploaded.';
9
-    $lang['fu_upload_err_no_file'] 		= 'No file was choosed. Please select one.';
9
+    $lang['fu_upload_err_no_file'] = 'No file was choosed. Please select one.';
10 10
     $lang['fu_upload_err_no_tmp_dir']   = 'Missing a temporary folder.';
11
-    $lang['fu_upload_err_cant_write'] 	= 'Failed to write file to disk.';
11
+    $lang['fu_upload_err_cant_write'] = 'Failed to write file to disk.';
12 12
     $lang['fu_upload_err_extension']    = 'A PHP extension stopped the file upload.';
13
-    $lang['fu_accept_file_types']  		= 'Filetype not allowed';
13
+    $lang['fu_accept_file_types'] = 'Filetype not allowed';
14 14
     $lang['fu_file_uploads_disabled']   = 'File uploading option is disabled in php.ini';
15 15
     $lang['fu_max_file_size']           = 'The uploaded file size is too big max size is %s';
16 16
     $lang['fu_overwritten_not_allowed'] = 'You don\'t allow overwriting existing file';
Please login to merge, or discard this patch.
core/constants.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@
 block discarded – undo
22 22
 	 * You should have received a copy of the GNU General Public License
23 23
 	 * along with this program; if not, write to the Free Software
24 24
 	 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
-	*/
25
+	 */
26 26
 
27 27
 	/**
28 28
 	 *  @file constants.php
Please login to merge, or discard this patch.