You are here

function browserclass_check_browser in Browser Class 7

Same name and namespace in other branches
  1. 6 browserclass.module \browserclass_check_browser()

Detect browser.

Parameters

string $agent: Lowercase version of user agent.

Return value

array An array of detected platforms.

1 call to browserclass_check_browser()
browserclass_get_classes in ./browserclass.module
Get classes.

File

./browserclass.module, line 147
Provides Browser Class settings form, permission, and browser detection.

Code

function browserclass_check_browser($agent) {
  $classes = [];

  // Add IE extra class with the version number.
  $ie_pattern = '/(?:\\b(ms)?ie\\s+|\\btrident\\/7\\.0;.*\\s+rv:)(\\d+)/';
  $ie_matches = [];
  $ie_m = preg_match($ie_pattern, $agent, $ie_matches);
  if ($ie_m === 1) {
    $classes[] = 'ie';
    if (isset($ie_matches[2])) {
      $classes[] = 'ie' . $ie_matches[2];
    }
  }
  if (stristr($agent, 'opera') !== FALSE) {
    $classes[] = 'opera';
    $aresult = explode('/', stristr($agent, 'version'));
    if (isset($aresult[1])) {
      $aversion = explode(' ', $aresult[1]);
      $classes[] = 'opera' . _browserclass_clear_version($aversion[0]);
    }
  }

  // Check for chrome desktop first, then chrome mobile, lastly check for
  // safari, as these are mutually exclusive.
  if (stristr($agent, 'chrome') !== FALSE) {
    $classes[] = 'chrome';
    $aresult = explode('/', stristr($agent, 'chrome'));
    $aversion = explode(' ', $aresult[1]);
    $classes[] = 'chrome' . _browserclass_clear_version($aversion[0]);
  }
  elseif (stristr($agent, 'crios') !== FALSE) {
    $classes[] = 'chrome';
    $aresult = explode('/', stristr($agent, 'crios'));
    if (isset($aresult[1])) {
      $aversion = explode(' ', $aresult[1]);
      $classes[] = 'chrome' . _browserclass_clear_version($aversion[0]);
    }
  }
  elseif (stristr($agent, 'safari') !== FALSE) {
    $classes[] = 'safari';
    $aresult = explode('/', stristr($agent, 'version'));
    if (isset($aresult[1])) {
      $aversion = explode(' ', $aresult[1]);
      $classes[] = 'safari' . _browserclass_clear_version($aversion[0]);
    }
  }
  if (stristr($agent, 'netscape') !== FALSE) {
    $classes[] = 'netscape';
    if (preg_match('/navigator\\/([^ ]*)/', $agent, $matches)) {
      $classes[] = 'netscape' . _browserclass_clear_version($matches[1]);
    }
    elseif (preg_match('/netscape6?\\/([^ ]*)/', $agent, $matches)) {
      $classes[] = 'netscape' . _browserclass_clear_version($matches[1]);
    }
  }
  if (stristr($agent, 'firefox') !== FALSE) {
    $classes[] = 'ff';
    if (preg_match("/firefox[\\/ \\(]([^ ;\\)]+)/", $agent, $matches)) {
      $classes[] = 'ff' . _browserclass_clear_version($matches[1]);
    }
  }
  if (stristr($agent, 'konqueror') !== FALSE) {
    $classes[] = 'konqueror';
    $aresult = explode(' ', stristr($agent, 'konqueror'));
    $aversion = explode('/', $aresult[0]);
    $classes[] = 'konqueror' . _browserclass_clear_version($aversion[1]);
  }
  if (stristr($agent, 'dillo') !== FALSE) {
    $classes[] = 'dillo';
  }
  if (stristr($agent, 'chimera') !== FALSE) {
    $classes[] = 'chimera';
  }
  if (stristr($agent, 'beonex') !== FALSE) {
    $classes[] = 'beonex';
  }
  if (stristr($agent, 'aweb') !== FALSE) {
    $classes[] = 'aweb';
  }
  if (stristr($agent, 'amaya') !== FALSE) {
    $classes[] = 'amaya';
  }
  if (stristr($agent, 'icab') !== FALSE) {
    $classes[] = 'icab';
  }
  if (stristr($agent, 'lynx') !== FALSE) {
    $classes[] = 'lynx';
  }
  if (stristr($agent, 'galeon') !== FALSE) {
    $classes[] = 'galeon';
  }
  if (stristr($agent, 'opera mini') !== FALSE) {
    $classes[] = 'operamini';
    $resultant = stristr($agent, 'opera mini');
    if (preg_match('/\\//', $resultant)) {
      $aresult = explode('/', $resultant);
      $aversion = explode(' ', $aresult[1]);
      $classes[] = 'operamini' . _browserclass_clear_version($aversion[0]);
    }
    else {
      $aversion = explode(' ', stristr($resultant, 'opera mini'));
      $classes[] = 'operamini' . _browserclass_clear_version($aversion[1]);
    }
  }
  return $classes;
}