ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ILIAS\HTTP\Agent\AgentDetermination Class Reference

This library is borrowed from the phpGroupWare API http://www.phpgroupware.org/api Modifications made by Sascha Hofmann sasch.nosp@m.a.ho.nosp@m.fmann.nosp@m.@uni.nosp@m.-koel.nosp@m.n.de More...

+ Collaboration diagram for ILIAS\HTTP\Agent\AgentDetermination:

Public Member Functions

 __construct ()
 
 isMobile ()
 
 __call ($name, $arguments)
 
 isIpad ()
 

Protected Member Functions

 isDevice (string $device)
 

Protected Attributes

string $agent_name
 
string $agent_version
 
string $agent_platform
 
string $accept
 
string $user_agent
 
bool $is_mobile = false
 
bool $is_generic = false
 
array $devices
 

Detailed Description

This library is borrowed from the phpGroupWare API http://www.phpgroupware.org/api Modifications made by Sascha Hofmann sasch.nosp@m.a.ho.nosp@m.fmann.nosp@m.@uni.nosp@m.-koel.nosp@m.n.de

Definition at line 28 of file AgentDetermination.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\HTTP\Agent\AgentDetermination::__construct ( )

Definition at line 51 of file AgentDetermination.php.

52 {
53 $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'] ?? 'undefined';
54 /*
55 Determine browser and version
56 */
57 if (preg_match('/MSIE (\d.\d{1,2})/', (string) $HTTP_USER_AGENT, $log_version)) {
58 $this->agent_version = $log_version[1];
59 $this->agent_name = 'IE';
60 } elseif (preg_match('/Opera (\d.\d{1,2})/', (string) $HTTP_USER_AGENT, $log_version) ||
61 preg_match('/Opera\/(\d.\d{1,2})/', (string) $HTTP_USER_AGENT, $log_version)) {
62 $this->agent_version = $log_version[1];
63 $this->agent_name = 'OPERA';
64 } elseif (preg_match('/Safari ([0-9\/.]*)/', (string) $HTTP_USER_AGENT, $log_version) ||
65 preg_match('/Safari\/([0-9\/.]*)/', (string) $HTTP_USER_AGENT, $log_version)) {
66 $this->agent_version = $log_version[1];
67 $this->agent_name = 'Safari';
68 } elseif (preg_match('/Firefox ([0-9\/.]*)/', (string) $HTTP_USER_AGENT, $log_version) ||
69 preg_match('/Firefox\/([0-9\/.]*)/', (string) $HTTP_USER_AGENT, $log_version)) {
70 $this->agent_version = $log_version[1];
71 $this->agent_name = 'Firefox';
72 } elseif (preg_match('/iCab (\d.[0-9a-zA-Z]{1,4})/', (string) $HTTP_USER_AGENT, $log_version) ||
73 preg_match('/iCab\/(\d.[0-9a-zA-Z]{1,4})/', (string) $HTTP_USER_AGENT, $log_version)) {
74 $this->agent_version = $log_version[1];
75 $this->agent_name = 'iCab';
76 } elseif (preg_match('/Mozilla (\d.[0-9a-zA-Z]{1,4})/', (string) $HTTP_USER_AGENT, $log_version) ||
77 preg_match('/Mozilla\/(\d.[0-9a-zA-Z]{1,4})/', (string) $HTTP_USER_AGENT, $log_version)) {
78 $this->agent_version = $log_version[1];
79 $this->agent_name = preg_match('/Gecko/', (string) $HTTP_USER_AGENT, $log_version) ? 'Mozilla' : 'Netscape';
80 } elseif (preg_match('/Konqueror\/(\d.\d.\d{1,2})/', (string) $HTTP_USER_AGENT, $log_version) ||
81 preg_match('/Konqueror\/(\d.\d{1,2})/', (string) $HTTP_USER_AGENT, $log_version)) {
82 $this->agent_version = $log_version[1];
83 $this->agent_name = 'Konqueror';
84 } else {
85 $this->agent_version = 0;
86 $this->agent_name = 'OTHER';
87 }
88
89 /*
90 Determine platform
91 */
92 if (strstr((string) $HTTP_USER_AGENT, 'Win')) {
93 $this->agent_platform = 'Win';
94 } elseif (strstr((string) $HTTP_USER_AGENT, 'Mac')) {
95 $this->agent_platform = 'Mac';
96 } elseif (strstr((string) $HTTP_USER_AGENT, 'Linux')) {
97 $this->agent_platform = 'Linux';
98 } elseif (strstr((string) $HTTP_USER_AGENT, 'Unix')) {
99 $this->agent_platform = 'Unix';
100 } elseif (strstr((string) $HTTP_USER_AGENT, 'Beos')) {
101 $this->agent_platform = 'Beos';
102 } else {
103 $this->agent_platform = 'Other';
104 }
105
106 // Mobile detection
107 $this->user_agent = $_SERVER['HTTP_USER_AGENT'] ?? 'undefined';
108 $this->accept = $_SERVER['HTTP_ACCEPT'] ?? 'undefined';
109
110 if (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE'])) {
111 $this->is_mobile = true;
112 } elseif (strpos((string) $this->accept, 'text/vnd.wap.wml') > 0 || strpos(
113 (string) $this->accept,
114 'application/vnd.wap.xhtml+xml'
115 ) > 0) {
116 $this->is_mobile = true;
117 } else {
118 foreach (array_keys($this->devices) as $device) {
119 if ($this->isDevice($device)) {
120 $this->is_mobile = true;
121 }
122 }
123 }
124 }
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26

