Welcome to mirror list, hosted at ThFree Co, Russian Federation.

AddSummaryRow.php « Filter « DataTable « core - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 810d942668669a201d7aed968752a86b5617d4e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
/**
 * Piwik - Open source web analytics
 *
 * @link http://piwik.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 * @version $Id$
 *
 * @category Piwik
 * @package Piwik
 */

/**
 * Add a new row to the table containing a summary
 * of the rows from StartRowToSummarize to EndRowToSummarize.
 * It then deletes the rows from StartRowToSummarize to EndRowToSummarize.
 * The new row created has a label = 'other'
 *
 * This filter is useful to build a more compact view of a table,
 * keeping the first records unchanged.
 *
 * For example we use this for the pie chart, to build the last pie part
 * which is the sum of all the remaining data after the top 5 data.
 * This row is assigned a label of 'Others'.
 *
 * @package Piwik
 * @subpackage Piwik_DataTable
 */
class Piwik_DataTable_Filter_AddSummaryRow extends Piwik_DataTable_Filter
{
	/**
	 * Creates a new filter and set all required parameters
	 *
	 * @param Piwik_DataTable  $table
	 * @param int              $startRowToSummarize
	 * @param int              $labelSummaryRow
	 * @param null             $columnToSortByBeforeTruncating
	 * @param bool             $deleteRows
	 */
	public function __construct($table,
								$startRowToSummarize,
								$labelSummaryRow = Piwik_DataTable::LABEL_SUMMARY_ROW,
								$columnToSortByBeforeTruncating = null,
								$deleteRows = true )
	{
		parent::__construct($table);
		$this->startRowToSummarize = $startRowToSummarize;
		$this->labelSummaryRow = $labelSummaryRow;
		$this->columnToSortByBeforeTruncating = $columnToSortByBeforeTruncating;
		$this->deleteRows = $deleteRows;
	}

	/**
	 * Adds a summary row to the given data table
	 *
	 * @param Piwik_DataTable  $table
	 */
	public function filter($table)
	{
		if($table->getRowsCount() <= $this->startRowToSummarize + 1)
		{
			return;
		}
		$table->filter('Sort', 
							array( $this->columnToSortByBeforeTruncating, 'desc'));
		
		$rows = $table->getRows();
		$count = $table->getRowsCount();
		$newRow = new Piwik_DataTable_Row();
		for($i = $this->startRowToSummarize; $i < $count; $i++)
		{
			if(!isset($rows[$i]))
			{
				// case when the last row is a summary row, it is not indexed by $cout but by Piwik_DataTable::ID_SUMMARY_ROW
				$summaryRow = $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW);
				
				//FIXME: I'm not sure why it could return false, but it was reported in: http://forum.piwik.org/read.php?2,89324,page=1#msg-89442
				if($summaryRow)
				{
					$newRow->sumRow($summaryRow, $enableCopyMetadata = false);
				}
			}
			else
			{
				$newRow->sumRow($rows[$i], $enableCopyMetadata = false);
			}
		}
		
		$newRow->setColumns(array('label' => $this->labelSummaryRow) + $newRow->getColumns());
		if ($this->deleteRows)
		{
			$table->filter('Limit', array(0, $this->startRowToSummarize));
		}
		$table->addSummaryRow($newRow);
		unset($rows);
	}
}