source: extensions/GrumPluginClasses/classes/GPCUserAgent.class.inc.php @ 16458

Last change on this file since 16458 was 16458, checked in by grum, 12 years ago

feature:2634- compatibility with Piwigo 2.4
Update URI + small changes

  • Property svn:executable set to *
File size: 23.9 KB
Line 
1<?php
2
3require_once('GPCUserAgent.const.inc.php');
4
5class GPCUserAgent
6{
7  /**
8   * parse a user agent string and return an array of normalized informations
9   *
10   * returned:
11   *  array(
12   *    'os'               => (integer)
13   *    'os_version'       => (string)
14   *    'browser'          => (integer)
15   *    'browser_name'     => (string)
16   *    'browser_type'     => (integer)
17   *    'browser_version'  => (string)
18   *    'engine'           => (integer)
19   *    'engine_version'   => (string)
20   *  )
21   *
22   * @param String $userAgent
23   * @return Array
24   */
25  static public function parse($userAgent)
26  {
27    global $UA_BrowserInfo;
28
29    $returned=array(
30      UA_DATA_OS              => UA_OS_UNKNOWN,
31      UA_DATA_OS_VERSION      => '',
32
33      UA_DATA_BROWSER         => UA_BOT_UNKNOWN,
34      UA_DATA_BROWSER_NAME    => '',
35      UA_DATA_BROWSER_TYPE    => UA_PROP_TYPE_UNKNOWN,
36      UA_DATA_BROWSER_VERSION => '',
37
38      UA_DATA_ENGINE          => UA_ENGINE_UNKNOWN,
39      UA_DATA_ENGINE_VERSION  => ''
40    );
41
42    $bot=self::getBot($userAgent);
43    if($bot[UA_DATA_BROWSER]!=='')
44    {
45      $returned[UA_DATA_BROWSER]=$bot[UA_DATA_BROWSER];
46      $returned[UA_DATA_BROWSER_TYPE]=UA_BROWSER_TYPE_CRAWLER;
47      $returned[UA_DATA_BROWSER_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $bot[UA_DATA_BROWSER_VERSION]);
48      return($returned);
49    }
50
51    $tmp=self::getBrowser($userAgent);
52    $returned[UA_DATA_BROWSER]=$tmp[UA_DATA_BROWSER];
53    $returned[UA_DATA_BROWSER_TYPE]=$UA_BrowserInfo[UA_DATA_BROWSER][$tmp[UA_DATA_BROWSER]][UA_PROP_TYPE];
54    $returned[UA_DATA_BROWSER_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_BROWSER_VERSION]);
55
56    $tmp=self::getOs($userAgent);
57    $returned[UA_DATA_OS]=$tmp[UA_DATA_OS];
58    $returned[UA_DATA_OS_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_OS_VERSION]);
59
60    $tmp=self::getEngine($userAgent);
61    $returned[UA_DATA_ENGINE]=$tmp[UA_DATA_ENGINE];
62    $returned[UA_DATA_ENGINE_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_ENGINE_VERSION]);
63
64    // explicit OS for mobile device override the browser type
65    if($returned[UA_DATA_OS]==UA_OS_BLACKBERRY or
66        $returned[UA_DATA_OS]==UA_OS_SYMBIAN_OS or
67        $returned[UA_DATA_OS]==UA_OS_SYMBOS or
68        $returned[UA_DATA_OS]==UA_OS_ANDROID or
69        $returned[UA_DATA_OS]==UA_OS_IOS) $returned[UA_DATA_BROWSER_TYPE]=UA_BROWSER_TYPE_MOBILE;
70
71    // explicit OS for console device override the browser type
72    if($returned[UA_DATA_OS]==UA_OS_NINTENDO_DS or
73        $returned[UA_DATA_OS]==UA_OS_NINTENDO_WII or
74        $returned[UA_DATA_OS]==UA_OS_SONY_PS3 or
75        $returned[UA_DATA_OS]==UA_OS_SONY_PSP) $returned[UA_DATA_BROWSER_TYPE]=UA_BROWSER_TYPE_CONSOLE;
76
77    return($returned);
78  }
79
80
81  /**
82   * from a user agent array properties, return an array completed with associated
83   * properties
84   *
85   * @param Array $userAgent
86   * @return Array
87   */
88  static public function getProperties($userAgent)
89  {
90    global $UA_BrowserInfo;
91
92    $returned=array();
93    if(isset($userAgent[UA_DATA_BROWSER]) and isset($UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]]))
94    {
95      $returned[UA_DATA_BROWSER]=$userAgent[UA_DATA_BROWSER];
96      $returned[UA_DATA_BROWSER_NAME]=$UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]][UA_PROP_NAME];
97      $returned[UA_DATA_BROWSER_URL]=$UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]][UA_PROP_URL];
98    }
99
100    if(!isset($userAgent[UA_DATA_BROWSER_TYPE]) and isset($userAgent[UA_DATA_BROWSER]))
101      $userAgent[UA_DATA_BROWSER_TYPE]=$UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]][UA_PROP_TYPE];
102
103    if(isset($userAgent[UA_DATA_BROWSER_TYPE]) and isset($UA_BrowserInfo[UA_DATA_BROWSER_TYPE][$userAgent[UA_DATA_BROWSER_TYPE]]))
104    {
105      $returned[UA_DATA_BROWSER_TYPE]=$userAgent[UA_DATA_BROWSER_TYPE];
106      $returned[UA_DATA_BROWSER_TYPE_NAME]=$UA_BrowserInfo[UA_DATA_BROWSER_TYPE][$userAgent[UA_DATA_BROWSER_TYPE]];
107    }
108
109
110    if(isset($userAgent[UA_DATA_OS]) and isset($UA_BrowserInfo[UA_DATA_OS][$userAgent[UA_DATA_OS]]))
111    {
112      $returned[UA_DATA_OS]=$userAgent[UA_DATA_OS];
113      $returned[UA_DATA_OS_NAME]=$UA_BrowserInfo[UA_DATA_OS][$userAgent[UA_DATA_OS]][UA_PROP_NAME];
114      $returned[UA_DATA_OS_URL]=$UA_BrowserInfo[UA_DATA_OS][$userAgent[UA_DATA_OS]][UA_PROP_URL];
115    }
116
117    if(isset($userAgent[UA_DATA_ENGINE]) and isset($UA_BrowserInfo[UA_DATA_ENGINE][$userAgent[UA_DATA_ENGINE]]))
118    {
119      $returned[UA_DATA_ENGINE]=$userAgent[UA_DATA_ENGINE];
120      $returned[UA_DATA_ENGINE_NAME]=$UA_BrowserInfo[UA_DATA_ENGINE][$userAgent[UA_DATA_ENGINE]][UA_PROP_NAME];
121      $returned[UA_DATA_ENGINE_URL]=$UA_BrowserInfo[UA_DATA_ENGINE][$userAgent[UA_DATA_ENGINE]][UA_PROP_URL];
122    }
123
124    return($returned);
125  }
126
127
128  /**
129   * return bot properties
130   * if user agent is not a bot, properties are filled with string
131   *
132   * @param String $userAgent : user agent string to parse
133   * @return Array
134   */
135  static private function getBot($userAgent)
136  {
137    $botList=array(
138      '(008)\/(\S*)[\;]'                                => UA_BOT_008,
139      '(abachobot)'                                     => UA_BOT_ABACHOBOT,
140      '(accoona-ai-agent)(?:\/(\S*))*'                  => UA_BOT_ACCOONA_AI_AGENT,
141      '(arachmo)'                                       => UA_BOT_ARACHMO,
142      '(b-l-i-t-z-b-o-t)'                               => UA_BOT_BLITZBOT,
143      '(blitzbot)'                                      => UA_BOT_BLITZBOT,
144      '(bingbot)\/(\S*)[\;]'                            => UA_BOT_MICROSOFT_BING,
145      '(bingbot)(?:\/(\S*))*'                           => UA_BOT_MICROSOFT_BING,
146      '(charlotte)\/(\S*)[\;]'                          => UA_BOT_CHARLOTTE,
147      '(charlotte)(?:\/(\S*))*'                         => UA_BOT_CHARLOTTE,
148      '(cerberian drtrs)\sversion-(\S*)[\)]'            => UA_BOT_CERBERIAN_DRTRS,
149      '(cosmos)\/(\S*)[\_]'                             => UA_BOT_COSMOS,
150      '(covario-ids)(?:\/(\S*))*'                       => UA_BOT_COVARIO_IDS,
151      '(dataparksearch)\/(\S*)[\-]'                     => UA_BOT_DATAPARKSEARCH,
152      '(dataparksearch)(?:\/(\S*))*'                    => UA_BOT_DATAPARKSEARCH,
153      '(gaisbot)\/(\S*)[\(\s]'                          => UA_BOT_GAISBOT,
154      '(google)(?:\/(\S*))*'                            => UA_BOT_GOOGLE,
155      '(googlebot)\/(\S*);'                             => UA_BOT_GOOGLE,
156      '(googlebot)(?:\/(\S*))*'                         => UA_BOT_GOOGLE,
157      '(googlebot-image)(?:\/(\S*))*'                   => UA_BOT_GOOGLE,
158      '(gurujibot)\/(\S*);'                             => UA_BOT_GURUJIBOT,
159      '(gurujibot)(?:\/(\S*))*'                         => UA_BOT_GURUJIBOT,
160      '(holmes)(?:\/(\S*))*'                            => UA_BOT_HOLMES,
161      '(htdig)(?:\/(\S*))*'                             => UA_BOT_HTDIG,
162      '(ia_archiver)\/(\S*)'                            => UA_BOT_IA_ARCHIVER,
163      '(ia_archiver)'                                   => UA_BOT_IA_ARCHIVER,
164      '(iccrawler)'                                     => UA_BOT_ICCRAWLER,
165      '(ichiro)\/(\S*)\('                               => UA_BOT_ICHIRO,
166      '(ichiro)(?:\/(\S*))*'                            => UA_BOT_ICHIRO,
167      '(l.webis)(?:\/(\S*))*'                           => UA_BOT_LWEBIS,
168      '(larbin)'                                        => UA_BOT_LARBIN,
169      '(linkwalker)(?:\/(\S*))*'                        => UA_BOT_LINKWALKER,
170      '(lwp-trivial)(?:\/(\S*))*'                       => UA_BOT_LWPTRIVIAL,
171      '(mabontland)'                                    => UA_BOT_MABONLAND,
172      '(mnogosearch)'                                   => UA_BOT_MNOGOSEARCH,
173      '(mogimogi)(?:\/(\S*))*'                          => UA_BOT_MOGIMOGI,
174      '(morning\spaper)'                                => UA_BOT_MORNINGPAPER,
175      '(netresearchserver)\/(\S*)\('                    => UA_BOT_NETRESEARCHSERVER,
176      '(netresearchserver)(?:\/(\S*))*'                 => UA_BOT_NETRESEARCHSERVER,
177      '(newsgator)(?:\/(\S*))*'                         => UA_BOT_NEWSGATOR,
178      '(ng-search)(?:\/(\S*))*'                         => UA_BOT_NGSEARCH,
179      '(nymesis)(?:\/(\S*))*'                           => UA_BOT_NYMESIS,
180      '(oegp)'                                          => UA_BOT_OEGP,
181      '(pompos)(?:\/(\S*))*'                            => UA_BOT_POMPOS,
182      '(pycurl)(?:\/(\S*))*'                            => UA_BOT_PYCURL,
183      '(qseero)'                                        => UA_BOT_QSEERO,
184      '(sbider)(?:\/(\S*))*'                            => UA_BOT_SBIDER,
185      '(scoutjet)'                                      => UA_BOT_SCOUTJET,
186      '(scrubby)(?:\/(\S*))*'                           => UA_BOT_SCRUBBY,
187      '(searchsight)(?:\/(\S*))*'                       => UA_BOT_SEARCHSIGHT,
188      '(semanticdiscovery)(?:\/(\S*))*'                 => UA_BOT_SEMANTICDISCOVERY,
189
190      '(shoula)'                                        => UA_BOT_SHOULA,
191      '(snappy)(?:\/(\S*))*'                            => UA_BOT_SNAPPY,
192      '(stackrambler)(?:\/(\S*))*'                      => UA_BOT_STACKRAMBLER,
193      '(silk)(?:\/(\S*))*'                              => UA_BOT_SILK,
194      '(teoma)'                                         => UA_BOT_TEOMA,
195      '(tineye)(?:\/(\S*))*'                            => UA_BOT_TINEYE,
196      '(truwogps)(?:\/(\S*))*'                          => UA_BOT_TRUWOGPS,
197      '(updated)(?:\/(\S*))*'                           => UA_BOT_UPDATED,
198      '(voyager)(?:\/(\S*))*'                           => UA_BOT_VOYAGER,
199      '(vyu2)'                                          => UA_BOT_VYU2,
200      '(webcollage)(?:\/(\S*))*'                        => UA_BOT_WEBCOLLAGE,
201      '(yooglifetchagent)(?:\/(\S*))*'                  => UA_BOT_YOOGLIFETCHAGENT,
202      '(zao)(?:\/(\S*))*'                               => UA_BOT_ZAO,
203      '(zealbot)'                                       => UA_BOT_ZEALBOT,
204      '(baiduspider)'                                   => UA_BOT_BAIDU,
205      '(msnbot)\/(\d+(?:\.\d+)*)'                       => UA_BOT_MSN_SEARCH,
206      '(msnbot)\s(\d+(?:\.\d+)*)'                       => UA_BOT_MSN_SEARCH,
207      '(exabot)\/(\d+(?:\.\d+)*)'                       => UA_BOT_EXALEAD,
208      '(gamespyhttp)\/(\d+(?:\.\d+)*)'                  => UA_BOT_GAMESPY,
209      '(gigabot)\/(\d+(?:\.\d+)*)'                      => UA_BOT_GIGABLAST,
210      '(inktomi)'                                       => UA_BOT_INKTOMI,
211      '(Yahoo! Slurp)'                                  => UA_BOT_YAHOO_SEARCH,
212      '(yahooseeker)'                                   => UA_BOT_YAHOO_SEARCH,
213      '\s*([a-z]*(?:bot|spyder|crawl|crawler|spider)[a-z]*)'  => UA_BOT_UNKNOWN
214    );
215
216    $returned=array(
217      UA_DATA_BROWSER => '',
218      //'name' => '',
219      UA_DATA_BROWSER_VERSION => ''
220    );
221
222    $result=array();
223    foreach($botList as $regExp => $crawler)
224    {
225      if(preg_match('/'.$regExp.'/i',$userAgent,$result))
226      {
227        // exclude some case
228        if($crawler==UA_BOT_UNKNOWN and preg_match('/(?:msiecrawler)/i', $userAgent))
229          return($returned);
230
231        $returned=array(
232          UA_DATA_BROWSER => $crawler,
233          //'name' => $result[1], #retrieved from the code
234          UA_DATA_BROWSER_VERSION => isset($result[2])?$result[2]:''
235        );
236        return($returned);
237      }
238    }
239
240    return($returned);
241  }
242
243
244  /**
245   * return browser properties
246   *
247   * @param String $userAgent : user agent string to parse
248   * @return Array
249   */
250  static private function getBrowser($userAgent)
251  {
252    $browserList=array(
253      '(android).*applewebkit.*(?:version\/(\S*))(?:safari)?' => UA_BROWSER_ANDROID_WEBKIT,
254      '(opera mini)\/(\S*)\/'                                 => UA_BROWSER_OPERA_MINI,
255      '(opera mini)\/(\S*)'                                   => UA_BROWSER_OPERA_MINI,
256      '(opera mobi).*(?:version\/(\S*))'                      => UA_BROWSER_OPERA_MOBILE,
257      '(opera mobi)'                                          => UA_BROWSER_OPERA_MOBILE,
258      '(blackberry).*version\/(\S*)'                          => UA_BROWSER_BLACKBERRY,
259      '(blackberry\d*)\/(\S*)'                                => UA_BROWSER_BLACKBERRY,
260      '(blackberry)'                                          => UA_BROWSER_BLACKBERRY,
261      '(bunjalloo)\/(\S*)[\;\(]'                              => UA_BROWSER_BUNJALLOO,
262      '(Fennec)\/(\S*)'                                       => UA_BROWSER_FENNEC,
263      '(gobrowser)\/(\S*)'                                    => UA_BROWSER_GOBROWSER,
264      '(gobrowser)'                                           => UA_BROWSER_GOBROWSER,
265      '(iemobile)\/(\S*)[\;\)]'                               => UA_BROWSER_IEMOBILE,
266      '(iemobile)\s(\S*)[\;\)]'                               => UA_BROWSER_IEMOBILE,
267      '(iris)\/(\S*)'                                         => UA_BROWSER_IRIS,
268      '(maemo browser)\s(\S*)'                                => UA_BROWSER_MAEMO_BROWSER,
269      '(mib)\/(\S*)'                                          => UA_BROWSER_MIB,
270      '(minimo)\/(\S*)'                                       => UA_BROWSER_MINIMO,
271      '(netfront)\/(\S*)'                                     => UA_BROWSER_NETFRONT,
272      '(SEMC-Browser)\/(\S*)'                                 => UA_BROWSER_SEMC,
273      '(teashark)\/(\S*)'                                     => UA_BROWSER_TEASHARK,
274
275      '(playstation 3);\s*(\S*)[\;\)]'                        => UA_BROWSER_PS3,
276      '(playstation 3)'                                       => UA_BROWSER_PS3,
277      '(PSP \(PlayStation Portable\));\s*(\S*)[\;\)]'         => UA_BROWSER_PSP,
278      '(PSP \(PlayStation Portable\));\s*(\S*)'               => UA_BROWSER_PSP,
279
280      '(opera)\/(\S*)\s.*(?:nintendo)'                        => UA_BROWSER_OPERA_WII,
281      '(opera).*(?:version\/(\S*))'                           => UA_BROWSER_OPERA,
282      '(opera)\/(\S*)'                                        => UA_BROWSER_OPERA,
283      '(opera)\s(\S*)'                                        => UA_BROWSER_OPERA,
284      '(shiira)\/(\S*)'                                       => UA_BROWSER_SHIIRA,
285      '(shiira)'                                              => UA_BROWSER_SHIIRA,
286      '(skyfire)\/(\S*)'                                      => UA_BROWSER_SKYFIRE,
287      '(thunderbird)\/(\S*)'                                  => UA_BROWSER_THUNDERBIRD,
288      '(namoroka)\/(\S*)'                                     => UA_BROWSER_NAMOROKA,
289      '(minefield)\/(\S*)'                                    => UA_BROWSER_MINEFIELD,
290      '(lunascape)\/(\S*)'                                    => UA_BROWSER_LUNASCAPE,
291      '(lunascape)\s(\S*)[\;\)]'                              => UA_BROWSER_LUNASCAPE,
292      '(lunascape)\s(.*)[\;\)]'                               => UA_BROWSER_LUNASCAPE,
293      '(lunascape)'                                           => UA_BROWSER_LUNASCAPE,
294      '(arora)\/(\S*)'                                        => UA_BROWSER_ARORA,
295      '(camino)\/(\S*)'                                       => UA_BROWSER_CAMINO,
296      '(kapiko)\/(\S*)'                                       => UA_BROWSER_KAPIKO,
297      '(kazehakase)\/(\S*)'                                   => UA_BROWSER_KAZEHAKAZE,
298      '(chromeplus)\/(\S*)'                                   => UA_BROWSER_CHROMEPLUS,
299      '(chrome)\/(\S*)'                                       => UA_BROWSER_CHROME,
300      '(epiphany)\/(\S*)'                                     => UA_BROWSER_EPIPHANY,
301      '(epiphany)'                                            => UA_BROWSER_EPIPHANY,
302      '(galeon)\/(\S*)'                                       => UA_BROWSER_GALEON,
303      '(orca)\/(\S*)'                                         => UA_BROWSER_ORCA,
304      '(lobo)\/(\S*)'                                         => UA_BROWSER_LOBO,
305      '(seamonkey)\/(\S*)'                                    => UA_BROWSER_SEAMONKEY,
306      '(midori)\/(\S*)'                                       => UA_BROWSER_MIDORI,
307      '(midori)'                                              => UA_BROWSER_MIDORI,
308      '(maxthon)\/(\S*)'                                      => UA_BROWSER_MAXTHON,
309      '(maxthon)\s?(\S*)[\);]'                                => UA_BROWSER_MAXTHON,
310      '(iceape)\/(\S*)'                                       => UA_BROWSER_ICEAPE,
311      '(iceweasel)\/(\S*)'                                    => UA_BROWSER_ICEWEASEL,
312      '(netscape\d?)\/(\S*)'                                  => UA_BROWSER_NETSCAPE,
313      '(navigator)\/(\S*)'                                    => UA_BROWSER_NETSCAPE,
314      '(firebird)\/(\S*)'                                     => UA_BROWSER_FIREBIRD,
315      '(firefox)\/(\S*)'                                      => UA_BROWSER_FIREFOX,
316      '(msie)\s?(\S*)[\);]'                                   => UA_BROWSER_INTERNET_EXPLORER,
317      '(konqueror)\/(\S*)[\);]'                               => UA_BROWSER_KONQUEROR,
318      '(links)\s?\((\S*)[\);]'                                => UA_BROWSER_LINKS,
319      '(lynx)\/(\S*)'                                         => UA_BROWSER_LYNX,
320      '(safari)|version\/(\S*)'                               => UA_BROWSER_SAFARI,
321      '(mozilla)\/(\S*)'                                      => UA_BROWSER_NETSCAPE
322    );
323
324    $returned=array(
325      UA_DATA_BROWSER => UA_BROWSER_UNKNOWN,
326      //'name' => '',
327      UA_DATA_BROWSER_VERSION => ''
328    );
329
330    $result=array();
331    foreach($browserList as $regExp => $browser)
332    {
333      if(preg_match('/'.$regExp.'/i',$userAgent,$result))
334      {
335        //echo print_r($userAgent, true).print_r($result, true);
336        if(is_array($result) and count($result)>=2)
337        {
338          if($browser==UA_BROWSER_SAFARI and preg_match('/iphone|ipad|ipod/i', $userAgent))
339            $browser=UA_BROWSER_SAFARI_MOBILE;
340
341          $returned=array(
342            UA_DATA_BROWSER => $browser,
343            //'name' => $result[1],
344            UA_DATA_BROWSER_VERSION => isset($result[2])?$result[2]:''
345          );
346        }
347        else
348        {
349          $returned=array(
350            UA_DATA_BROWSER => UA_BROWSER_UNKNOWN,
351            //'name' => '',
352            UA_DATA_BROWSER_VERSION => ''
353          );
354        }
355        return($returned);
356      }
357    }
358    return($returned);
359  }
360
361
362  /**
363   * return OS properties
364   *
365   * @param String $userAgent : user agent string to parse
366   * @return Array
367   */
368  static private function getOs($userAgent)
369  {
370    $osList=array(
371      '(android)\s?(\S*)[\;\)]'                               => UA_OS_ANDROID,
372      '(android)\s?(\S*)'                                     => UA_OS_ANDROID,
373      '(linux)'                                               => UA_OS_LINUX,
374      '(freebsd)'                                             => UA_OS_FREEBSD,
375      '(openbsd)'                                             => UA_OS_OPENBSD,
376      '(netbsd)'                                              => UA_OS_NETBSD,
377      '(sunos)'                                               => UA_OS_SUNOS,
378      '(blackberry)\s?([^;.]*);'                              => UA_OS_BLACKBERRY,
379      '(blackberry)'                                          => UA_OS_BLACKBERRY,
380      '(symbianos)'                                           => UA_OS_SYMBIAN_OS,
381      '(symbos)'                                              => UA_OS_SYMBOS,
382      '(windows)\s?(phone\sos\s\S*)[\;\)]'                    => UA_OS_WINDOWS,
383      '(windows)\s?(phone\sos\s\S*)'                          => UA_OS_WINDOWS,
384      '(windows)\s?(ce\s?\S*)[\;\)]'                          => UA_OS_WINDOWS,
385      '(windows)\s?(ce\s?\S*)'                                => UA_OS_WINDOWS,
386      '(windows)\s?(NT\s?\S*)[\;\)]'                          => UA_OS_WINDOWS,
387      '(windows)\s?(NT\s?\S*)'                                => UA_OS_WINDOWS,
388      '(windows)\s?(\S*)[\;\)]'                               => UA_OS_WINDOWS,
389      '(windows)\s?(\S*)'                                     => UA_OS_WINDOWS,
390      '(winnt)'                                               => UA_OS_WINDOWS,
391      '(win98)'                                               => UA_OS_WINDOWS,
392      '(win95)'                                               => UA_OS_WINDOWS,
393      '(mac_powerpc)'                                         => UA_OS_MACINTOSH,
394      '(cpu\siphone\sos)\s?(\S*)'                             => UA_OS_IOS,
395      '(iphone|ipad|ipod);.*(?:cpu\sos\s(\S*))'               => UA_OS_IOS,
396      '(mac\sos\sx)\s(\S*)[\;\)]'                             => UA_OS_MAC_OS_X,
397      '(mac\sos\sx)\s(\S*)'                                   => UA_OS_MAC_OS_X,
398      '(mac\sos\sx)'                                          => UA_OS_MAC_OS_X,
399      '(nintendo\swii).*;\s([0-9\-]*);'                       => UA_OS_NINTENDO_WII,
400      '(playstation\s3)'                                      => UA_OS_SONY_PS3,
401      '(playstation\sportable)'                               => UA_OS_SONY_PSP,
402      '(nintendo\sds)'                                        => UA_OS_NINTENDO_DS,
403      '(cros)(?:\s*i\d*)(?:\s(\S*))'                          => UA_OS_CHROME_OS,
404      '(cros)'                                                => UA_OS_CHROME_OS,
405      '(beos)'                                                => UA_OS_BE_OS,
406      '(dragonfly)'                                           => UA_OS_DRAGONFLY,
407      '(unix)'                                                => UA_OS_UNIX,
408      '(darwin)'                                              => UA_OS_DARWIN,
409      '(macintosh)'                                           => UA_OS_MACINTOSH,
410      '(fedora)'                                              => UA_OS_LINUX,
411      '(os\/2).*(warp(?:\s\S*));'                             => UA_OS_OS2,
412      '(os\/2)'                                               => UA_OS_OS2,
413      '(amigaos)(?:\s(\S*))'                                  => UA_OS_AMIGAOS,
414      '(amigaos)'                                             => UA_OS_AMIGAOS
415    );
416
417    $returned=array(
418      UA_DATA_OS => UA_OS_UNKNOWN,
419      //'name' => '',
420      UA_DATA_OS_VERSION => ''
421    );
422
423    $result=array();
424    foreach($osList as $regExp => $os)
425    {
426      if(preg_match('/'.$regExp.'/i',$userAgent,$result))
427      {
428        $returned=array(
429          UA_DATA_OS => $os,
430          //'name' => $result[1],
431          UA_DATA_OS_VERSION => isset($result[2])?$result[2]:''
432        );
433        switch($os)
434        {
435          case UA_OS_WINDOWS:
436            switch($returned[UA_DATA_OS_VERSION])
437            {
438              case 'NT 5.0':
439                  $returned['version']='2000';
440                break;
441              case 'NT 5.1':
442                  $returned['version']='XP';
443                break;
444              case 'NT 5.2':
445                  $returned['version']='Server 2003';
446                break;
447              case 'NT 6.0':
448                  $returned['version']='Vista';
449                break;
450              case 'NT 6.1':
451                  $returned['version']='Seven';
452                break;
453              default;
454                break;
455            }
456            break;
457        }
458
459        return($returned);
460      }
461    }
462
463    return($returned);
464  }
465
466  /**
467   * return engine properties
468   *
469   * @param String $userAgent : user agent string to parse
470   * @return Array
471   */
472  static private function getEngine($userAgent)
473  {
474    $engineList=array(
475      '(presto)(?:\/(\S*))*'           => UA_ENGINE_PRESTO,
476      '(applewebkit)(?:\/(\S*))*'      => UA_ENGINE_APPLEWEBKIT,
477      '(webkit)(?:\/(\S*))*'           => UA_ENGINE_WEBKIT,
478      '(khtml)(?:\/(\S*))*'            => UA_ENGINE_KHTML,
479      '(gecko)(?:\/(\S*))*'            => UA_ENGINE_GECKO,
480      '(trident)(?:\/(\S*))*'          => UA_ENGINE_TRIDENT
481    );
482
483    $returned=array(
484      UA_DATA_ENGINE => UA_ENGINE_UNKNOWN,
485      //'name' => '',
486      UA_DATA_ENGINE_VERSION => ''
487    );
488
489    $result=array();
490    foreach($engineList as $regExp => $engine)
491    {
492      if(preg_match('/'.$regExp.'/i',$userAgent,$result))
493      {
494        $returned=array(
495          UA_DATA_ENGINE => $engine,
496          //'name' => $result[1],
497          UA_DATA_ENGINE_VERSION => isset($result[2])?$result[2]:''
498        );
499        return($returned);
500      }
501    }
502
503    return($returned);
504  }
505} // GPCUserAgent class
506
507
508?>
Note: See TracBrowser for help on using the repository browser.