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