PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.2.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.2.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 1 year ago DeviceDetectorFactory.php 2 years ago
DeviceDetectorFactory.php
67 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\DeviceDetector;
10
11 use DeviceDetector\ClientHints;
12 use DeviceDetector\DeviceDetector;
13 use Piwik\Container\StaticContainer;
14 class DeviceDetectorFactory
15 {
16 protected static $deviceDetectorInstances = [];
17 /**
18 * Returns an instance of DeviceDetector for the given user agent. Uses template method pattern
19 * and calls getDeviceDetectionInfo() when it doesn't find a matching instance in the cache.
20 * @param string $userAgent
21 * @param array $clientHints
22 * @return DeviceDetector
23 */
24 public function makeInstance($userAgent, array $clientHints = [])
25 {
26 $cacheKey = self::getNormalizedUserAgent($userAgent, $clientHints);
27 if (array_key_exists($cacheKey, self::$deviceDetectorInstances)) {
28 return self::$deviceDetectorInstances[$cacheKey];
29 }
30 $deviceDetector = $this->getDeviceDetectionInfo($userAgent, $clientHints);
31 self::$deviceDetectorInstances[$cacheKey] = $deviceDetector;
32 return $deviceDetector;
33 }
34 public static function getNormalizedUserAgent($userAgent, array $clientHints = [])
35 {
36 $normalizedClientHints = '';
37 if (is_array($clientHints) && count($clientHints)) {
38 $hints = ClientHints::factory($clientHints);
39 $brands = $hints->getBrandList();
40 ksort($brands);
41 // we only take the (sorted) list of brand, os + version and model name into account, as the other values
42 // are actually not used and should not change the result
43 $normalizedClientHints = md5(json_encode($brands) . $hints->getOperatingSystem() . $hints->getOperatingSystemVersion() . $hints->getModel());
44 }
45 return mb_substr($normalizedClientHints . trim($userAgent), 0, 500);
46 }
47 /**
48 * Creates a new DeviceDetector for the user agent. Called by makeInstance() when no matching instance
49 * was found in the cache.
50 * @param string $userAgent
51 * @param array $clientHints
52 * @return DeviceDetector
53 */
54 protected function getDeviceDetectionInfo($userAgent, array $clientHints = [])
55 {
56 $deviceDetector = new DeviceDetector($userAgent, ClientHints::factory($clientHints));
57 $deviceDetector->discardBotInformation();
58 $deviceDetector->setCache(StaticContainer::get('DeviceDetector\\Cache\\Cache'));
59 $deviceDetector->parse();
60 return $deviceDetector;
61 }
62 public static function clearInstancesCache()
63 {
64 self::$deviceDetectorInstances = [];
65 }
66 }
67