site-accueil-insa/matomo/plugins/DevicesDetection/VisitorDetails.php

187 lines
No EOL
5.7 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\DevicesDetection;
use Piwik\Piwik;
use Piwik\Plugins\Live\VisitorDetailsAbstract;
require_once PIWIK_INCLUDE_PATH . '/plugins/DevicesDetection/functions.php';
class VisitorDetails extends VisitorDetailsAbstract
{
public function extendVisitorDetails(&$visitor)
{
$visitor['deviceType'] = $this->getDeviceType();
$visitor['deviceTypeIcon'] = $this->getDeviceTypeIcon();
$visitor['deviceBrand'] = $this->getDeviceBrand();
$visitor['deviceModel'] = $this->getDeviceModel();
$visitor['operatingSystem'] = $this->getOperatingSystem();
$visitor['operatingSystemName'] = $this->getOperatingSystemName();
$visitor['operatingSystemIcon'] = $this->getOperatingSystemIcon();
$visitor['operatingSystemCode'] = $this->getOperatingSystemCode();
$visitor['operatingSystemVersion'] = $this->getOperatingSystemVersion();
$visitor['browserFamily'] = $this->getBrowserEngine();
$visitor['browserFamilyDescription'] = $this->getBrowserEngineDescription();
$visitor['browser'] = $this->getBrowser();
$visitor['browserName'] = $this->getBrowserName();
$visitor['browserIcon'] = $this->getBrowserIcon();
$visitor['browserCode'] = $this->getBrowserCode();
$visitor['browserVersion'] = $this->getBrowserVersion();
}
protected function getDeviceType()
{
return getDeviceTypeLabel($this->details['config_device_type']);
}
protected function getDeviceTypeIcon()
{
return getDeviceTypeLogo($this->details['config_device_type']);
}
protected function getDeviceBrand()
{
return getDeviceBrandLabel($this->details['config_device_brand']);
}
protected function getDeviceModel()
{
return getModelName($this->details['config_device_model']);
}
protected function getOperatingSystemCode()
{
return $this->details['config_os'];
}
protected function getOperatingSystem()
{
return getOsFullName($this->details['config_os'] . ";" . $this->details['config_os_version']);
}
protected function getOperatingSystemName()
{
return getOsFullName($this->details['config_os']);
}
protected function getOperatingSystemVersion()
{
return $this->details['config_os_version'];
}
protected function getOperatingSystemIcon()
{
return getOsLogo($this->details['config_os']);
}
protected function getBrowserEngineDescription()
{
return getBrowserEngineName($this->getBrowserEngine());
}
protected function getBrowserEngine()
{
return $this->details['config_browser_engine'];
}
protected function getBrowserCode()
{
return $this->details['config_browser_name'];
}
protected function getBrowserVersion()
{
return $this->details['config_browser_version'];
}
protected function getBrowser()
{
return getBrowserNameWithVersion($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
}
protected function getBrowserName()
{
return getBrowserName($this->details['config_browser_name']);
}
protected function getBrowserIcon()
{
return getBrowserLogo($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
}
private $devices = array();
public function initProfile($visits, &$profile)
{
$this->devices = array();
}
public function handleProfileVisit($visit, &$profile)
{
$deviceType = $visit->getColumn('deviceType');
$deviceTypeIcon = $visit->getColumn('deviceTypeIcon');
$deviceBrand = $visit->getColumn('deviceBrand');
$deviceModel = $visit->getColumn('deviceModel');
if ($deviceBrand == Piwik::translate('General_Unknown')) {
$deviceName = $deviceModel;
} else {
$deviceName = trim($deviceBrand . " " . $deviceModel);
}
if (!isset($this->devices[$deviceType])) {
$this->devices[$deviceType] = array(
'count' => 0,
'icon' => $deviceTypeIcon,
'devices' => array()
);
}
++$this->devices[$deviceType]['count'];
if (!isset($this->devices[$deviceType]['devices'][$deviceName])) {
$this->devices[$deviceType]['devices'][$deviceName] = 0;
}
++$this->devices[$deviceType]['devices'][$deviceName];
}
public function finalizeProfile($visits, &$profile)
{
$devices = $this->devices;
uksort($this->devices, function ($a, $b) use ($devices) {
$cmp = strcmp($devices[$b]['count'], $devices[$a]['count']);
if (0 == $cmp) {
$cmp = strcmp($a, $b);
}
return $cmp;
});
$devices = [];
foreach ($this->devices as $type => $devicesData) {
$typeDevices = [];
foreach ($devicesData['devices'] as $name => $count) {
$typeDevices[] = [
'name' => $name,
'count' => $count
];
}
$devices[] = [
'type' => $type,
'count' => $devicesData['count'],
'icon' => $devicesData['icon'],
'devices' => $typeDevices,
];
}
$profile['devices'] = $devices;
}
}