upgrade to codeigniter 1.7.2 for f12
[www-register-wizard.git] / libraries / User_agent.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3  * CodeIgniter
4  *
5  * An open source application development framework for PHP 4.3.2 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2008 - 2009, 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         function CI_User_agent()
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         function _load_agent_file()
86         {
87                 if ( ! @include(APPPATH.'config/user_agents'.EXT))
88                 {
89                         return FALSE;
90                 }
91                 
92                 $return = FALSE;
93                 
94                 if (isset($platforms))
95                 {
96                         $this->platforms = $platforms;
97                         unset($platforms);
98                         $return = TRUE;
99                 }
100
101                 if (isset($browsers))
102                 {
103                         $this->browsers = $browsers;
104                         unset($browsers);
105                         $return = TRUE;
106                 }
107
108                 if (isset($mobiles))
109                 {
110                         $this->mobiles = $mobiles;
111                         unset($mobiles);
112                         $return = TRUE;
113                 }
114                 
115                 if (isset($robots))
116                 {
117                         $this->robots = $robots;
118                         unset($robots);
119                         $return = TRUE;
120                 }
121
122                 return $return;
123         }
124         
125         // --------------------------------------------------------------------
126         
127         /**
128          * Compile the User Agent Data
129          *
130          * @access      private
131          * @return      bool
132          */             
133         function _compile_data()
134         {
135                 $this->_set_platform();
136         
137                 foreach (array('_set_browser', '_set_robot', '_set_mobile') as $function)
138                 {
139                         if ($this->$function() === TRUE)
140                         {
141                                 break;
142                         }
143                 }       
144         }
145         
146         // --------------------------------------------------------------------
147         
148         /**
149          * Set the Platform
150          *
151          * @access      private
152          * @return      mixed
153          */             
154         function _set_platform()
155         {
156                 if (is_array($this->platforms) AND count($this->platforms) > 0)
157                 {
158                         foreach ($this->platforms as $key => $val)
159                         {
160                                 if (preg_match("|".preg_quote($key)."|i", $this->agent))
161                                 {
162                                         $this->platform = $val;
163                                         return TRUE;
164                                 }
165                         }
166                 }
167                 $this->platform = 'Unknown Platform';
168         }
169
170         // --------------------------------------------------------------------
171         
172         /**
173          * Set the Browser
174          *
175          * @access      private
176          * @return      bool
177          */             
178         function _set_browser()
179         {
180                 if (is_array($this->browsers) AND count($this->browsers) > 0)
181                 {
182                         foreach ($this->browsers as $key => $val)
183                         {               
184                                 if (preg_match("|".preg_quote($key).".*?([0-9\.]+)|i", $this->agent, $match))
185                                 {
186                                         $this->is_browser = TRUE;
187                                         $this->version = $match[1];
188                                         $this->browser = $val;
189                                         $this->_set_mobile();
190                                         return TRUE;
191                                 }
192                         }
193                 }
194                 return FALSE;
195         }
196                         
197         // --------------------------------------------------------------------
198         
199         /**
200          * Set the Robot
201          *
202          * @access      private
203          * @return      bool
204          */             
205         function _set_robot()
206         {
207                 if (is_array($this->robots) AND count($this->robots) > 0)
208                 {               
209                         foreach ($this->robots as $key => $val)
210                         {
211                                 if (preg_match("|".preg_quote($key)."|i", $this->agent))
212                                 {
213                                         $this->is_robot = TRUE;
214                                         $this->robot = $val;
215                                         return TRUE;
216                                 }
217                         }
218                 }
219                 return FALSE;
220         }
221
222         // --------------------------------------------------------------------
223         
224         /**
225          * Set the Mobile Device
226          *
227          * @access      private
228          * @return      bool
229          */             
230         function _set_mobile()
231         {
232                 if (is_array($this->mobiles) AND count($this->mobiles) > 0)
233                 {               
234                         foreach ($this->mobiles as $key => $val)
235                         {
236                                 if (FALSE !== (strpos(strtolower($this->agent), $key)))
237                                 {
238                                         $this->is_mobile = TRUE;
239                                         $this->mobile = $val;
240                                         return TRUE;
241                                 }
242                         }
243                 }       
244                 return FALSE;
245         }
246         
247         // --------------------------------------------------------------------
248         
249         /**
250          * Set the accepted languages
251          *
252          * @access      private
253          * @return      void
254          */                     
255         function _set_languages()
256         {
257                 if ((count($this->languages) == 0) AND isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND $_SERVER['HTTP_ACCEPT_LANGUAGE'] != '')
258                 {
259                         $languages = preg_replace('/(;q=[0-9\.]+)/i', '', strtolower(trim($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
260                         
261                         $this->languages = explode(',', $languages);
262                 }
263                 
264                 if (count($this->languages) == 0)
265                 {
266                         $this->languages = array('Undefined');
267                 }       
268         }
269         
270         // --------------------------------------------------------------------
271         
272         /**
273          * Set the accepted character sets
274          *
275          * @access      private
276          * @return      void
277          */                     
278         function _set_charsets()
279         {       
280                 if ((count($this->charsets) == 0) AND isset($_SERVER['HTTP_ACCEPT_CHARSET']) AND $_SERVER['HTTP_ACCEPT_CHARSET'] != '')
281                 {
282                         $charsets = preg_replace('/(;q=.+)/i', '', strtolower(trim($_SERVER['HTTP_ACCEPT_CHARSET'])));
283                         
284                         $this->charsets = explode(',', $charsets);
285                 }
286                 
287                 if (count($this->charsets) == 0)
288                 {
289                         $this->charsets = array('Undefined');
290                 }       
291         }
292
293         // --------------------------------------------------------------------
294         
295         /**
296          * Is Browser
297          *
298          * @access      public
299          * @return      bool
300          */             
301         function is_browser()
302         {
303                 return $this->is_browser;
304         }
305
306         // --------------------------------------------------------------------
307         
308         /**
309          * Is Robot
310          *
311          * @access      public
312          * @return      bool
313          */             
314         function is_robot()
315         {
316                 return $this->is_robot;
317         }
318
319         // --------------------------------------------------------------------
320         
321         /**
322          * Is Mobile
323          *
324          * @access      public
325          * @return      bool
326          */             
327         function is_mobile()
328         {
329                 return $this->is_mobile;
330         }       
331
332         // --------------------------------------------------------------------
333         
334         /**
335          * Is this a referral from another site?
336          *
337          * @access      public
338          * @return      bool
339          */                     
340         function is_referral()
341         {
342                 return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? FALSE : TRUE;
343         }
344
345         // --------------------------------------------------------------------
346         
347         /**
348          * Agent String
349          *
350          * @access      public
351          * @return      string
352          */                     
353         function agent_string()
354         {
355                 return $this->agent;
356         }
357
358         // --------------------------------------------------------------------
359         
360         /**
361          * Get Platform
362          *
363          * @access      public
364          * @return      string
365          */                     
366         function platform()
367         {
368                 return $this->platform;
369         }
370
371         // --------------------------------------------------------------------
372         
373         /**
374          * Get Browser Name
375          *
376          * @access      public
377          * @return      string
378          */                     
379         function browser()
380         {
381                 return $this->browser;
382         }
383
384         // --------------------------------------------------------------------
385         
386         /**
387          * Get the Browser Version
388          *
389          * @access      public
390          * @return      string
391          */                     
392         function version()
393         {
394                 return $this->version;
395         }
396
397         // --------------------------------------------------------------------
398         
399         /**
400          * Get The Robot Name
401          *
402          * @access      public
403          * @return      string
404          */                             
405         function robot()
406         {
407                 return $this->robot;
408         }
409         // --------------------------------------------------------------------
410         
411         /**
412          * Get the Mobile Device
413          *
414          * @access      public
415          * @return      string
416          */                     
417         function mobile()
418         {
419                 return $this->mobile;
420         }
421         
422         // --------------------------------------------------------------------
423         
424         /**
425          * Get the referrer
426          *
427          * @access      public
428          * @return      bool
429          */                     
430         function referrer()
431         {
432                 return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : trim($_SERVER['HTTP_REFERER']);
433         }
434
435         // --------------------------------------------------------------------
436         
437         /**
438          * Get the accepted languages
439          *
440          * @access      public
441          * @return      array
442          */                     
443         function languages()
444         {
445                 if (count($this->languages) == 0)
446                 {
447                         $this->_set_languages();
448                 }
449         
450                 return $this->languages;
451         }
452
453         // --------------------------------------------------------------------
454         
455         /**
456          * Get the accepted Character Sets
457          *
458          * @access      public
459          * @return      array
460          */                     
461         function charsets()
462         {
463                 if (count($this->charsets) == 0)
464                 {
465                         $this->_set_charsets();
466                 }
467         
468                 return $this->charsets;
469         }
470         
471         // --------------------------------------------------------------------
472         
473         /**
474          * Test for a particular language
475          *
476          * @access      public
477          * @return      bool
478          */                     
479         function accept_lang($lang = 'en')
480         {
481                 return (in_array(strtolower($lang), $this->languages(), TRUE)) ? TRUE : FALSE;
482         }
483         
484         // --------------------------------------------------------------------
485         
486         /**
487          * Test for a particular character set
488          *
489          * @access      public
490          * @return      bool
491          */                     
492         function accept_charset($charset = 'utf-8')
493         {
494                 return (in_array(strtolower($charset), $this->charsets(), TRUE)) ? TRUE : FALSE;
495         }
496         
497         
498 }
499
500
501 /* End of file User_agent.php */
502 /* Location: ./system/libraries/User_agent.php */