]> jfr.im git - z_archive/KronOS.git/blame - system/libraries/User_agent.php
Fixing filestructure again
[z_archive/KronOS.git] / system / libraries / User_agent.php
CommitLineData
59c06b17
CS
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 */
29class 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 */