Skip to content
Extraits de code Groupes Projets
Valider 17b6bbce rédigé par benakamoorthi's avatar benakamoorthi
Parcourir les fichiers

Fixes #3055, fixed bug with CSV Renderer where column order was not kept...

Fixes #3055, fixed bug with CSV Renderer where column order was not kept constant when rendering DataTable_Arrays. Also modified OneVisitorTwoVisits test by adding more outlink actions and one CSV test.


git-svn-id: http://dev.piwik.org/svn/trunk@6276 59fd770c-687e-43c8-a1e3-f5a4ff64c105
parent 5f8c8ef8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 98 ajouts et 63 suppressions
......@@ -93,25 +93,16 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
$this->separator = $separator;
}
protected function renderTable($table)
protected function renderTable($table, &$allColumns = array() )
{
if($table instanceof Piwik_DataTable_Array)
{
$str = $header = '';
$keyName = $table->getKeyName();
if ($this->translateColumnNames)
{
$keyName = $this->translateColumnName($keyName);
}
$prefixColumns = $keyName . $this->separator;
$str = '';
foreach($table->getArray() as $currentLinePrefix => $dataTable)
{
$returned = explode("\n",$this->renderTable($dataTable));
// get the columns names
if(empty($header))
{
$header = $returned[0];
}
$returned = explode("\n",$this->renderTable($dataTable, $allColumns));
// get rid of the columns names
$returned = array_slice($returned,1);
// case empty datatable we dont print anything in the CSV export
......@@ -125,19 +116,21 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
$str .= "\n" . implode("\n", $returned);
}
}
if(!empty($header))
{
$str = $prefixColumns . $header . $str;
}
// prepend table key to column list
$allColumns = array_merge(array($table->getKeyName() => true), $allColumns);
// add header to output string
$str = $this->getHeaderLine(array_keys($allColumns)).$str;
}
else
{
$str = $this->renderDataTable($table);
$str = $this->renderDataTable($table, $allColumns);
}
return $str;
}
protected function renderDataTable( $table )
protected function renderDataTable( $table, &$allColumns = array() )
{
if($table instanceof Piwik_DataTable_Simple)
{
......@@ -147,13 +140,16 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
$columnNameToValue = $row->getColumns();
if(count($columnNameToValue) == 1)
{
// simple tables should only have one column, the value
$allColumns['value'] = true;
$value = array_values($columnNameToValue);
$str = 'value' . $this->lineEnd . $this->formatValue($value[0]);
return $str;
}
}
}
$csv = $allColumns = array();
$csv = array();
foreach($table->getRows() as $row)
{
$csvRow = array();
......@@ -256,13 +252,7 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
else
{
// render row names
$keys = array_keys($allColumns);
if ($this->translateColumnNames)
{
$keys = $this->translateColumnNames($keys);
}
$str .= implode($this->separator, $keys);
$str .= $this->lineEnd;
$str .= $this->getHeaderLine(array_keys($allColumns)).$this->lineEnd;
}
// we render the CSV
......@@ -280,6 +270,21 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
$str = substr($str, 0, -strlen($this->lineEnd));
return $str;
}
/**
* Returns the CSV header line for a set of metrics. Will translate columns if desired.
*
* @param array $columnMetrics
* @return array
*/
private function getHeaderLine( $columnMetrics )
{
if ($this->translateColumnNames)
{
$columnMetrics = $this->translateColumnNames($columnMetrics);
}
return implode($this->separator, $columnMetrics);
}
protected function formatValue($value)
{
......
......@@ -10,7 +10,7 @@ require_once PIWIK_INCLUDE_PATH . '/tests/integration/Integration.php';
* This use case covers many simple tracking features.
* - Tracking Goal by manual trigger, and URL matching, with custom revenue
* - Tracking the same Goal twice only records it once
* - Tracks 2 page views, a click and a file download
* - Tracks 4 page views: 3 clicks and a file download
* - URLs parameters exclude is tested
* - In a returning visit, tracks a Goal conversion
* URL matching, with custom referer and keyword
......@@ -24,8 +24,16 @@ class Test_Piwik_Integration_OneVisitorTwoVisits extends Test_Integration_Facade
public function getApiToTest()
{
$enExtraParam = array('expanded' => 1, 'flat' => 1, 'include_aggregate_rows' => 0, 'translateColumnNames' => 1);
return array(
array('all', array('idSite' => $this->idSite, 'date' => $this->dateTime)),
// test API.get (for bug that incorrectly reorders columns of CSV output)
// note: bug only affects rows after first
array('API.get', array('idSite' => $this->idSite, 'date' => '2009-10-01', 'format' => 'csv',
'periods' => array('month'), 'setDateLastN' => true,
'otherRequestParameters' => $enExtraParam, 'language' => 'en',
'testSuffix' => '_csv')),
);
}
......@@ -84,6 +92,12 @@ class Test_Piwik_Integration_OneVisitorTwoVisits extends Test_Integration_Facade
$t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
$this->checkResponse($t->doTrackAction( 'http://piwik.org/path/again/latest.zip', 'download' ));
// Click on two more external links, one the same as before (5th & 6th actions)
$t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.22)->getDateTime());
$this->checkResponse($t->doTrackAction('http://outlinks.org/other_outlink', 'link'));
$t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.25)->getDateTime());
$this->checkResponse($t->doTrackAction('http://dev.piwik.org/svn', 'link'));
// Create Goal 1: Triggered by JS, after 18 minutes
$idGoal = Piwik_Goals_API::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
$t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
......
......@@ -5,7 +5,7 @@
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
<sum_time_spent>180</sum_time_spent>
<sum_time_spent>72</sum_time_spent>
<url>http://piwik.org/path/again/latest.zip</url>
</row>
</result>
\ No newline at end of file
......@@ -4,14 +4,14 @@
<label>piwik.org</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<sum_time_spent>180</sum_time_spent>
<sum_time_spent>72</sum_time_spent>
<subtable>
<row>
<label>/path/again/latest.zip</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
<sum_time_spent>180</sum_time_spent>
<sum_time_spent>72</sum_time_spent>
<url>http://piwik.org/path/again/latest.zip</url>
</row>
</subtable>
......
......@@ -32,7 +32,7 @@
<sum_time_spent>180</sum_time_spent>
<entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
<entry_nb_visits>1</entry_nb_visits>
<entry_nb_actions>5</entry_nb_actions>
<entry_nb_actions>7</entry_nb_actions>
<entry_sum_visit_length>1621</entry_sum_visit_length>
<entry_bounce_count>0</entry_bounce_count>
<avg_time_on_page>180</avg_time_on_page>
......
......@@ -32,7 +32,7 @@
<sum_time_spent>180</sum_time_spent>
<entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
<entry_nb_visits>1</entry_nb_visits>
<entry_nb_actions>5</entry_nb_actions>
<entry_nb_actions>7</entry_nb_actions>
<entry_sum_visit_length>1621</entry_sum_visit_length>
<entry_bounce_count>0</entry_bounce_count>
<avg_time_on_page>180</avg_time_on_page>
......
......@@ -4,8 +4,8 @@
<label>/svn</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
<sum_time_spent>360</sum_time_spent>
<nb_hits>2</nb_hits>
<sum_time_spent>540</sum_time_spent>
<url>http://dev.piwik.org/svn</url>
</row>
</result>
\ No newline at end of file
......@@ -3,17 +3,33 @@
<row>
<label>dev.piwik.org</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<sum_time_spent>360</sum_time_spent>
<nb_hits>2</nb_hits>
<sum_time_spent>540</sum_time_spent>
<subtable>
<row>
<label>/svn</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
<sum_time_spent>360</sum_time_spent>
<nb_hits>2</nb_hits>
<sum_time_spent>540</sum_time_spent>
<url>http://dev.piwik.org/svn</url>
</row>
</subtable>
</row>
<row>
<label>outlinks.org</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<sum_time_spent>108</sum_time_spent>
<subtable>
<row>
<label>/other_outlink</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
<sum_time_spent>108</sum_time_spent>
<url>http://outlinks.org/other_outlink</url>
</row>
</subtable>
</row>
</result>
\ No newline at end of file
......@@ -41,7 +41,7 @@
<sum_time_spent>180</sum_time_spent>
<entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
<entry_nb_visits>1</entry_nb_visits>
<entry_nb_actions>5</entry_nb_actions>
<entry_nb_actions>7</entry_nb_actions>
<entry_sum_visit_length>1621</entry_sum_visit_length>
<entry_bounce_count>0</entry_bounce_count>
<avg_time_on_page>180</avg_time_on_page>
......
......@@ -32,7 +32,7 @@
<sum_time_spent>180</sum_time_spent>
<entry_nb_uniq_visitors>1</entry_nb_uniq_visitors>
<entry_nb_visits>1</entry_nb_visits>
<entry_nb_actions>5</entry_nb_actions>
<entry_nb_actions>7</entry_nb_actions>
<entry_sum_visit_length>1621</entry_sum_visit_length>
<entry_bounce_count>0</entry_bounce_count>
<avg_time_on_page>180</avg_time_on_page>
......
......@@ -4,6 +4,6 @@
<nb_uniq_pageviews>4</nb_uniq_pageviews>
<nb_downloads>1</nb_downloads>
<nb_uniq_downloads>1</nb_uniq_downloads>
<nb_outlinks>1</nb_outlinks>
<nb_uniq_outlinks>1</nb_uniq_outlinks>
<nb_outlinks>3</nb_outlinks>
<nb_uniq_outlinks>2</nb_uniq_outlinks>
</result>
\ No newline at end of file
......@@ -3,7 +3,7 @@
<row>
<label>new name</label>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<nb_actions>8</nb_actions>
<revenue>43</revenue>
<visits_evolution>100%</visits_evolution>
<actions_evolution>100%</actions_evolution>
......
......@@ -4,8 +4,8 @@
<label>Unknown</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>5</max_actions>
<nb_actions>8</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>2</nb_visits_converted>
......
......@@ -22,8 +22,8 @@
<label>Websites</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>5</max_actions>
<nb_actions>7</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>0</bounce_count>
<goals>
......
......@@ -4,8 +4,8 @@
<label>referer.com</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>5</max_actions>
<nb_actions>7</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>0</bounce_count>
<goals>
......@@ -22,8 +22,8 @@
<label>http://referer.com/page.htm?param=valuewith some spaces</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>5</max_actions>
<nb_actions>7</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>0</bounce_count>
<nb_visits_converted>1</nb_visits_converted>
......
......@@ -4,8 +4,8 @@
<label>Europe</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>5</max_actions>
<nb_actions>8</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
......
......@@ -4,8 +4,8 @@
<label>France</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>5</max_actions>
<nb_actions>8</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
......
......@@ -4,8 +4,8 @@
<label>Gecko (Firefox)</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>5</max_actions>
<nb_actions>8</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>2</nb_visits_converted>
......
......@@ -4,8 +4,8 @@
<label>Firefox 3.6</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>5</max_actions>
<nb_actions>8</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>2</nb_visits_converted>
......
......@@ -4,8 +4,8 @@
<label>Windows XP / Firefox / 1024x768</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>5</max_actions>
<nb_actions>8</nb_actions>
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>2</nb_visits_converted>
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter