1<?php 2/** 3 * Matomo - free/libre analytics platform 4 * 5 * @link https://matomo.org 6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later 7 * 8 */ 9namespace Piwik\Plugins\DevicesDetection\Columns; 10 11use DeviceDetector\Parser\Client\Browser; 12use Piwik\Columns\DimensionSegmentFactory; 13use Piwik\Common; 14use Piwik\Metrics\Formatter; 15use Piwik\Plugin\Segment; 16use Piwik\Segment\SegmentsList; 17use Piwik\Tracker\Request; 18use Piwik\Tracker\Visitor; 19use Piwik\Tracker\Action; 20 21class BrowserName extends Base 22{ 23 protected $columnName = 'config_browser_name'; 24 protected $columnType = 'VARCHAR(40) NULL'; 25 protected $segmentName = 'browserCode'; 26 protected $nameSingular = 'DevicesDetection_ColumnBrowser'; 27 protected $namePlural = 'DevicesDetection_Browsers'; 28 protected $acceptValues = 'FF, IE, CH, SF, OP etc.'; 29 protected $type = self::TYPE_TEXT; 30 31 public function configureSegments(SegmentsList $segmentsList, DimensionSegmentFactory $dimensionSegmentFactory) 32 { 33 $segment = new Segment(); 34 $segment->setName('DevicesDetection_BrowserCode'); 35 $segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment)); 36 37 $segment = new Segment(); 38 $segment->setSegment('browserName'); 39 $segment->setName('DevicesDetection_ColumnBrowser'); 40 $segment->setAcceptedValues('FireFox, Internet Explorer, Chrome, Safari, Opera etc.'); 41 $segment->setSqlFilterValue(function ($val) { 42 $browsers = Browser::getAvailableBrowsers(); 43 $browsers = array_map(function($val) { 44 return mb_strtolower($val); 45 }, $browsers); 46 $result = array_search(mb_strtolower($val), $browsers); 47 48 if ($result === false) { 49 $result = 'UNK'; 50 } 51 52 return $result; 53 }); 54 $segment->setSuggestedValuesCallback(function ($idSite, $maxValuesToReturn) { 55 return array_values(Browser::getAvailableBrowsers() + ['Unknown']); 56 }); 57 $segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment)); 58 } 59 60 public function formatValue($value, $idSite, Formatter $formatter) 61 { 62 return \Piwik\Plugins\DevicesDetection\getBrowserName($value); 63 } 64 65 public function onAnyGoalConversion(Request $request, Visitor $visitor, $action) 66 { 67 return $visitor->getVisitorColumn($this->columnName); 68 } 69 70 /** 71 * @param Request $request 72 * @param Visitor $visitor 73 * @param Action|null $action 74 * @return mixed 75 */ 76 public function onNewVisit(Request $request, Visitor $visitor, $action) 77 { 78 $userAgent = $request->getUserAgent(); 79 $parser = $this->getUAParser($userAgent); 80 81 $aBrowserInfo = $parser->getClient(); 82 83 if (!empty($aBrowserInfo['short_name'])) { 84 85 return $aBrowserInfo['short_name']; 86 } else if (!empty($aBrowserInfo['name'])) { 87 88 return $aBrowserInfo['name']; 89 } 90 91 return 'UNK'; 92 } 93} 94