/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: Erik Wikström
  • Date: 2013-03-28 07:43:18 UTC
  • mto: This revision was merged to the branch mainline in revision 7.
  • Revision ID: wikxen@gmail.com-20130328074318-9v6krijkyap59nct
Removed trunk folder and moved its contents to the root

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'