/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk
20.1.1 by galaxyAbstractor
* Added an simple admin panel to the codeviewer-cmssy stuff
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 */