|
| 1 | +<?php |
| 2 | + |
| 3 | +namespace WezomAgency; |
| 4 | + |
| 5 | + |
| 6 | +class Browserizr |
| 7 | +{ |
| 8 | + /** @var string */ |
| 9 | + private static $agent = ''; |
| 10 | + |
| 11 | + /** @var bool */ |
| 12 | + public static $is_android = false; |
| 13 | + /** @var bool */ |
| 14 | + public static $is_android3 = false; |
| 15 | + /** @var bool */ |
| 16 | + public static $is_android4 = false; |
| 17 | + /** @var bool */ |
| 18 | + public static $is_android5 = false; |
| 19 | + /** @var bool */ |
| 20 | + public static $is_android6 = false; |
| 21 | + /** @var bool */ |
| 22 | + public static $is_android7 = false; |
| 23 | + /** @var bool */ |
| 24 | + public static $is_android8 = false; |
| 25 | + /** @var bool */ |
| 26 | + public static $is_blackberry = false; |
| 27 | + /** @var bool */ |
| 28 | + public static $is_blackberry10 = false; |
| 29 | + /** @var bool */ |
| 30 | + public static $is_edge = false; |
| 31 | + /** @var bool */ |
| 32 | + public static $is_edge_android = false; |
| 33 | + /** @var bool */ |
| 34 | + public static $is_edge_ios = false; |
| 35 | + /** @var bool */ |
| 36 | + public static $is_ie = false; |
| 37 | + /** @var bool */ |
| 38 | + public static $is_ie8 = false; |
| 39 | + /** @var bool */ |
| 40 | + public static $is_ie9 = false; |
| 41 | + /** @var bool */ |
| 42 | + public static $is_ie10 = false; |
| 43 | + /** @var bool */ |
| 44 | + public static $is_ie11 = false; |
| 45 | + /** @var bool */ |
| 46 | + public static $is_ipad = false; |
| 47 | + /** @var bool */ |
| 48 | + public static $is_ipod = false; |
| 49 | + /** @var bool */ |
| 50 | + public static $is_iphone = false; |
| 51 | + /** @var bool */ |
| 52 | + public static $is_windows_phone = false; |
| 53 | + /** @var bool */ |
| 54 | + public static $is_moz = false; |
| 55 | + /** @var bool */ |
| 56 | + public static $is_opera = false; |
| 57 | + /** @var bool */ |
| 58 | + public static $is_safari = false; |
| 59 | + /** @var bool */ |
| 60 | + public static $is_chrome = false; |
| 61 | + /** @var bool */ |
| 62 | + public static $is_mobile = false; |
| 63 | + /** @var bool */ |
| 64 | + public static $is_desktop = false; |
| 65 | + |
| 66 | + /** |
| 67 | + * Create string with CSS classes |
| 68 | + * @param string[] $tests |
| 69 | + * @param string $css_prefix |
| 70 | + * @return string |
| 71 | + */ |
| 72 | + public static function add_classes($tests, $css_prefix = '') |
| 73 | + { |
| 74 | + $classes = []; |
| 75 | + foreach ($tests as $test) { |
| 76 | + $key = 'is_' . $test; |
| 77 | + $prefix = self::$$key ? 'is-' : 'is-not-'; |
| 78 | + array_push($classes, $css_prefix . $prefix . $test); |
| 79 | + } |
| 80 | + |
| 81 | + if (count($classes)) { |
| 82 | + return implode(' ', $classes); |
| 83 | + } |
| 84 | + return ''; |
| 85 | + } |
| 86 | + |
| 87 | + /** |
| 88 | + * Checkout/re-checkout all detections |
| 89 | + * @param string $custom_user_agent |
| 90 | + */ |
| 91 | + public static function detect($custom_user_agent = null) |
| 92 | + { |
| 93 | + self::$agent = $custom_user_agent ?: $_SERVER['HTTP_USER_AGENT'] ?: ''; |
| 94 | + |
| 95 | + self::$is_android = !!preg_match('/android/i', self::$agent); |
| 96 | + self::$is_android3 = !!preg_match('/android 3/i', self::$agent); |
| 97 | + self::$is_android4 = !!preg_match('/android 4/i', self::$agent); |
| 98 | + self::$is_android5 = !!preg_match('/android 5/i', self::$agent); |
| 99 | + self::$is_android6 = !!preg_match('/android 6/i', self::$agent); |
| 100 | + self::$is_android7 = !!preg_match('/android 7/i', self::$agent); |
| 101 | + self::$is_android8 = !!preg_match('/android 8/i', self::$agent); |
| 102 | + self::$is_blackberry = !!preg_match('/BlackBerry/i', self::$agent); |
| 103 | + self::$is_blackberry10 = !!preg_match('/BB10;/i', self::$agent); |
| 104 | + self::$is_edge = !!preg_match('/ Edge\/\d/i', self::$agent); |
| 105 | + self::$is_edge_android = !!preg_match('/\sEdgA\//i', self::$agent); |
| 106 | + self::$is_edge_ios = !!preg_match('/\sEdgA\//i', self::$agent); |
| 107 | + self::$is_ie = !!preg_match('/(MSIE|Trident)/i', self::$agent); |
| 108 | + self::$is_ie8 = !!preg_match('/MSIE 8\.\d/i', self::$agent); |
| 109 | + self::$is_ie9 = !!preg_match('/MSIE 9\.\d/i', self::$agent); |
| 110 | + self::$is_ie10 = !!preg_match('/MSIE 10\.\d/i', self::$agent); |
| 111 | + self::$is_ie11 = !!preg_match('/Trident.*rv[ :]*11\./', self::$agent); |
| 112 | + self::$is_ipad = !!preg_match('/iPad/i', self::$agent); |
| 113 | + self::$is_ipod = !!preg_match('/iPod/i', self::$agent); |
| 114 | + self::$is_iphone = !!preg_match('/iPhone/i', self::$agent); |
| 115 | + self::$is_windows_phone = !!preg_match('/Windows\sPhone/i', self::$agent); |
| 116 | + |
| 117 | + self::$is_moz = !!preg_match('/ Firefox\//i', self::$agent); |
| 118 | + self::$is_opera = !!preg_match('/Opera|OPR\//i', self::$agent); |
| 119 | + |
| 120 | + $_chromeAgent = !!preg_match('/ Chrome\/\d/', self::$agent); |
| 121 | + $_edgeAgent = !!preg_match('/ Edg[e|A|i]\/\d/i', self::$agent); |
| 122 | + self::$is_safari = !!preg_match('/ Safari\/\d/', self::$agent) && !$_chromeAgent; |
| 123 | + self::$is_chrome = ($_chromeAgent && !self::$is_opera && !self::$is_safari) && !$_edgeAgent; |
| 124 | + |
| 125 | + self::$is_mobile = ( |
| 126 | + self::$is_android || |
| 127 | + self::$is_blackberry || |
| 128 | + self::$is_blackberry10 || |
| 129 | + self::$is_edge_android || |
| 130 | + self::$is_edge_ios || |
| 131 | + self::$is_ipad || |
| 132 | + self::$is_ipod || |
| 133 | + self::$is_iphone || |
| 134 | + self::$is_windows_phone |
| 135 | + ); |
| 136 | + self::$is_desktop = !self::$is_mobile; |
| 137 | + } |
| 138 | +} |
| 139 | + |
| 140 | +// initial checkout |
| 141 | +Browserizr::detect(); |
0 commit comments