PageRenderTime 23ms CodeModel.GetById 9ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 0ms

/halogy/libraries/User_agent.php

https://bitbucket.org/haloweb/halogy-1.0/
PHP | 502 lines | 234 code | 72 blank | 196 comment | 34 complexity | ca9b99ad7713d5cbe9419e84cdcfa095 MD5 | raw file
  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 */
 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	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 */