/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/libraries/User_agent.php

  • Committer: Gustav Hatvigsson
  • Date: 2013-04-11 09:20:09 UTC
  • mfrom: (19.1.5 lenasys)
  • Revision ID: gustav.hartvigsson@gmail.com-20130411092009-ylcqzqwcmjdglb17
merged in implemetaion group one's team bransh, it contains code-ignighter
and the new admin-panel.
20130411

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
2
/**
 
3
 * CodeIgniter
 
4
 *
 
5
 * An open source application development framework for PHP 5.1.6 or newer
 
6
 *
 
7
 * @package             CodeIgniter
 
8
 * @author              ExpressionEngine Dev Team
 
9
 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
 
10
 * @license             http://codeigniter.com/user_guide/license.html
 
11
 * @link                http://codeigniter.com
 
12
 * @since               Version 1.0
 
13
 * @filesource
 
14
 */
 
15
 
 
16
// ------------------------------------------------------------------------
 
17
 
 
18
/**
 
19
 * User Agent Class
 
20
 *
 
21
 * Identifies the platform, browser, robot, or mobile devise of the browsing agent
 
22
 *
 
23
 * @package             CodeIgniter
 
24
 * @subpackage  Libraries
 
25
 * @category    User Agent
 
26
 * @author              ExpressionEngine Dev Team
 
27
 * @link                http://codeigniter.com/user_guide/libraries/user_agent.html
 
28
 */
 
