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\DataTable\Filter; 10 11use Piwik\DataTable\BaseFilter; 12use Piwik\DataTable; 13 14/** 15 * Converts for each row of a {@link DataTable} a segmentValue to a segment (expression). The name of the segment 16 * is automatically detected based on the given report. 17 * 18 * **Basic usage example** 19 * 20 * $dataTable->filter('AddSegmentBySegmentValue', array($reportInstance)); 21 * 22 * @api 23 */ 24class AddSegmentBySegmentValue extends BaseFilter 25{ 26 /** 27 * @var \Piwik\Plugin\Report 28 */ 29 private $report; 30 31 /** 32 * @param DataTable $table 33 * @param $report 34 */ 35 public function __construct($table, $report) 36 { 37 parent::__construct($table); 38 $this->report = $report; 39 } 40 41 /** 42 * See {@link AddSegmentBySegmentValue}. 43 * 44 * @param DataTable $table 45 * @return int The number of deleted rows. 46 */ 47 public function filter($table) 48 { 49 if (empty($this->report) || !$table->getRowsCount()) { 50 return; 51 } 52 53 $dimension = $this->report->getDimension(); 54 55 if (empty($dimension)) { 56 return; 57 } 58 59 $segments = $dimension->getSegments(); 60 61 if (empty($segments)) { 62 return; 63 } 64 65 $this->enableRecursive(true); 66 67 /** @var \Piwik\Plugin\Segment $segment */ 68 $segment = reset($segments); 69 $segmentName = $segment->getSegment(); 70 71 foreach ($table->getRows() as $row) { 72 $value = $row->getMetadata('segmentValue'); 73 $filter = $row->getMetadata('segment'); 74 75 if ($value !== false && $filter === false) { 76 $row->setMetadata('segment', sprintf('%s==%s', $segmentName, urlencode($value))); 77 } 78 79 $this->filterSubTable($row); 80 } 81 } 82} 83