References $_SERVER, and ILIAS\HTTP\Agent\AgentDetermination\isDevice().

+ Here is the call graph for this function:

Member Function Documentation

◆ __call()

ILIAS\HTTP\Agent\AgentDetermination::__call (   $name,
  $arguments 
)
Parameters
string$name
array$arguments
Exceptions
ilException

@noRector

Definition at line 146 of file AgentDetermination.php.

147 {
148 throw new \BadFunctionCallException('no generic method-call possible, please contact the maintainer');
150 /*$device = substr($name, 2);
151 if ($name === 'is' . ucfirst($device) && array_key_exists(strtolower($device), $this->devices)) {
152 return $this->isDevice($device);
153 } else {
154 throw new ilException('Method ' . $name . ' not defined');
155 }*/
156 }

◆ isDevice()

ILIAS\HTTP\Agent\AgentDetermination::isDevice ( string  $device)
protected

Definition at line 163 of file AgentDetermination.php.

163 : bool
164 {
165 $var = 'is' . ucfirst($device);
166 $return = $this->{$var} ?? (bool) preg_match(
167 '/' . $this->devices[strtolower($device)] . '/i',
169 );
170 if ($device !== 'generic' && $return === true) {
171 $this->is_generic = false;
172 }
173
174 return $return;
175 }

References ILIAS\HTTP\Agent\AgentDetermination\$user_agent.

Referenced by ILIAS\HTTP\Agent\AgentDetermination\__construct(), and ILIAS\HTTP\Agent\AgentDetermination\isIpad().

+ Here is the caller graph for this function:

◆ isIpad()

ILIAS\HTTP\Agent\AgentDetermination::isIpad ( )

Definition at line 158 of file AgentDetermination.php.

158 : bool
159 {
160 return $this->isDevice('ipad');
161 }

References ILIAS\HTTP\Agent\AgentDetermination\isDevice().

+ Here is the call graph for this function:

◆ isMobile()

ILIAS\HTTP\Agent\AgentDetermination::isMobile ( )

Definition at line 126 of file AgentDetermination.php.

126 : bool
127 {
128 if ($this->is_mobile) {
129 return true;
130 }
131
132 return preg_match(
133 '/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',
134 $this->user_agent
135 ) || preg_match(
136 '/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',
137 substr($this->user_agent, 0, 4)
138 );
139 }

Field Documentation

◆ $accept

string ILIAS\HTTP\Agent\AgentDetermination::$accept
protected

Definition at line 33 of file AgentDetermination.php.

◆ $agent_name

string ILIAS\HTTP\Agent\AgentDetermination::$agent_name
protected

Definition at line 30 of file AgentDetermination.php.

◆ $agent_platform

string ILIAS\HTTP\Agent\AgentDetermination::$agent_platform
protected

Definition at line 32 of file AgentDetermination.php.

◆ $agent_version

string ILIAS\HTTP\Agent\AgentDetermination::$agent_version
protected

Definition at line 31 of file AgentDetermination.php.

◆ $devices

array ILIAS\HTTP\Agent\AgentDetermination::$devices
protected
Initial value:
= [
'android' => 'android.*mobile',
'androidtablet' => 'android(?!.*mobile)',
'blackberry' => 'blackberry',
'blackberrytablet' => 'rim tablet os',
'iphone' => '(iphone|ipod)',
'ipad' => '(ipad)',
'palm' => '(avantgo|blazer|elaine|hiptop|palm|plucker|xiino)',
'windows' => 'windows ce; (iemobile|ppc|smartphone)',
'windowsphone' => 'windows phone os',
'generic' => '(kindle|mobile|mmp|midp|o2|pda|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap|opera mini)'
]

Definition at line 38 of file AgentDetermination.php.

◆ $is_generic

bool ILIAS\HTTP\Agent\AgentDetermination::$is_generic = false
protected

Definition at line 36 of file AgentDetermination.php.

◆ $is_mobile

bool ILIAS\HTTP\Agent\AgentDetermination::$is_mobile = false
protected

Definition at line 35 of file AgentDetermination.php.

◆ $user_agent

string ILIAS\HTTP\Agent\AgentDetermination::$user_agent
protected

Definition at line 34 of file AgentDetermination.php.

Referenced by ILIAS\HTTP\Agent\AgentDetermination\isDevice().


The documentation for this class was generated from the following file: