Projekt

Obecné

Profil

Stáhnout (3.45 KB) Statistiky
| Větev: | Tag: | Revize:
8baed187 Michal Kliment
<?php defined('SYSPATH') or die('No direct script access.');
/**
* User agent library.
*
* $Id: User_agent.php 1911 2008-02-04 16:13:16Z PugFish $
*
* @package Core
* @author Kohana Team
* @copyright (c) 2007-2008 Kohana Team
* @license http://kohanaphp.com/license.html
*/
class User_agent {

public static $agent;

protected static $referrer = '';
protected static $languages = array();
protected static $charsets = array();

protected $platform = '';
protected $browser = '';
protected $version = '';
protected $mobile = '';
protected $robot = '';

/**
* Loads user agent data.
*/
public function __construct()
{
// Make sure the user agent is set
if (empty(self::$agent) AND (self::$agent = Kohana::$user_agent) === '')
{
Log::add('debug', 'Could not determine user agent type.');
return;
}

// Set the user agent data
foreach(Config::item('user_agents') as $type => $data)
{
if (isset($this->$type))
{
foreach($data as $agent => $name)
{
if (stripos(self::$agent, $agent) !== FALSE)
{
if ($type == 'browser' AND preg_match('|'.preg_quote($agent).'[^0-9.]*([0-9.]+)|i', self::$agent, $match))
{
$this->version = $match[1];
unset($match);
}
$this->$type = $name;
break;
}
}
}
}

// Set the accepted languages
if (empty(self::$languages) AND ! empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
preg_match_all('/[-a-z]{2,}/i', trim($_SERVER['HTTP_ACCEPT_LANGUAGE']), self::$languages);
}

// Set the accepted charsets
if (empty(self::$charsets) AND ! empty($_SERVER['HTTP_ACCEPT_CHARSET']))
{
preg_match_all('/[-a-z0-9]{2,}/i', trim($_SERVER['HTTP_ACCEPT_CHARSET']), self::$charsets);
}

// Set the referrer
if (empty(self::$referrer) AND ! empty($_SERVER['HTTP_REFERER']))
{
self::$referrer = trim($_SERVER['HTTP_REFERER']);
}

Log::add('debug', 'User Agent Library initialized');
}

/**
* Fetch information about the user agent, examples:
* is_browser, is_mobile, is_robot
* agent, browser, mobile, version, referrer
*
* @param string key name
* @return string
*/
public function __get($key)
{
if (empty($key))
{
return;
}
elseif (strpos($key, 'is_') === 0)
{
$key = substr($key, 3);
return isset($this->$key) ? (bool) $this->$key : FALSE;
}
elseif (isset($this->$key))
{
return $this->$key;
}
elseif (isset(self::$$key))
{
return self::$$key;
}
else
{
return FALSE;
}
}

/**
* So that users can use $user_agent->is_robot() or $user_agent->is_robot.
*
* @param string function name
* @return string
*/
public function __call($func, $args = FALSE)
{
return $this->__get($func);
}

/**
* Returns the full user agent string when the object is turned into a string.
*
* @return string
*/
public function __toString()
{
return self::$agent;
}

/**
* Test for a particular language.
*
* @param string language to test for
* @return boolean
*/
public function accept_lang($lang = 'en')
{
if (empty($lang) OR ! is_string($lang))
return FALSE;

return in_array(strtolower($lang), self::$languages);
}

/**
* Test for a particular character set.
*
* @param string character set to test for
* @return boolean
*/
public function accept_charset($charset = 'utf-8')
{
if (empty($charset) OR ! is_string($charset))
return FALSE;

return in_array(strtolower($charset), $this->charsets());
}

} // End User_Agent Class