From d3324bf200efb8d6a3d62607faeceae2d653d14a Mon Sep 17 00:00:00 2001 From: mattpiwik <matthieu.aubry@gmail.com> Date: Thu, 31 May 2012 00:16:14 +0000 Subject: [PATCH] Refs #534, Refs #3158 * Displaying logos when comparing multiple rows. It looks very nice for example comparing Firefox VS Chrome VS IE Vs Safari :) git-svn-id: http://dev.piwik.org/svn/trunk@6410 59fd770c-687e-43c8-a1e3-f5a4ff64c105 --- core/DataTable/Renderer/Html.php | 8 ++++ plugins/API/API.php | 30 ++++++++++++--- .../DataTableRowAction/RowEvolution.php | 12 ++++-- .../templates/popover_multirowevolution.tpl | 4 +- tests/integration/RowEvolution.test.php | 3 +- ...sHierarchical__API.getRowEvolution_day.xml | 37 +++++++++++++++++++ ...on_pageTitles__API.getRowEvolution_day.xml | 1 - ...n_pageTitles__API.getRowEvolution_week.xml | 1 - ...on_pageUrls__API.getRowEvolution_range.xml | 1 - ...ion_referrer1__API.getRowEvolution_day.xml | 13 +++---- ...ion_referrer2__API.getRowEvolution_day.xml | 1 - 11 files changed, 87 insertions(+), 24 deletions(-) diff --git a/core/DataTable/Renderer/Html.php b/core/DataTable/Renderer/Html.php index 176cecde77..c9ec98f3e5 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 69673ee3f0..76e56137a1 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 0a2605acf1..d5d4b73ccd 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 ae0895606a..c060f96d8a 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 ce81a5d592..76b0679431 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 633149983b..4776f9e408 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 103d1c42e4..2994e894c3 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 020f761a74..82fcb2b8a9 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 a58a52c7c6..3e5ef0cc3c 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 0c2b0237cc..6485cc5054 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 ad3f2db61a..25489ab443 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" /> -- GitLab