From dfa2d0bcbc4a7d42198260a7b1c90ff63d9934d2 Mon Sep 17 00:00:00 2001 From: BeezyT <timo@ezdesign.de> Date: Mon, 26 Mar 2012 14:55:27 +0000 Subject: [PATCH] refs #534 first working version of row evolution! * include trigger in datatable_cell * new methods in API_API: getUnit and isLowerValueBetter * lower bounce / exit rate is green in the popover * minor fixes git-svn-id: http://dev.piwik.org/svn/trunk@6120 59fd770c-687e-43c8-a1e3-f5a4ff64c105 --- core/ViewDataTable/GenerateGraphData.php | 21 ++------- lang/en.php | 3 +- plugins/API/API.php | 42 ++++++++++++++++++ .../DataTableRowAction/RowEvolution.php | 20 +++++---- plugins/CoreHome/templates/datatable.js | 2 +- plugins/CoreHome/templates/datatable_cell.tpl | 8 ++++ plugins/CoreHome/templates/jqplot.css | 4 +- .../MultiSites/images/arrow_down_green.png | Bin 0 -> 1532 bytes plugins/MultiSites/images/arrow_up_red.png | Bin 0 -> 1528 bytes 9 files changed, 71 insertions(+), 29 deletions(-) create mode 100644 plugins/MultiSites/images/arrow_down_green.png create mode 100644 plugins/MultiSites/images/arrow_up_red.png diff --git a/core/ViewDataTable/GenerateGraphData.php b/core/ViewDataTable/GenerateGraphData.php index 094225869c..55400aa3f7 100644 --- a/core/ViewDataTable/GenerateGraphData.php +++ b/core/ViewDataTable/GenerateGraphData.php @@ -137,7 +137,7 @@ abstract class Piwik_ViewDataTable_GenerateGraphData extends Piwik_ViewDataTable { // derive units from column names $idSite = Piwik_Common::getRequestVar('idSite', null, 'int'); - $units = $this->guessUnitFromRequestedColumnNames($this->getColumnsToDisplay(), $idSite); + $units = $this->deriveUnitsFromRequestedColumnNames($this->getColumnsToDisplay(), $idSite); if(!empty($this->yAxisUnit)) { // force unit to the value set via $this->setAxisYUnit() @@ -150,26 +150,13 @@ abstract class Piwik_ViewDataTable_GenerateGraphData extends Piwik_ViewDataTable return $units; } - protected function guessUnitFromRequestedColumnNames($requestedColumnNames, $idSite) + protected function deriveUnitsFromRequestedColumnNames($requestedColumnNames, $idSite) { - $nameToUnit = array( - '_rate' => '%', - 'revenue' => Piwik::getCurrency($idSite), - '_time_' => 's' - ); - $units = array(); foreach($requestedColumnNames as $columnName) { - $units[$columnName] = false; - foreach($nameToUnit as $pattern => $type) - { - if(strpos($columnName, $pattern) !== false) - { - $units[$columnName] = $type; - break; - } - } + $derivedUnit = Piwik_API_API::getUnit($columnName, $idSite); + $units[$columnName] = empty($derivedUnit) ? false : $derivedUnit; } return $units; } diff --git a/lang/en.php b/lang/en.php index aa1111304a..60a4ca59dd 100644 --- a/lang/en.php +++ b/lang/en.php @@ -1528,7 +1528,8 @@ Note: this token will expire in 24 hrs.', 'PDFReports_ReportIncludeNWebsites' => 'The report will include main metrics for all websites that have at least one visit (from the %s websites currently available).', 'ImageGraph_PluginDescription' => 'Generate beautiful static PNG Graph images for any Piwik report.', 'ImageGraph_ColumnOrdinateMissing' => 'The column \'%s\' was not found in this report.', - 'RowEvolution_AvailableMetrics' => 'Metrics for', + 'RowEvolution_MetricsFor' => 'Metrics for %s', + 'RowEvolution_AvailableMetrics' => 'Available metrics', 'RowEvolution_MetricDetailsText' => 'between %s and %s, %s over the period', 'RowEvolution_Documentation' => 'Click the metrics to display them in the large evolution graph. Use shift-click to display multiple metrics at once.', 'RowEvolution_CompareRows' => 'Compare records', diff --git a/plugins/API/API.php b/plugins/API/API.php index fd635a9768..10bac75905 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -91,6 +91,48 @@ class Piwik_API_API return self::$instance; } + /** + * Derive the unit name from a column name + */ + static public function getUnit($columnName, $idSite) + { + $nameToUnit = array( + '_rate' => '%', + 'revenue' => Piwik::getCurrency($idSite), + '_time_' => 's' + ); + + foreach ($nameToUnit as $pattern => $type) + { + if (strpos($columnName, $pattern) !== false) + { + return $type; + } + } + + return ''; + } + + /** + * Is a lower value for a given column better? + */ + static public function isLowerValueBetter($columnName) + { + $lowerIsBetterPatterns = array( + 'bounce', 'exit' + ); + + foreach ($lowerIsBetterPatterns as $pattern) + { + if (strpos($columnName, $pattern) !== false) + { + return true; + } + } + + return false; + } + /** * Default translations for many core metrics. * This is used for exports with translated labels. The exports contain columns that diff --git a/plugins/CoreHome/DataTableRowAction/RowEvolution.php b/plugins/CoreHome/DataTableRowAction/RowEvolution.php index 1854c8fe21..e2a60cbb11 100644 --- a/plugins/CoreHome/DataTableRowAction/RowEvolution.php +++ b/plugins/CoreHome/DataTableRowAction/RowEvolution.php @@ -120,7 +120,7 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution { $icon = $this->rowIcon ? '<img src="'.$this->rowIcon.'" alt="">' : ''; $rowLabel = str_replace('/', '<wbr>/', str_replace('&', '<wbr>&', $this->rowLabel)); - $metricsText .= ' '.$this->dimension.': '.$icon.' '.$rowLabel; + $metricsText = sprintf(Piwik_Translate('RowEvolution_MetricsFor'), $this->dimension.': '.$icon.' '.$rowLabel); $popoverTitle = $icon.' '.$rowLabel; } @@ -219,25 +219,25 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution $min = $metricData['min']; $change = $metricData['change']; - if ($max == 0 && !($this instanceof Piwik_CoreHome_DataTableAction_MultiRowEvolution)) + if ($max == 0 && !($this instanceof Piwik_CoreHome_DataTableRowAction_MultiRowEvolution)) { - // series with only 0 cause trouble in js continue; } + $lowerIsBetter = Piwik_API_API::isLowerValueBetter($metric); if (substr($change, 0, 1) == '+') { - $changeClass = 'up'; - $changeImage = 'arrow_up'; + $changeClass = $lowerIsBetter ? 'bad' : 'good'; + $changeImage = $lowerIsBetter ? 'arrow_up_red' : 'arrow_up'; } else if (substr($change, 0, 1) == '-') { - $changeClass = 'down'; - $changeImage = 'arrow_down'; + $changeClass = $lowerIsBetter ? 'good' : 'bad'; + $changeImage = $lowerIsBetter ? 'arrow_down_green' : 'arrow_down'; } else { - $changeClass = 'nochange'; + $changeClass = 'neutral'; $changeImage = false; } @@ -245,6 +245,10 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution .($changeImage ? '<img src="plugins/MultiSites/images/'.$changeImage.'.png" /> ' : '') .$change.'</span>'; + $unit = Piwik_API_API::getUnit($metric, $this->idSite); + $min .= $unit; + $max .= $unit; + $details = Piwik_Translate('RowEvolution_MetricDetailsText', array($min, $max, $change)); $color = $colors[ $i % count($colors) ]; diff --git a/plugins/CoreHome/templates/datatable.js b/plugins/CoreHome/templates/datatable.js index c4545e7e7f..078185c4aa 100644 --- a/plugins/CoreHome/templates/datatable.js +++ b/plugins/CoreHome/templates/datatable.js @@ -1053,7 +1053,7 @@ dataTable.prototype = { $(this).blur(); actions.hide(); - action.onActionClick(tr, e); + action.trigger(tr, e); return false; }); } diff --git a/plugins/CoreHome/templates/datatable_cell.tpl b/plugins/CoreHome/templates/datatable_cell.tpl index 53fcc68a91..453f03d1eb 100644 --- a/plugins/CoreHome/templates/datatable_cell.tpl +++ b/plugins/CoreHome/templates/datatable_cell.tpl @@ -1,3 +1,11 @@ +{if $column=='label'} + <div class="dataTableRowActions"> + {if !isset($properties.disable_row_evolution) || $properties.disable_row_evolution === false} + <a href="#" class="actionRowEvolution"><img src="themes/default/images/row_evolution.png" alt="" /></a> + {/if} + </div> +{/if} + {if !$row.idsubdatatable && $column=='label' && !empty($row.metadata.url)} <a target="_blank" href='{if !in_array(substr($row.metadata.url,0,4), array('http','ftp:'))}http://{/if}{$row.metadata.url|escape:'html'}'> {if empty($row.metadata.logo)} diff --git a/plugins/CoreHome/templates/jqplot.css b/plugins/CoreHome/templates/jqplot.css index 5942991248..81a8612558 100644 --- a/plugins/CoreHome/templates/jqplot.css +++ b/plugins/CoreHome/templates/jqplot.css @@ -182,11 +182,11 @@ padding-left: 15px; } -.rowevolution table.metrics td.text span.up { +.rowevolution table.metrics td.text span.good { color: green; } -.rowevolution table.metrics td.text span.down { +.rowevolution table.metrics td.text span.bad { color: red; } diff --git a/plugins/MultiSites/images/arrow_down_green.png b/plugins/MultiSites/images/arrow_down_green.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d0f695d0df0d6908ddcfd2909d11353618b7f9 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@VE&Nl>>S|f?5q$_l%JNFlghxL zF|jxFZvO2M5&O>km?dKN3pV!giFU6K4UXO^Ew%O-o9E=EFP)@zp1q;9<YZ}{RPc4P zZI^RH=YM0$=lQ|hu!&u6LWPqQ&yjDN-ZF0S40aT~s<Onk<d#Fm<Zn%@3f8R;-W_{v z$HevZme0%W-d{9zI37Oh@eEJNgnOT2P3KSSpFd-ob(kXOc}Mjx4$GHS`|XO+W70d; z>VEBTyyC%o=Ipm#|1T~LTe+NBWu8+`xNWW6$ION)E3Mb@E8KJY`9br(<DHK-k7V`K zIwBG)rajg<Y%C+sZxQ@TBWYUqlIvTw9;qJrYi#&4hv&0Q(^h4F-B(h(&Qt}Ky`7bK zDPos@!2k26`DRfct3JN`^h~Y)(eD1MaplLa2-L63-syQnUwPlNAChYIq96Aji&5>Z z(0BMWb5`||LqAWNi@gqhuW+w(N7j$ll>z%Q&Q4L=ky})G&TduPoa|lZUAE2Qg7;Tl zcAEHH*<os0@tXLK>esy+FYGsXr|a`9s!r_nV%2x<1@|u>JKa$&Q2*lAE0*(-5zErz zp8jjq?u+Lu7PzLnIpm35r_0_2#~j{WUw&+duH}Qribc^zvBrHOPX8t)vu*C!Iq`Fz z^V*g<(z9ltF1CMSw^eK5`77&IO-tP?>rx}pr)shw;V{oTtB4JZMk^+?^X!u?2n=Rs z_L&lJC1{F7=ki3p)VGyS8x9v9nZdi}`b<-|%<~Tg-?hlhE)i~hbNso2<|OBo89fa? z_f+yH9#-kTBv@2%d7Di4`J}ryzkIecxuE@6w)xD?d2aC{@7Gjcy0E_f%XhKt-xKF# zYR|7=KX90D%M9j^zt-#h-Jtzxqm$mA>dmiT3HjKp+`sbn%CA?r-mPA_wPWHh+pTT; zLp_r7(k5KAv2&ZyE`C}e?r>^N&4q&h%#~$5+f|d!T3r{;j8K2UzO-G{;<mi!)caHH zr;0x1e!8cqJbL==GS43&Kf-<l{_y(|_d_z};iQ7dAD%muYLsJo=3agLJo)pR=Bntc zM!vh_f(@4TY>BS&JmsbDvEJk8iTPJ_c|DUa$z6GK&t`kYo(f&IIS2M$z4~pV#rmcw zW<OTZ3deR`i_N+JoU<=^w|OMqzQVUTGSBeHoEf5*6}qdB3Kn|Er0<wIe+PT1@{Z@* zeCGa}!IjY?y1rOphLzdsGgXQgDjjO8Zl#OAUGa8KVeidd`tO6MTz_g(w`xVqhA#)} zB8`1511dLp+rHAf@JeCBdxiar<X0U0uDkJbmCEP)Y!+X{??sv`-7H~#kj=l~_g0T< z?d6X)&u5IWSYUpq^}{)Tl{&@`S--!3tdEu4Gds_8HvflxuYRy3Jbs+^dH&P1;>X@! z_Olh7{39O8P*`z9<B$We2;eO6h%9Dc;1&j9Muu5)Bp4VNQ!+y$N+NuHtdjF{^%7I^ zlT!66atnZ}85nFTtboki)RIJnirk#MVyg;UC9n!BAR8pCucQE0Qj%?}6yY17;GAES zs$imLqGzCF$EBd4U{jQmW)<Y(2GtJa*(zm}loVL$>z9|8>y;bp<rk&v8(Lag>Khp8 z8yV>WRp=I1=9MH?=;jqGLkxkL<C0pOT$EW*l9`{U05Uf*DZjMDR!IqD5gb6>nOgw2 zD6bgmE1>`MD-sLz4fPE4;U)t$+5r7%<y@4SSdw29lAoVr=LiY}1<%~X^wgl##FR=K zeRLI2D{b^a?m%)E#M59=ps($?fI49zXvZb}w2BWHs7{_Pjv*3LlmGnxZ_f+_&abxl za4>VFRr{u=BmhB@0)s~Qff<`jAKTlp`WPHfVBWlUnX%D9i5n_`cN*4k%;aVG{$8kR TN46Y4D2_Z`{an^LB{Ts5ydInz literal 0 HcmV?d00001 diff --git a/plugins/MultiSites/images/arrow_up_red.png b/plugins/MultiSites/images/arrow_up_red.png new file mode 100644 index 0000000000000000000000000000000000000000..8135545c32cae0c571e754e42de1bc3622d5da5d GIT binary patch literal 1528 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@VE&Nl>>S|f?5q$_l%JNFlghxL zF|jxFZvO2M5&O>km?dKN3pV!giFU6K4UXO^Ew%O-o9E=EFP)@zp1q;9<YZ}{RPc4P zZI^RH=YM0$=lQ|hu!&u6LWPqQ&yjDN-ZF0S40aT~s<Onk<d#Fm<Zn%@3f8R;-W_{v z$HevZme0%W-d{9zI37Oh@eEJNgnOT2P3KSSpFd-ob(kXOc}Mjx4$GHS`|XO+W70d; z>VEBTyyC%o=Ipm#|1T~LTe+NBWu8+`xNWW6$ION)E3Mb@E8KJY`9br(<DHK-k7V`K zIwBG)rajg<Y%C+sZxQ@TBWYUqlIvTw9;qJrYi#&4hv&0Q(^h4F-B(h(&Qt}Ky`7bK zDPos@!2k26`DRfct3JN`^h~Y)(eD1MaplLa2-L63-syQnUwPlNAChYIq96Aji&5>Z z(0BMWb5`||LqAWNi@gqhuW+w(N7j$ll>z%Q&Q4L=ky})G&TduPoa|lZUAE2Qg7;Tl zcAEHH*<os0@tXLK>esy+FYGsXr|a`9s!r_nV%2x<1@|u>JKa$&Q2*lAE0*(-5zErz zp8jjq?u+Lu7PzLnIpm35r_0_2#~j{WUw&+duH}Qribc^zvBrHOPX8t)vu*C!Iq`Fz z^V*g<(z9ltF1CMSw^eK5`77&IO-tP?>rx}pr)shw;V{oTtB4JZMk^+?^X!u?2n=Rs z_L&lJC1{F7=ki3p)VGyS8x9v9nZdi}`b<-|%<~Tg-?hlhE)i~hbNso2<|OBo89fa? z_f+yH9#-kTBv@2%d7Di4`J}ryzkIecxuE@6w)xD?d2aC{@7Gjcy0E_f%XhKt-xKF# zYR|7=KX90D%M9j^zt-#h-Jtzxqm$mA>dmiT3HjKp+`sbn%CA?r-mPA_wPWHh+pTT; zLp_r7(k5KAv2&ZyE`C}e?r>^N&4q&h%#~$5+f|d!T3r{;j8K2UzO-G{;<mi!)caHH zr;0x1e!8cqJbL==GS43&Kf-<l{_y(|_d_z};iQ7dAD%muYLsJo=3agLJo)pR=Bntc zM!vh_f(@4TY>BS&JmsbDvEJk8iTPJ_c|DUa$z6GK&t`kYo(f&IIS2M$z4~pV#rmcw zW<OTZ3deR`i_N+JoU<=^w|OMqzQVUTGSBeHoEf5*6}qdB3Kn|Er0<wIe+PT1@{Z@* zeCGa}!IjY?y1rOphLzdsGgXQgDjjO8Zl#OAUGa8KVeidd`tO6MTz_g(w`xVqhA#)} zB8`1511dLp+rHAf@JeCBdxiar<X0U0uDkJbmCEP)Y!+X{??sv`-7H~#kj=l~_g0T< z?d6X)&u5IWSYUpq^}{)Tl{&@`S--!3tdEu4Gds_8HvflxuYRy3Jbs+^dH&P1;>X@! z_Olh7{39O8P*`z9<B$We2;eO6h%9Dc;1&j9Muu5)Bp4VNQ!+y$N+NuHtdjF{^%7I^ zlT!66atnZ}85nFTtboki)RIJnirk#MVyg;UC9n!BAR8pCucQE0Qj%?}6yY17;GAES zs$imLqGzCF$EBd4U{jQmW)<Y(2GtJa*(zm}loVL$>z9|8>y;bp<rk&v8(Lag>Khp8 z8yV>WRp=I1=9MH?=;jqGLkxkL<C0pOT$EW*l9`{U05Uf*DZjMDR!IqD5gb6>nOgw2 zD6bgmE1>`MD-sLz4fPE4;U)t$+5r7%<y@4SSdw29lAoVr=LiY}1<%~X^wgl##FR=K zeRLI2D{b^a?m%)E#M59=ps($?fI49zXvZb}w2BWHsCJ$%jv*3LlmGnxZ_mv0=k$rc z=MMmZNwSf$PY-9T(A={vdJXG3KIT{PwW$~-wCrTOD>B1+#)b?h#wpqi4Cj(%<nw#~ QSb^fl)78&qol`;+0Djw^*Z=?k literal 0 HcmV?d00001 -- GitLab