Ignore:
Timestamp:
Jul 7, 2012, 4:16:05 PM (12 years ago)
Author:
grum
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/GrumPluginClasses/classes/GPCUserAgent.class.inc.php

    r16012 r16458  
    55class GPCUserAgent
    66{
     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   */
    725  static public function parse($userAgent)
    826  {
     
    1028
    1129    $returned=array(
    12       'os' => '',
    13       'os_version' => '',
    14 
    15       'browser' => '',
    16       'browser_name' => '',
    17       'browser_type' => '',
    18       'browser_version' => '',
    19 
    20       'engine' => '',
    21       'engine_version' => ''
     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 => ''
    2240    );
    2341
    2442    $bot=self::getBot($userAgent);
    25     if($bot['crawler']!=='')
    26     {
    27       $returned['browser']=$bot['crawler'];
    28       $returned['browser_name']=$bot['name'];
    29       $returned['browser_type']=UA_PROP_TYPE_CRAWLER;
    30       $returned['browser_version']=str_replace(array(';', '(', ')'), array('', '', ''), $bot['version']);
     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]);
    3148      return($returned);
    3249    }
    3350
    3451    $tmp=self::getBrowser($userAgent);
    35     $returned['browser']=$tmp['browser'];
    36     $returned['browser_name']=$tmp['name'];
    37     $returned['browser_type']=$UA_BrowserInfo[UA_DATA_BROWSER][$tmp['browser']][UA_PROP_TYPE];
    38     $returned['browser_version']=str_replace(array(';', '(', ')'), array('', '', ''), $tmp['version']);
     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]);
    3955
    4056    $tmp=self::getOs($userAgent);
    41     $returned['os']=$tmp['os'];
    42     $returned['os_version']=str_replace(array(';', '(', ')'), array('', '', ''), $tmp['version']);
     57    $returned[UA_DATA_OS]=$tmp[UA_DATA_OS];
     58    $returned[UA_DATA_OS_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_OS_VERSION]);
    4359
    4460    $tmp=self::getEngine($userAgent);
    45     $returned['engine']=$tmp['engine'];
    46     $returned['engine_version']=str_replace(array(';', '(', ')'), array('', '', ''), $tmp['version']);
     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    }
    47123
    48124    return($returned);
     
    89165      '(ichiro)\/(\S*)\('                               => UA_BOT_ICHIRO,
    90166      '(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,
    91204      '(baiduspider)'                                   => UA_BOT_BAIDU,
    92205      '(msnbot)\/(\d+(?:\.\d+)*)'                       => UA_BOT_MSN_SEARCH,
     206      '(msnbot)\s(\d+(?:\.\d+)*)'                       => UA_BOT_MSN_SEARCH,
    93207      '(exabot)\/(\d+(?:\.\d+)*)'                       => UA_BOT_EXALEAD,
    94208      '(gamespyhttp)\/(\d+(?:\.\d+)*)'                  => UA_BOT_GAMESPY,
     
    96210      '(inktomi)'                                       => UA_BOT_INKTOMI,
    97211      '(Yahoo! Slurp)'                                  => UA_BOT_YAHOO_SEARCH,
     212      '(yahooseeker)'                                   => UA_BOT_YAHOO_SEARCH,
    98213      '\s*([a-z]*(?:bot|spyder|crawl|crawler|spider)[a-z]*)'  => UA_BOT_UNKNOWN
    99214    );
    100215
    101216    $returned=array(
    102       'crawler' => '',
    103       'name' => '',
    104       'version' => ''
     217      UA_DATA_BROWSER => '',
     218      //'name' => '',
     219      UA_DATA_BROWSER_VERSION => ''
    105220    );
    106221
     
    110225      if(preg_match('/'.$regExp.'/i',$userAgent,$result))
    111226      {
     227        // exclude some case
     228        if($crawler==UA_BOT_UNKNOWN and preg_match('/(?:msiecrawler)/i', $userAgent))
     229          return($returned);
     230
    112231        $returned=array(
    113           'crawler' => $crawler,
    114           'name' => $result[1],
    115           'version' => isset($result[2])?$result[2]:''
     232          UA_DATA_BROWSER => $crawler,
     233          //'name' => $result[1], #retrieved from the code
     234          UA_DATA_BROWSER_VERSION => isset($result[2])?$result[2]:''
    116235        );
    117236        return($returned);
     
    180299      '(chrome)\/(\S*)'                                       => UA_BROWSER_CHROME,
    181300      '(epiphany)\/(\S*)'                                     => UA_BROWSER_EPIPHANY,
     301      '(epiphany)'                                            => UA_BROWSER_EPIPHANY,
    182302      '(galeon)\/(\S*)'                                       => UA_BROWSER_GALEON,
    183303      '(orca)\/(\S*)'                                         => UA_BROWSER_ORCA,
     
    203323
    204324    $returned=array(
    205       'browser' => UA_BROWSER_UNKNOWN,
    206       'name' => '',
    207       'version' => ''
     325      UA_DATA_BROWSER => UA_BROWSER_UNKNOWN,
     326      //'name' => '',
     327      UA_DATA_BROWSER_VERSION => ''
    208328    );
    209329
     
    214334      {
    215335        //echo print_r($userAgent, true).print_r($result, true);
    216         if(is_array($result) and count($result)>2)
     336        if(is_array($result) and count($result)>=2)
    217337        {
    218338          if($browser==UA_BROWSER_SAFARI and preg_match('/iphone|ipad|ipod/i', $userAgent))
     
    220340
    221341          $returned=array(
    222             'browser' => $browser,
    223             'name' => $result[1],
    224             'version' => isset($result[2])?$result[2]:''
     342            UA_DATA_BROWSER => $browser,
     343            //'name' => $result[1],
     344            UA_DATA_BROWSER_VERSION => isset($result[2])?$result[2]:''
    225345          );
    226346        }
     
    228348        {
    229349          $returned=array(
    230             'browser' => UA_BROWSER_UNKNOWN,
    231             'name' => '',
    232             'version' => ''
     350            UA_DATA_BROWSER => UA_BROWSER_UNKNOWN,
     351            //'name' => '',
     352            UA_DATA_BROWSER_VERSION => ''
    233353          );
    234354        }
     
    257377      '(sunos)'                                               => UA_OS_SUNOS,
    258378      '(blackberry)\s?([^;.]*);'                              => UA_OS_BLACKBERRY,
     379      '(blackberry)'                                          => UA_OS_BLACKBERRY,
    259380      '(symbianos)'                                           => UA_OS_SYMBIAN_OS,
    260381      '(symbos)'                                              => UA_OS_SYMBOS,
     
    267388      '(windows)\s?(\S*)[\;\)]'                               => UA_OS_WINDOWS,
    268389      '(windows)\s?(\S*)'                                     => UA_OS_WINDOWS,
     390      '(winnt)'                                               => UA_OS_WINDOWS,
     391      '(win98)'                                               => UA_OS_WINDOWS,
     392      '(win95)'                                               => UA_OS_WINDOWS,
    269393      '(mac_powerpc)'                                         => UA_OS_MACINTOSH,
    270394      '(cpu\siphone\sos)\s?(\S*)'                             => UA_OS_IOS,
     
    276400      '(playstation\s3)'                                      => UA_OS_SONY_PS3,
    277401      '(playstation\sportable)'                               => UA_OS_SONY_PSP,
    278       '(nintendo\sds)'                                        => UA_OS_NINTENDO_DS
    279 
     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
    280415    );
    281416
    282417    $returned=array(
    283       'os' => UA_OS_UNKNOWN,
    284       'name' => '',
    285       'version' => ''
     418      UA_DATA_OS => UA_OS_UNKNOWN,
     419      //'name' => '',
     420      UA_DATA_OS_VERSION => ''
    286421    );
    287422
     
    292427      {
    293428        $returned=array(
    294           'os' => $os,
    295           'name' => $result[1],
    296           'version' => isset($result[2])?$result[2]:''
     429          UA_DATA_OS => $os,
     430          //'name' => $result[1],
     431          UA_DATA_OS_VERSION => isset($result[2])?$result[2]:''
    297432        );
    298433        switch($os)
    299434        {
    300435          case UA_OS_WINDOWS:
    301             switch($returned['version'])
     436            switch($returned[UA_DATA_OS_VERSION])
    302437            {
    303438              case 'NT 5.0':
     
    338473  {
    339474    $engineList=array(
    340       '(presto)\/(\S*)'           => UA_ENGINE_PRESTO,
    341       '(gecko)\/(\S*)'            => UA_ENGINE_GECKO,
    342       '(applewebkit)\/(\S*)'      => UA_ENGINE_APPLEWEBKIT,
    343       '(webkit)\/(\S*)'           => UA_ENGINE_WEBKIT,
    344       '(khtml)\/(\S*)'            => UA_ENGINE_KHTML,
    345       '(trident)\/(\S*)'          => UA_ENGINE_TRIDENT
     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
    346481    );
    347482
    348483    $returned=array(
    349       'engine' => UA_ENGINE_UNKNOWN,
    350       'name' => '',
    351       'version' => ''
     484      UA_DATA_ENGINE => UA_ENGINE_UNKNOWN,
     485      //'name' => '',
     486      UA_DATA_ENGINE_VERSION => ''
    352487    );
    353488
     
    358493      {
    359494        $returned=array(
    360           'engine' => $engine,
    361           'name' => $result[1],
    362           'version' => isset($result[2])?$result[2]:''
     495          UA_DATA_ENGINE => $engine,
     496          //'name' => $result[1],
     497          UA_DATA_ENGINE_VERSION => isset($result[2])?$result[2]:''
    363498        );
    364499        return($returned);
     
    368503    return($returned);
    369504  }
    370 
    371 
    372 }
     505} // GPCUserAgent class
    373506
    374507
Note: See TracChangeset for help on using the changeset viewer.