PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.0.3
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.0.3
5.13.0 5.12.1 5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / DeviceDetector / DeviceDetectorFactory.php
matomo / app / core / DeviceDetector Last commit date
DeviceDetectorCache.php 2 years ago DeviceDetectorFactory.php 2 years ago
DeviceDetectorFactory.php
68 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 *
9 */
10 namespace Piwik\DeviceDetector;
11
12 use DeviceDetector\ClientHints;
13 use DeviceDetector\DeviceDetector;
14 use Piwik\Container\StaticContainer;
15 class DeviceDetectorFactory
16 {
17 protected static $deviceDetectorInstances = [];
18 /**
19 * Returns an instance of DeviceDetector for the given user agent. Uses template method pattern
20 * and calls getDeviceDetectionInfo() when it doesn't find a matching instance in the cache.
21 * @param string $userAgent
22 * @param array $clientHints
23 * @return DeviceDetector
24 */
25 public function makeInstance($userAgent, array $clientHints = [])
26 {
27 $cacheKey = self::getNormalizedUserAgent($userAgent, $clientHints);
28 if (array_key_exists($cacheKey, self::$deviceDetectorInstances)) {
29 return self::$deviceDetectorInstances[$cacheKey];
30 }
31 $deviceDetector = $this->getDeviceDetectionInfo($userAgent, $clientHints);
32 self::$deviceDetectorInstances[$cacheKey] = $deviceDetector;
33 return $deviceDetector;
34 }
35 public static function getNormalizedUserAgent($userAgent, array $clientHints = [])
36 {
37 $normalizedClientHints = '';
38 if (is_array($clientHints) && count($clientHints)) {
39 $hints = ClientHints::factory($clientHints);
40 $brands = $hints->getBrandList();
41 ksort($brands);
42 // we only take the (sorted) list of brand, os + version and model name into account, as the other values
43 // are actually not used and should not change the result
44 $normalizedClientHints = md5(json_encode($brands) . $hints->getOperatingSystem() . $hints->getOperatingSystemVersion() . $hints->getModel());
45 }
46 return mb_substr($normalizedClientHints . trim($userAgent), 0, 500);
47 }
48 /**
49 * Creates a new DeviceDetector for the user agent. Called by makeInstance() when no matching instance
50 * was found in the cache.
51 * @param string $userAgent
52 * @param array $clientHints
53 * @return DeviceDetector
54 */
55 protected function getDeviceDetectionInfo($userAgent, array $clientHints = [])
56 {
57 $deviceDetector = new DeviceDetector($userAgent, ClientHints::factory($clientHints));
58 $deviceDetector->discardBotInformation();
59 $deviceDetector->setCache(StaticContainer::get('DeviceDetector\\Cache\\Cache'));
60 $deviceDetector->parse();
61 return $deviceDetector;
62 }
63 public static function clearInstancesCache()
64 {
65 self::$deviceDetectorInstances = [];
66 }
67 }
68