diff --git a/core/DataTable/Renderer/Html.php b/core/DataTable/Renderer/Html.php index 176cecde7761f1c2b9dc7d7b28852725f49076c6..c9ec98f3e59a056e7a012b92cf70f1890450f982 100644 --- a/core/DataTable/Renderer/Html.php +++ b/core/DataTable/Renderer/Html.php @@ -34,6 +34,14 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer $this->tableId = str_replace('.', '_', $id); } + /** + * Output HTTP Content-Type header + */ + protected function renderHeader() + { + @header('Content-Type: text/html; charset=utf-8'); + } + /** * Computes the dataTable output and returns the string/binary * diff --git a/plugins/API/API.php b/plugins/API/API.php index 69673ee3f0d8054eb2aca9f06ed5f0e46a1f3634..76e56137a18e88d7c66a657385ae44cc6d5a5cb8 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -1067,15 +1067,17 @@ class Piwik_API_API $labels = explode(',', $label); $labels = array_map('urldecode', $labels); + $labels = array_unique($labels); if (count($labels) > 1) { - return $this->getMultiRowEvolution($idSite, $period, $date, $apiModule, $apiAction, $labels, $segment, $column, $language); + $data = $this->getMultiRowEvolution($idSite, $period, $date, $apiModule, $apiAction, $labels, $segment, $column, $language); } else { - return $this->getSingleRowEvolution($idSite, $period, $date, $apiModule, $apiAction, $labels[0], $segment, $language); + $data = $this->getSingleRowEvolution($idSite, $period, $date, $apiModule, $apiAction, $labels[0], $segment, $language); } + return $data; } /** @@ -1139,12 +1141,15 @@ class Piwik_API_API $actualLabel = str_replace(Piwik_API_DataTableManipulator_LabelFilter::SEPARATOR_RECURSIVE_LABEL, ' - ', $label); } - return array( + $return = array( 'label' => $actualLabel, - 'logo' => empty($logo) ? '' : $logo, 'reportData' => $dataTable, 'metadata' => $metadata ); + if(!empty($logo)){ + $return['logo'] = $logo; + } + return $return; } /** @@ -1249,7 +1254,12 @@ class Piwik_API_API foreach ($metadata['metrics'] as $metric => $name) { $metricsResult[$metric] = array('name' => $name); + + if(!empty($metadata['logos'][$metric])) { + $metricsResult[$metric]['logo'] = $metadata['logos'][$metric]; + } } + unset($metadata['logos']); $subDataTables = $dataTable->getArray(); $firstDataTable = current($subDataTables); @@ -1317,7 +1327,7 @@ class Piwik_API_API /** Get row evolution for a multiple labels */ private function getMultiRowEvolution($idSite, $period, $date, $apiModule, $apiAction, $labels, $segment, $column, $language=false) { - $actualLabels = array(); + $actualLabels = $logos = array(); $metadata = $this->getRowEvolutionMetaData($idSite, $period, $date, $apiModule, $apiAction, $language); @@ -1334,6 +1344,7 @@ class Piwik_API_API foreach ($labels as $labelIndex => $label) { $dataTable = $this->loadRowEvolutionDataFromAPI($idSite, $period, $date, $apiModule, $apiAction, $label, $segment); + $dataTablesPerLabel[$labelIndex] = $dataTable->getArray(); if (!$dataTableMetadata) { @@ -1367,6 +1378,8 @@ class Piwik_API_API $urlFound = true; } + // Forward the logo path to display logos in multi rows comparison + $logos[$labelIndex] = $firstRow->getMetadata('logo'); break; } } @@ -1420,7 +1433,12 @@ class Piwik_API_API $metadata['metrics'] = array(); foreach ($actualLabels as $labelIndex => $label) { $label .= ' ('.$metadata['columns'][$column].')'; - $metadata['metrics'][$column.'_'.$labelIndex] = $label; + $metricName = $column.'_'.$labelIndex; + $metadata['metrics'][$metricName] = $label; + + if(!empty($logos[$labelIndex])) { + $metadata['logos'][$metricName] = $logos[$labelIndex]; + } } $this->enhanceRowEvolutionMetaData($metadata, $dataTableMulti); diff --git a/plugins/CoreHome/DataTableRowAction/RowEvolution.php b/plugins/CoreHome/DataTableRowAction/RowEvolution.php index 0a2605acf1ec533e97a8987b3c70f70108a7b7bd..d5d4b73ccdfe3442670e37df4d2efd8604589bcc 100644 --- a/plugins/CoreHome/DataTableRowAction/RowEvolution.php +++ b/plugins/CoreHome/DataTableRowAction/RowEvolution.php @@ -265,14 +265,18 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution } $color = $colors[ $i % count($colors) ]; - - $metrics[] = array( + $newMetric = array( 'label' => $metricData['name'], 'color' => $color, 'details' => $details, - 'sparkline' => $this->getSparkline($metric, $controller) + 'sparkline' => $this->getSparkline($metric, $controller), ); - + // Multi Rows, each metric can be for a particular row and display an icon + if(!empty($metricData['logo'])) + { + $newMetric['logo'] = $metricData['logo']; + } + $metrics[] = $newMetric; $i++; } diff --git a/plugins/CoreHome/templates/popover_multirowevolution.tpl b/plugins/CoreHome/templates/popover_multirowevolution.tpl index ae0895606a0f489f03b193536b5c44d2572926a3..c060f96d8ab6d862774cf75c498fb7a48348db6b 100644 --- a/plugins/CoreHome/templates/popover_multirowevolution.tpl +++ b/plugins/CoreHome/templates/popover_multirowevolution.tpl @@ -2,7 +2,7 @@ <div class="popover-title">{'RowEvolution_MultiRowEvolutionTitle'|translate|escape:'html'}</div> <div class="graph"> {$graph} - </div> + </div> <div class="metrics-container"> <h2>{$availableRecordsText|translate}</h2> <table class="metrics" border="0" cellpadding="0" cellspacing="0"> @@ -12,7 +12,7 @@ {$metric.sparkline} </td> <td class="text"> - <span style="color:{$metric.color}">{$metric.label|escape:'html'}</span><br /> + {logoHtml metadata=$metric alt=""} <span style="color:{$metric.color}">{$metric.label|escape:'html'}</span><br /> <span class="details">{$metric.details}</span> </td> </tr> diff --git a/tests/integration/RowEvolution.test.php b/tests/integration/RowEvolution.test.php index ce81a5d59214fb99c7c5e29031e374248280676e..76b06794319a257512d67a61a5afa5fbabe18fef 100644 --- a/tests/integration/RowEvolution.test.php +++ b/tests/integration/RowEvolution.test.php @@ -59,7 +59,8 @@ class Test_Piwik_Integration_RowEvolution extends Test_Integration_Facade $keywords = "Google>".urlencode(strtolower($this->keywords[0])) .',Google>'.urlencode(strtolower($this->keywords[1])) .',Google>'.urlencode(strtolower($this->keywords[2])); - $config['otherRequestParameters']['label'] = urlencode($keywords); + // Test multiple labels search engines, Google should also have a 'logo' entry + $config['otherRequestParameters']['label'] = urlencode($keywords) . ",Google"; $return[] = array('API.getRowEvolution', $config); // Actions > Pages titles, standard label diff --git a/tests/integration/expected/test_RowEvolution_LabelReservedCharactersHierarchical__API.getRowEvolution_day.xml b/tests/integration/expected/test_RowEvolution_LabelReservedCharactersHierarchical__API.getRowEvolution_day.xml index 633149983b8b156287ed72d46f11ad41bb380000..4776f9e4083152b585b10417efd1faab0d3dbf51 100644 --- a/tests/integration/expected/test_RowEvolution_LabelReservedCharactersHierarchical__API.getRowEvolution_day.xml +++ b/tests/integration/expected/test_RowEvolution_LabelReservedCharactersHierarchical__API.getRowEvolution_day.xml @@ -7,6 +7,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-07"> @@ -14,6 +15,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-08"> @@ -21,6 +23,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-09"> @@ -28,6 +31,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-10"> @@ -35,6 +39,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-11"> @@ -42,6 +47,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-12"> @@ -49,6 +55,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-13"> @@ -56,6 +63,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-14"> @@ -63,6 +71,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-15"> @@ -70,6 +79,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-16"> @@ -77,6 +87,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-17"> @@ -84,6 +95,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-18"> @@ -91,6 +103,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-19"> @@ -98,6 +111,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-20"> @@ -105,6 +119,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-21"> @@ -112,6 +127,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-22"> @@ -119,6 +135,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-23"> @@ -126,6 +143,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-24"> @@ -133,6 +151,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-25"> @@ -140,6 +159,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-26"> @@ -147,6 +167,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-27"> @@ -154,6 +175,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-02-28"> @@ -161,6 +183,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-03-01"> @@ -168,6 +191,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-03-02"> @@ -175,6 +199,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-03-03"> @@ -182,6 +207,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-03-04"> @@ -189,6 +215,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>1</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-03-05"> @@ -196,6 +223,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>1</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> <result date="2010-03-06"> @@ -203,6 +231,7 @@ <nb_visits_0>0</nb_visits_0> <nb_visits_1>0</nb_visits_1> <nb_visits_2>0</nb_visits_2> + <nb_visits_3>1</nb_visits_3> </row> </result> </reportData> @@ -225,6 +254,14 @@ <max>1</max> </nb_visits_2> + <nb_visits_3> + <name>Google (Visits)</name> + <logo>plugins/Referers/images/searchEngines/google.com.png</logo> + <min>1</min> + <max>1</max> + <change>0%</change> + + </nb_visits_3> </metrics> <dimension>Search Engine</dimension> diff --git a/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_day.xml b/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_day.xml index 103d1c42e494507914d23d1fea66bcf05c230261..2994e894c3c726c0f697f0a37040a627e5d23da9 100644 --- a/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_day.xml +++ b/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_day.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <result> <label>incredible title 0</label> - <logo></logo> <reportData> <result date="2010-02-06" /> <result date="2010-02-07"> diff --git a/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_week.xml b/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_week.xml index 020f761a74b28c041adac56ed5bc556af4428a0e..82fcb2b8a93937ade7f81e6f54c208865ceb8fa6 100644 --- a/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_week.xml +++ b/tests/integration/expected/test_RowEvolution_pageTitles__API.getRowEvolution_week.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <result> <label>incredible title 0</label> - <logo></logo> <reportData> <result date="From 2010-02-01 to 2010-02-07"> <row> diff --git a/tests/integration/expected/test_RowEvolution_pageUrls__API.getRowEvolution_range.xml b/tests/integration/expected/test_RowEvolution_pageUrls__API.getRowEvolution_range.xml index a58a52c7c652addf449e9ab84af80d18812bdf4e..3e5ef0cc3cdc5e94fe4a0872da90815d344cb3e7 100644 --- a/tests/integration/expected/test_RowEvolution_pageUrls__API.getRowEvolution_range.xml +++ b/tests/integration/expected/test_RowEvolution_pageUrls__API.getRowEvolution_range.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <result> <label>example.org/my/dir/page3?foo=bar&baz=bar</label> - <logo></logo> <reportData> <result date="2010-03-01" /> <result date="2010-03-02" /> diff --git a/tests/integration/expected/test_RowEvolution_referrer1__API.getRowEvolution_day.xml b/tests/integration/expected/test_RowEvolution_referrer1__API.getRowEvolution_day.xml index 0c2b0237cc4a98843e01c659d48e14add30ab78e..6485cc50540a693da98d1eca288ca8a66aec4c52 100644 --- a/tests/integration/expected/test_RowEvolution_referrer1__API.getRowEvolution_day.xml +++ b/tests/integration/expected/test_RowEvolution_referrer1__API.getRowEvolution_day.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <result> <label>www.referrer2.com</label> - <logo></logo> <reportData> <result date="2010-02-06" /> <result date="2010-02-07"> @@ -12,7 +11,7 @@ <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>0</avg_time_on_site> <bounce_rate>100%</bounce_rate> - <idsubdatatable>47</idsubdatatable> + </row> </result> <result date="2010-02-08" /> @@ -27,7 +26,7 @@ <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>0</avg_time_on_site> <bounce_rate>100%</bounce_rate> - <idsubdatatable>217</idsubdatatable> + </row> </result> <result date="2010-02-13" /> @@ -42,7 +41,7 @@ <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>0</avg_time_on_site> <bounce_rate>100%</bounce_rate> - <idsubdatatable>387</idsubdatatable> + </row> </result> <result date="2010-02-18" /> @@ -57,7 +56,7 @@ <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>0</avg_time_on_site> <bounce_rate>100%</bounce_rate> - <idsubdatatable>557</idsubdatatable> + </row> </result> <result date="2010-02-23" /> @@ -72,7 +71,7 @@ <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>0</avg_time_on_site> <bounce_rate>100%</bounce_rate> - <idsubdatatable>727</idsubdatatable> + </row> </result> <result date="2010-02-28" /> @@ -87,7 +86,7 @@ <nb_actions_per_visit>1</nb_actions_per_visit> <avg_time_on_site>0</avg_time_on_site> <bounce_rate>100%</bounce_rate> - <idsubdatatable>897</idsubdatatable> + </row> </result> <result date="2010-03-05" /> diff --git a/tests/integration/expected/test_RowEvolution_referrer2__API.getRowEvolution_day.xml b/tests/integration/expected/test_RowEvolution_referrer2__API.getRowEvolution_day.xml index ad3f2db61ab714870df0c83330d73f89241760da..25489ab443d975deab5547b9385c482b25775888 100644 --- a/tests/integration/expected/test_RowEvolution_referrer2__API.getRowEvolution_day.xml +++ b/tests/integration/expected/test_RowEvolution_referrer2__API.getRowEvolution_day.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <result> <label>referrer0.com/theReferrerPage1.html</label> - <logo></logo> <reportData> <result date="2010-02-06" /> <result date="2010-02-07" />