29
class CI_User_agent {
 
30
 
 
31
        var $agent              = NULL;
 
32
 
 
33
        var $is_browser = FALSE;
 
34
        var $is_robot   = FALSE;
 
35
        var $is_mobile  = FALSE;
 
36
 
 
37
        var $languages  = array();
 
38
        var $charsets   = array();
 
39
 
 
40
        var $platforms  = array();
 
41
        var $browsers   = array();
 
42
        var $mobiles    = array();
 
43
        var $robots             = array();
 
44
 
 
45
        var $platform   = '';
 
46
        var $browser    = '';
 
47
        var $version    = '';
 
48
        var $mobile             = '';
 
49
        var $robot              = '';
 
50
 
 
51
        /**
 
52
         * Constructor
 
53
         *
 
54
         * Sets the User Agent and runs the compilation routine
 
55
         *
 
56
         * @access      public
 
57
         * @return      void
 
58
         */
 
59
        public function __construct()
 
60
        {
 
61
                if (isset($_SERVER['HTTP_USER_AGENT']))
 
62
                {
 
63
                        $this->agent = trim($_SERVER['HTTP_USER_AGENT']);
 
64
                }
 
65
 
 
66
                if ( ! is_null($this->agent))
 
67
                {
 
68
                        if ($this->_load_agent_file())
 
69
                        {
 
70
                                $this->_compile_data();
 
71
                        }
 
72
                }
 
73
 
 
74
                log_message('debug', "User Agent Class Initialized");
 
75
        }
 
76
 
 
77
        // --------------------------------------------------------------------
 
78
 
 
79
        /**
 
80
         * Compile the User Agent Data
 
81
         *
 
82
         * @access      private
 
83
         * @return      bool
 
84
         */
 
85
        private function _load_agent_file()
 
86
        {
 
87
                if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/user_agents.php'))
 
88
                {
 
89
                        include(APPPATH.'config/'.ENVIRONMENT.'/user_agents.php');
 
90
                }
 
91
                elseif (is_file(APPPATH.'config/user_agents.php'))
 
92
                {
 
93
                        include(APPPATH.'config/user_agents.php');
 
94
                }
 
95
                else
 
96
                {
 
97
                        return FALSE;
 
98
                }
 
99
 
 
100
                $return = FALSE;
 
101
 
 
102
                if (isset($platforms))
 
103
                {
 
104
                        $this->platforms = $platforms;
 
105
                        unset($platforms);
 
106
                        $return = TRUE;
 
107
                }
 
108
 
 
109
                if (isset($browsers))
 
110
                {
 
111
                        $this->browsers = $browsers;
 
112
                        unset($browsers);
 
113
                        $return = TRUE;
 
114
                }
 
115
 
 
116
                if (isset($mobiles))
 
117
                {
 
118
                        $this->mobiles = $mobiles;
 
119
                        unset($mobiles);
 
120
                        $return = TRUE;
 
121
                }
 
122
 
 
123
                if (isset($robots))
 
124
                {
 
125
                        $this->robots = $robots;
 
126
                        unset($robots);
 
127
                        $return = TRUE;
 
128
                }
 
129
 
 
130
                return $return;
 
131
        }
 
132
 
 
133
        // --------------------------------------------------------------------
 
134
 
 
135
        /**
 
136
         * Compile the User Agent Data
 
137
         *
 
138
         * @access      private
 
139
         * @return      bool
 
140
         */
 
141
        private function _compile_data()
 
142
        {
 
143
                $this->_set_platform();
 
144
 
 
145
                foreach (array('_set_robot', '_set_browser', '_set_mobile') as $function)
 
146
                {
 
147
                        if ($this->$function() === TRUE)
 
148
                        {
 
149
                                break;
 
150
                        }
 
151
                }
 
152
        }
 
153
 
 
154
        // --------------------------------------------------------------------
 
155
 
 
156
        /**
 
157
         * Set the Platform
 
158
         *
 
159
         * @access      private
 
160
         * @return      mixed
 
161
         */
 
162
        private function _set_platform()
 
163
        {
 
164
                if (is_array($this->platforms) AND count($this->platforms) > 0)
 
165
                {
 
166
                        foreach ($this->platforms as $key => $val)
 
167
                        {
 
168
                                if (preg_match("|".preg_quote($key)."|i", $this->agent))
 
169
                                {
 
170
                                        $this->platform = $val;
 
171
                                        return TRUE;
 
172
                                }
 
173
                        }
 
174
                }
 
175
                $this->platform = 'Unknown Platform';
 
176
        }
 
177
 
 
178
        // --------------------------------------------------------------------
 
179
 
 
180
        /**
 
181
         * Set the Browser
 
182
         *
 
183
         * @access      private
 
184
         * @return      bool
 
185
         */
 
186
        private function _set_browser()
 
187
        {
 
188
                if (is_array($this->browsers) AND count($this->browsers) > 0)
 
189
                {
 
190
                        foreach ($this->browsers as $key => $val)
 
191
                        {
 
192
                                if (preg_match("|".preg_quote($key).".*?([0-9\.]+)|i", $this->agent, $match))
 
193
                                {
 
194
                                        $this->is_browser = TRUE;
 
195
                                        $this->version = $match[1];
 
196
                                        $this->browser = $val;
 
197
                                        $this->_set_mobile();
 
198
                                        return TRUE;
 
199
                                }
 
200
                        }
 
201
                }
 
202
                return FALSE;
 
203
        }
 
204
 
 
205
        // --------------------------------------------------------------------
 
206
 
 
207
        /**
 
208
         * Set the Robot
 
209
         *
 
210
         * @access      private
 
211
         * @return      bool
 
212
         */
 
213
        private function _set_robot()
 
214
        {
 
215
                if (is_array($this->robots) AND count($this->robots) > 0)
 
216
                {
 
217
                        foreach ($this->robots as $key => $val)
 
218
                        {
 
219
                                if (preg_match("|".preg_quote($key)."|i", $this->agent))
 
220
                                {
 
221
                                        $this->is_robot = TRUE;
 
222
                                        $this->robot = $val;
 
223
                                        return TRUE;
 
224
                                }
 
225
                        }
 
226
                }
 
227
                return FALSE;
 
228
        }
 
229
 
 
230
        // --------------------------------------------------------------------
 
231
 
 
232
        /**
 
233
         * Set the Mobile Device
 
234
         *
 
235
         * @access      private
 
236
         * @return      bool
 
237
         */
 
238
        private function _set_mobile()
 
239
        {
 
240
                if (is_array($this->mobiles) AND count($this->mobiles) > 0)
 
241
                {
 
242
                        foreach ($this->mobiles as $key => $val)
 
243
                        {
 
244
                                if (FALSE !== (strpos(strtolower($this->agent), $key)))
 
245
                                {
 
246
                                        $this->is_mobile = TRUE;
 
247
                                        $this->mobile = $val;
 
248
                                        return TRUE;
 
249
                                }
 
250
                        }
 
251
                }
 
252
                return FALSE;
 
253
        }
 
254
 
 
255
        // --------------------------------------------------------------------
 
256
 
 
257
        /**
 
258
         * Set the accepted languages
 
259
         *
 
260
         * @access      private
 
261
         * @return      void
 
262
         */
 
263
        private function _set_languages()
 
264
        {
 
265
                if ((count($this->languages) == 0) AND isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND $_SERVER['HTTP_ACCEPT_LANGUAGE'] != '')
 
266
                {
 
267
                        $languages = preg_replace('/(;q=[0-9\.]+)/i', '', strtolower(trim($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
 
268
 
 
269
                        $this->languages = explode(',', $languages);
 
270
                }
 
271
 
 
272
                if (count($this->languages) == 0)
 
273
                {
 
274
                        $this->languages = array('Undefined');
 
275
                }
 
276
        }
 
277
 
 
278
        // --------------------------------------------------------------------
 
279
 
 
280
        /**
 
281
         * Set the accepted character sets
 
282
         *
 
283
         * @access      private
 
284
         * @return      void
 
285
         */
 
286
        private function _set_charsets()
 
287
        {
 
288
                if ((count($this->charsets) == 0) AND isset($_SERVER['HTTP_ACCEPT_CHARSET']) AND $_SERVER['HTTP_ACCEPT_CHARSET'] != '')
 
289
                {
 
290
                        $charsets = preg_replace('/(;q=.+)/i', '', strtolower(trim($_SERVER['HTTP_ACCEPT_CHARSET'])));
 
291
 
 
292
                        $this->charsets = explode(',', $charsets);
 
293
                }
 
294
 
 
295
                if (count($this->charsets) == 0)
 
296
                {
 
297
                        $this->charsets = array('Undefined');
 
298
                }
 
299
        }
 
300
 
 
301
        // --------------------------------------------------------------------
 
302
 
 
303
        /**
 
304
         * Is Browser
 
305
         *
 
306
         * @access      public
 
307
         * @return      bool
 
308
         */
 
309
        public function is_browser($key = NULL)
 
310
        {
 
311
                if ( ! $this->is_browser)
 
312
                {
 
313
                        return FALSE;
 
314
                }
 
315
 
 
316
                // No need to be specific, it's a browser
 
317
                if ($key === NULL)
 
318
                {
 
319
                        return TRUE;
 
320
                }
 
321
 
 
322
                // Check for a specific browser
 
323
                return array_key_exists($key, $this->browsers) AND $this->browser === $this->browsers[$key];
 
324
        }
 
325
 
 
326
        // --------------------------------------------------------------------
 
327
 
 
328
        /**
 
329
         * Is Robot
 
330
         *
 
331
         * @access      public
 
332
         * @return      bool
 
333
         */
 
334
        public function is_robot($key = NULL)
 
335
        {
 
336
                if ( ! $this->is_robot)
 
337
                {
 
338
                        return FALSE;
 
339
                }
 
340
 
 
341
                // No need to be specific, it's a robot
 
342
                if ($key === NULL)
 
343
                {
 
344
                        return TRUE;
 
345
                }
 
346
 
 
347
                // Check for a specific robot
 
348
                return array_key_exists($key, $this->robots) AND $this->robot === $this->robots[$key];
 
349
        }
 
350
 
 
351
        // --------------------------------------------------------------------
 
352
 
 
353
        /**
 
354
         * Is Mobile
 
355
         *
 
356
         * @access      public
 
357
         * @return      bool
 
358
         */
 
359
        public function is_mobile($key = NULL)
 
360
        {
 
361
                if ( ! $this->is_mobile)
 
362
                {
 
363
                        return FALSE;
 
364
                }
 
365
 
 
366
                // No need to be specific, it's a mobile
 
367
                if ($key === NULL)
 
368
                {
 
369
                        return TRUE;
 
370
                }
 
371
 
 
372
                // Check for a specific robot
 
373
                return array_key_exists($key, $this->mobiles) AND $this->mobile === $this->mobiles[$key];
 
374
        }
 
375
 
 
376
        // --------------------------------------------------------------------
 
377
 
 
378
        /**
 
379
         * Is this a referral from another site?
 
380
         *
 
381
         * @access      public
 
382
         * @return      bool
 
383
         */
 
384
        public function is_referral()
 
385
        {
 
386
                if ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '')
 
387
                {
 
388
                        return FALSE;
 
389
                }
 
390
                return TRUE;
 
391
        }
 
392
 
 
393
        // --------------------------------------------------------------------
 
394
 
 
395
        /**
 
396
         * Agent String
 
397
         *
 
398
         * @access      public
 
399
         * @return      string
 
400
         */
 
401
        public function agent_string()
 
402
        {
 
403
                return $this->agent;
 
404
        }
 
405
 
 
406
        // --------------------------------------------------------------------
 
407
 
 
408
        /**
 
409
         * Get Platform
 
410
         *
 
411
         * @access      public
 
412
         * @return      string
 
413
         */
 
414
        public function platform()
 
415
        {
 
416
                return $this->platform;
 
417
        }
 
418
 
 
419
        // --------------------------------------------------------------------
 
420
 
 
421
        /**
 
422
         * Get Browser Name
 
423
         *
 
424
         * @access      public
 
425
         * @return      string
 
426
         */
 
427
        public function browser()
 
428
        {
 
429
                return $this->browser;
 
430
        }
 
431
 
 
432
        // --------------------------------------------------------------------
 
433
 
 
434
        /**
 
435
         * Get the Browser Version
 
436
         *
 
437
         * @access      public
 
438
         * @return      string
 
439
         */
 
440
        public function version()
 
441
        {
 
442
                return $this->version;
 
443
        }
 
444
 
 
445
        // --------------------------------------------------------------------
 
446
 
 
447
        /**
 
448
         * Get The Robot Name
 
449
         *
 
450
         * @access      public
 
451
         * @return      string
 
452
         */
 
453
        public function robot()
 
454
        {
 
455
                return $this->robot;
 
456
        }
 
457
        // --------------------------------------------------------------------
 
458
 
 
459
        /**
 
460
         * Get the Mobile Device
 
461
         *
 
462
         * @access      public
 
463
         * @return      string
 
464
         */
 
465
        public function mobile()
 
466
        {
 
467
                return $this->mobile;
 
468
        }
 
469
 
 
470
        // --------------------------------------------------------------------
 
471
 
 
472
        /**
 
473
         * Get the referrer
 
474
         *
 
475
         * @access      public
 
476
         * @return      bool
 
477
         */
 
478
        public function referrer()
 
479
        {
 
480
                return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : trim($_SERVER['HTTP_REFERER']);
 
481
        }
 
482
 
 
483
        // --------------------------------------------------------------------
 
484
 
 
485
        /**
 
486
         * Get the accepted languages
 
487
         *
 
488
         * @access      public
 
489
         * @return      array
 
490
         */
 
491
        public function languages()
 
492
        {
 
493
                if (count($this->languages) == 0)
 
494
                {
 
495
                        $this->_set_languages();
 
496
                }
 
497
 
 
498
                return $this->languages;
 
499
        }
 
500
 
 
501
        // --------------------------------------------------------------------
 
502
 
 
503
        /**
 
504
         * Get the accepted Character Sets
 
505
         *
 
506
         * @access      public
 
507
         * @return      array
 
508
         */
 
509
        public function charsets()
 
510
        {
 
511
                if (count($this->charsets) == 0)
 
512
                {
 
513
                        $this->_set_charsets();
 
514
                }
 
515
 
 
516
                return $this->charsets;
 
517
        }
 
518
 
 
519
        // --------------------------------------------------------------------
 
520
 
 
521
        /**
 
522
         * Test for a particular language
 
523
         *
 
524
         * @access      public
 
525
         * @return      bool
 
526
         */
 
527
        public function accept_lang($lang = 'en')
 
528
        {
 
529
                return (in_array(strtolower($lang), $this->languages(), TRUE));
 
530
        }
 
531
 
 
532
        // --------------------------------------------------------------------
 
533
 
 
534
        /**
 
535
         * Test for a particular character set
 
536
         *
 
537
         * @access      public
 
538
         * @return      bool
 
539
         */
 
540
        public function accept_charset($charset = 'utf-8')
 
541
        {
 
542
                return (in_array(strtolower($charset), $this->charsets(), TRUE));
 
543
        }
 
544
 
 
545
}
 
546
 
 
547
 
 
548
/* End of file User_agent.php */
 
549
/* Location: ./system/libraries/User_agent.php */
 
 
b'\\ No newline at end of file'