setName('DevicesDetection_OperatingSystemCode'); $segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment)); $segment = new Segment(); $segment->setSegment('operatingSystemName'); $segment->setName('DevicesDetection_ColumnOperatingSystem'); $segment->setAcceptedValues('Windows, Linux, Mac, Android, iOS etc.'); $segment->setNeedsMostFrequentValues(false); $segment->setSqlFilterValue(function ($val) { $oss = OperatingSystem::getAvailableOperatingSystems(); $oss = array_map(function($val) { return mb_strtolower($val); }, $oss); $result = array_search(mb_strtolower($val), $oss); if ($result === false) { $result = 'UNK'; } return $result; }); $segment->setSuggestedValuesCallback(function ($idSite, $maxValuesToReturn, $table) { return $this->sortStaticListByUsage(OperatingSystem::getAvailableOperatingSystems(), $table, 'operatingSystemCode', $maxValuesToReturn); }); $segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment)); } public function formatValue($value, $idSite, Formatter $formatter) { return \Piwik\Plugins\DevicesDetection\getOSFamilyFullName($value); } public function getName() { return Piwik::translate('DevicesDetection_OperatingSystemFamily'); } /** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { $userAgent = $request->getUserAgent(); $parser = $this->getUAParser($userAgent); if ($parser->isBot()) { $os = Settings::OS_BOT; } else { $os = $parser->getOS(); $os = $os['short_name'] ?? 'UNK'; } return $os; } }