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

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2016-08-31 16:13:54 +0300
committerThomas Steur <thomas.steur@gmail.com>2016-08-31 16:13:54 +0300
commit4617d4205cdf646a52ef1886d9240e9c2bad0609 (patch)
tree849ee39219166830170513e6b00161d3e5864514
parent903b870466b62e8a655a0f6564d052583c0fb7ec (diff)
parent5d52b777100f5acb82d16e947e0e9ab2c0804215 (diff)
Merge branch '3.x-dev' into 3.0-m06
Conflicts: js/piwik.min.js piwik.js
-rw-r--r--CHANGELOG.md3
-rw-r--r--core/API/ResponseBuilder.php37
-rw-r--r--js/piwik.js2
-rw-r--r--js/piwik.min.js2
-rw-r--r--piwik.js2
-rw-r--r--plugins/API/Controller.php7
-rwxr-xr-xplugins/Annotations/javascripts/annotations.js6
-rw-r--r--plugins/CoreAdminHome/angularjs/trackingcode/imagetrackingcode.controller.js1
-rw-r--r--plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js3
-rw-r--r--plugins/CoreConsole/Commands/GeneratePluginBase.php41
-rw-r--r--plugins/CoreConsole/Commands/GenerateUpdate.php4
-rw-r--r--plugins/CoreHome/angularjs/common/services/report-metadata-model.js1
-rw-r--r--plugins/CoreHome/angularjs/common/services/reporting-pages-model.js2
-rw-r--r--plugins/CoreHome/images/applePinnedTab.svg11
-rw-r--r--plugins/CoreHome/javascripts/dataTable.js2
-rw-r--r--plugins/CoreHome/stylesheets/dataTable/_entityTable.less5
-rw-r--r--plugins/CoreHome/templates/_applePinnedTabIcon.twig4
-rw-r--r--plugins/CoreUpdater/templates/layout.twig1
-rw-r--r--plugins/CustomVariables/angularjs/manage-custom-vars/manage-custom-vars.model.js2
-rw-r--r--plugins/Dashboard/angularjs/common/services/dashboards-model.js2
-rw-r--r--plugins/Dashboard/javascripts/dashboard.js3
-rw-r--r--plugins/Dashboard/javascripts/dashboardObject.js3
-rw-r--r--plugins/Dashboard/javascripts/widgetMenu.js1
-rw-r--r--plugins/DevicesDetection/API.php6
-rw-r--r--plugins/DevicesDetection/Archiver.php26
-rw-r--r--plugins/DevicesDetection/Columns/DeviceBrand.php11
-rw-r--r--plugins/DevicesDetection/Columns/DeviceModel.php11
-rw-r--r--plugins/DevicesDetection/Columns/DeviceType.php11
-rw-r--r--plugins/DevicesDetection/Reports/GetBrand.php2
-rw-r--r--plugins/DevicesDetection/Reports/GetModel.php2
-rw-r--r--plugins/DevicesDetection/Reports/GetType.php2
-rw-r--r--plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___API.getMetadata_day.xml8
-rw-r--r--plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___DevicesDetection.getBrowsers_day.xml24
-rw-r--r--plugins/Goals/lang/en.json1
-rw-r--r--plugins/Morpheus/templates/layout.twig1
-rw-r--r--plugins/Overlay/templates/showErrorWrongDomain.twig1
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js2
-rw-r--r--plugins/Transitions/javascripts/transitions.js1
-rw-r--r--plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js7
-rw-r--r--tests/PHPUnit/System/BackwardsCompatibility1XTest.php5
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml41
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getModel_month.xml41
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml31
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml15
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml15
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml15
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getModel_day.xml15
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml1
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv14
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html14
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml460
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv12
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html12
-rw-r--r--tests/PHPUnit/Unit/API/ResponseBuilderTest.php14
m---------tests/UI/expected-ui-screenshots0
58 files changed, 896 insertions, 142 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a1eb861c6..44e75d7235 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -40,7 +40,8 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
* The method `Piwik\Plugin\Controller::getEvolutionHtml` has been removed without a replacement as it should be no longer needed. The evolution is generated by ViewDataTables directly
* The `core:plugin` console command has been removed in favor of the new `plugin:list`, `plugin:activate` and `plugin:deactivate` commands as anounced in Piwik 2.11
* The visibility of private properties and methods in `Piwik\Plugins\Login\Controller` were changed to `protected`
-* Controller actions are now case sensitive. This means the URL and events have to use the same case as the name of the action defined in a controller.
+* Controller actions are now case sensitive. This means the URL and events have to use the same case as the name of the action defined in a controller.
+* When calling the HTTP Reporting API, a default filter limit of 100 is now always applied. The default filter limit used to be not applied to API calls that do not return reports, such as when requesting sites, users or goals information.
* The "User Menu" was removed and should be replaced by "Admin Menu". Change `configureUserMenu(MenuUser $menu)` to `configureAdminMenu(MenuAdmin $menu)` in your `Menu.php`.
* The method `Piwik\Menu\MenuAdmin::addSettingsItem()` was removed, use `Piwik\Menu\MenuAdmin::addSystemItem()` instead.
* A new methd `Piwik\Menu\MenuAdmin::addMeasurablesItem()` was added.
diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php
index bc90598f89..fb890a960b 100644
--- a/core/API/ResponseBuilder.php
+++ b/core/API/ResponseBuilder.php
@@ -204,7 +204,10 @@ class ResponseBuilder
$limit = Common::getRequestVar('filter_limit', -1, 'integer', $this->request);
$offset = Common::getRequestVar('filter_offset', '0', 'integer', $this->request);
- if ($this->shouldApplyLimitOnArray($limit, $offset)) {
+ if ($limit >= 0 || $offset > 0) {
+ if ($limit < 0) {
+ $limit = null; // make sure to return all results from offset
+ }
$array = array_slice($array, $offset, $limit, $preserveKeys = false);
}
}
@@ -221,38 +224,6 @@ class ResponseBuilder
return $this->apiRenderer->renderArray($array);
}
- private function shouldApplyLimitOnArray($limit, $offset)
- {
- if ($limit === -1) {
- // all fields are requested
- return false;
- }
-
- if ($offset > 0) {
- // an offset is specified, we have to apply the limit
- return true;
- }
-
- // "api_datatable_default_limit" is set by API\Controller if no filter_limit is specified by the user.
- // it holds the number of the configured default limit.
- $limitSetBySystem = Common::getRequestVar('api_datatable_default_limit', -2, 'integer', $this->request);
-
- // we ignore the limit if the datatable_default_limit was set by the system as this default filter_limit is
- // only meant for dataTables but not for arrays. This way we stay BC as filter_limit was not applied pre
- // Piwik 2.6 and some fixes were made in Piwik 2.13.
- $wasFilterLimitSetBySystem = $limitSetBySystem !== -2;
-
- // we check for "$limitSetBySystem === $limit" as an API method could request another API method with
- // another limit. In this case we need to apply it again.
- $isLimitStillDefaultLimit = $limitSetBySystem === $limit;
-
- if ($wasFilterLimitSetBySystem && $isLimitStillDefaultLimit) {
- return false;
- }
-
- return true;
- }
-
private function sendHeaderIfEnabled()
{
if ($this->sendHeader) {
diff --git a/js/piwik.js b/js/piwik.js
index 9a135e5edc..658db1580c 100644
--- a/js/piwik.js
+++ b/js/piwik.js
@@ -4689,7 +4689,7 @@ if (typeof window.Piwik !== 'object') {
var request = getRequest(linkParams, customData, 'link');
- sendRequest(request, (callback ? 0 : configTrackerPause), callback);
+ sendRequest(request, configTrackerPause, callback);
}
/*
diff --git a/js/piwik.min.js b/js/piwik.min.js
index 002e4cb757..961e829840 100644
--- a/js/piwik.min.js
+++ b/js/piwik.min.js
@@ -51,7 +51,7 @@ if(!cF.test(cE)){var cC=bY(cH.className,cE,af(cJ,cD),U.hasNodeAttribute(cH,"down
if(cE&&cE.name===cD.name&&cE.piece===cD.piece&&cE.target===cD.target){return true}}return false}function bc(cF){if(!cF){return false}var cI=p.findTargetNode(cF);if(!cI||p.shouldIgnoreInteraction(cI)){return false}var cJ=cw(cI);if(cu&&cJ&&cJ.type){return false}if(U.isLinkElement(cI)&&U.hasNodeAttributeWithValue(cI,"href")){var cC=String(U.getAttributeValueFromNode(cI,"href"));if(0===cC.indexOf("#")){return false}if(aB(cC)){return true}if(!p.isUrlToCurrentDomain(cC)){return false}var cG=p.buildContentBlock(cF);if(!cG){return}var cE=cG.name;var cK=cG.piece;var cH=cG.target;if(!U.hasNodeAttributeWithValue(cI,p.CONTENT_TARGET_ATTR)||cI.wasContentTargetAttrReplaced){cI.wasContentTargetAttrReplaced=true;cH=p.toAbsoluteUrl(cC);U.setAnyAttribute(cI,p.CONTENT_TARGET_ATTR,cH)}var cD=cc(cC,"click",cE,cK,cH);p.setHrefAttribute(cI,cD);return true}return false}function au(cD){if(!cD||!cD.length){return}var cC;for(cC=0;cC<cD.length;cC++){bc(cD[cC])}}function aF(cC){return function(cD){if(!cC){return}var cG=p.findParentContentNode(cC);
var cH;if(cD){cH=cD.target||cD.srcElement}if(!cH){cH=cC}if(!aQ(cG,cH)){return}bM(bg);if(U.isLinkElement(cC)&&U.hasNodeAttributeWithValue(cC,"href")&&U.hasNodeAttributeWithValue(cC,p.CONTENT_TARGET_ATTR)){var cE=U.getAttributeValueFromNode(cC,"href");if(!aB(cE)&&cC.wasContentTargetAttrReplaced){U.setAnyAttribute(cC,p.CONTENT_TARGET_ATTR,"")}}var cL=cw(cC);if(ad&&cL&&cL.type){return cL.type}if(bc(cG)){return"href"}var cI=p.buildContentBlock(cG);if(!cI){return}var cF=cI.name;var cM=cI.piece;var cK=cI.target;var cJ=aw("click",cF,cM,cK);bd(cJ,bg);return cJ}}function bx(cE){if(!cE||!cE.length){return}var cC,cD;for(cC=0;cC<cE.length;cC++){cD=p.findTargetNode(cE[cC]);if(cD&&!cD.contentInteractionTrackingSetupDone){cD.contentInteractionTrackingSetupDone=true;aa(cD,"click",aF(cD))}}}function a7(cE,cF){if(!cE||!cE.length){return[]}var cC,cD;for(cC=0;cC<cE.length;cC++){if(aD(cE[cC])){cE.splice(cC,1);cC--}else{bG.push(cE[cC])}}if(!cE||!cE.length){return[]}au(cF);bx(cF);var cG=[];for(cC=0;cC<cE.length;
cC++){cD=bX(p.buildImpressionRequestParams(cE[cC].name,cE[cC].piece,cE[cC].target),undefined,"contentImpressions");if(cD){cG.push(cD)}}return cG}function b3(cD){var cC=p.collectContent(cD);return a7(cC,cD)}function aO(cD){if(!cD||!cD.length){return[]}var cC;for(cC=0;cC<cD.length;cC++){if(!p.isNodeVisible(cD[cC])){cD.splice(cC,1);cC--}}if(!cD||!cD.length){return[]}return b3(cD)}function ao(cE,cC,cD){var cF=p.buildImpressionRequestParams(cE,cC,cD);return bX(cF,null,"contentImpression")}function cx(cF,cD){if(!cF){return}var cC=p.findParentContentNode(cF);var cE=p.buildContentBlock(cC);if(!cE){return}if(!cD){cD="Unknown"}return aw(cD,cE.name,cE.piece,cE.target)}function ce(cD,cF,cC,cE){return"e_c="+n(cD)+"&e_a="+n(cF)+(B(cC)?"&e_n="+n(cC):"")+(B(cE)?"&e_v="+n(cE):"")}function ah(cE,cG,cC,cF,cH){if(String(cE).length===0||String(cG).length===0){return false}var cD=bX(ce(cE,cG,cC,cF),cH,"event");bd(cD,bg)}function bF(cC,cF,cD,cG){var cE=bX("search="+n(cC)+(cF?"&search_cat="+n(cF):"")+(B(cD)?"&search_count="+cD:""),cG,"sitesearch");
-bd(cE,bg)}function ci(cC,cF,cE){var cD=bX("idgoal="+cC+(cF?"&revenue="+cF:""),cE,"goal");bd(cD,bg)}function cp(cF,cC,cJ,cI,cE){var cH=cC+"="+n(by(cF));var cD=bZ(cE,"click",cF);if(cD){cH+="&"+cD}var cG=bX(cH,cJ,"link");bd(cG,(cI?0:bg),cI)}function bp(cD,cC){if(cD!==""){return cD+cC.charAt(0).toUpperCase()+cC.slice(1)}return cC}function bN(cH){var cG,cC,cF=["","webkit","ms","moz"],cE;if(!aT){for(cC=0;cC<cF.length;cC++){cE=cF[cC];if(Object.prototype.hasOwnProperty.call(y,bp(cE,"hidden"))){if(y[bp(cE,"visibilityState")]==="prerender"){cG=true}break}}}if(cG){aa(y,cE+"visibilitychange",function cD(){y.removeEventListener(cE+"visibilitychange",cD,false);cH()});return}cH()}function ar(cC){if(y.readyState==="complete"){cC()}else{if(L.addEventListener){L.addEventListener("load",cC)}else{if(L.attachEvent){L.attachEvent("onload",cC)}}}}function aR(cF){var cC=false;if(y.attachEvent){cC=y.readyState==="complete"}else{cC=y.readyState!=="loading"}if(cC){cF();return}var cE;if(y.addEventListener){aa(y,"DOMContentLoaded",function cD(){y.removeEventListener("DOMContentLoaded",cD,false);
+bd(cE,bg)}function ci(cC,cF,cE){var cD=bX("idgoal="+cC+(cF?"&revenue="+cF:""),cE,"goal");bd(cD,bg)}function cp(cF,cC,cJ,cI,cE){var cH=cC+"="+n(by(cF));var cD=bZ(cE,"click",cF);if(cD){cH+="&"+cD}var cG=bX(cH,cJ,"link");bd(cG,bg,cI)}function bp(cD,cC){if(cD!==""){return cD+cC.charAt(0).toUpperCase()+cC.slice(1)}return cC}function bN(cH){var cG,cC,cF=["","webkit","ms","moz"],cE;if(!aT){for(cC=0;cC<cF.length;cC++){cE=cF[cC];if(Object.prototype.hasOwnProperty.call(y,bp(cE,"hidden"))){if(y[bp(cE,"visibilityState")]==="prerender"){cG=true}break}}}if(cG){aa(y,cE+"visibilitychange",function cD(){y.removeEventListener(cE+"visibilitychange",cD,false);cH()});return}cH()}function ar(cC){if(y.readyState==="complete"){cC()}else{if(L.addEventListener){L.addEventListener("load",cC)}else{if(L.attachEvent){L.attachEvent("onload",cC)}}}}function aR(cF){var cC=false;if(y.attachEvent){cC=y.readyState==="complete"}else{cC=y.readyState!=="loading"}if(cC){cF();return}var cE;if(y.addEventListener){aa(y,"DOMContentLoaded",function cD(){y.removeEventListener("DOMContentLoaded",cD,false);
if(!cC){cC=true;cF()}})}else{if(y.attachEvent){y.attachEvent("onreadystatechange",function cD(){if(y.readyState==="complete"){y.detachEvent("onreadystatechange",cD);if(!cC){cC=true;cF()}}});if(y.documentElement.doScroll&&L===L.top){(function cD(){if(!cC){try{y.documentElement.doScroll("left")}catch(cG){setTimeout(cD,0);return}cC=true;cF()}}())}}}aa(L,"load",function(){if(!cC){cC=true;cF()}},false)}function b9(cC){var cD=cw(cC);if(cD&&cD.type){cD.href=k(cD.href);cp(cD.href,cD.type,undefined,null,cC)}}function b1(){return y.all&&!y.addEventListener}function ck(cC){var cE=cC.which;var cD=(typeof cC.button);if(!cE&&cD!=="undefined"){if(b1()){if(cC.button&1){cE=1}else{if(cC.button&2){cE=3}else{if(cC.button&4){cE=2}}}}else{if(cC.button===0||cC.button==="0"){cE=1}else{if(cC.button&1){cE=2}else{if(cC.button&2){cE=3}}}}}return cE}function bq(cC){switch(ck(cC)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aH(cC){return cC.target||cC.srcElement}function ak(cC){return function(cF){cF=cF||L.event;
var cE=bq(cF);var cG=aH(cF);if(cF.type==="click"){var cD=false;if(cC&&cE==="middle"){cD=true}if(cG&&!cD){b9(cG)}}else{if(cF.type==="mousedown"){if(cE==="middle"&&cG){ay=cE;ba=cG}else{ay=ba=null}}else{if(cF.type==="mouseup"){if(cE===ay&&cG===ba){b9(cG)}ay=ba=null}else{if(cF.type==="contextmenu"){b9(cG)}}}}}}function ae(cD,cC){aa(cD,"click",ak(cC),false);if(cC){aa(cD,"mouseup",ak(cC),false);aa(cD,"mousedown",ak(cC),false);aa(cD,"contextmenu",ak(cC),false)}}function bb(cD){if(!ad){ad=true;var cE,cC=aG(a9,"ignore"),cF=y.links;if(cF){for(cE=0;cE<cF.length;cE++){if(!cC.test(cF[cE].className)){ae(cF[cE],cD)}}}}}function az(cE,cG,cH){if(bL){return true}bL=true;var cI=false;var cF,cD;function cC(){cI=true}ar(function(){function cJ(cL){setTimeout(function(){if(!bL){return}cI=false;cH.trackVisibleContentImpressions();cJ(cL)},cL)}function cK(cL){setTimeout(function(){if(!bL){return}if(cI){cI=false;cH.trackVisibleContentImpressions()}cK(cL)},cL)}if(cE){cF=["scroll","resize"];for(cD=0;cD<cF.length;cD++){if(y.addEventListener){y.addEventListener(cF[cD],cC)
}else{L.attachEvent("on"+cF[cD],cC)}}cK(100)}if(cG&&cG>0){cG=parseInt(cG,10);cJ(cG)}})}function b7(){var cD,cF,cG={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(f.userAgent))){if(f.mimeTypes&&f.mimeTypes.length){for(cD in cG){if(Object.prototype.hasOwnProperty.call(cG,cD)){cF=f.mimeTypes[cG[cD]];ct[cD]=(cF&&cF.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&B(f.javaEnabled)&&f.javaEnabled()){ct.java="1"}if(t(L.GearsFactory)){ct.gears="1"}ct.cookie=bB()}var cE=parseInt(P.width,10);var cC=parseInt(P.height,10);ct.res=parseInt(cE,10)+"x"+parseInt(cC,10)}b7();aU();at();this.getVisitorId=function(){return aE().uuid};this.getVisitorInfo=function(){return cd()};this.getAttributionInfo=function(){return bj()};this.getAttributionCampaignName=function(){return bj()[0]
diff --git a/piwik.js b/piwik.js
index 002e4cb757..961e829840 100644
--- a/piwik.js
+++ b/piwik.js
@@ -51,7 +51,7 @@ if(!cF.test(cE)){var cC=bY(cH.className,cE,af(cJ,cD),U.hasNodeAttribute(cH,"down
if(cE&&cE.name===cD.name&&cE.piece===cD.piece&&cE.target===cD.target){return true}}return false}function bc(cF){if(!cF){return false}var cI=p.findTargetNode(cF);if(!cI||p.shouldIgnoreInteraction(cI)){return false}var cJ=cw(cI);if(cu&&cJ&&cJ.type){return false}if(U.isLinkElement(cI)&&U.hasNodeAttributeWithValue(cI,"href")){var cC=String(U.getAttributeValueFromNode(cI,"href"));if(0===cC.indexOf("#")){return false}if(aB(cC)){return true}if(!p.isUrlToCurrentDomain(cC)){return false}var cG=p.buildContentBlock(cF);if(!cG){return}var cE=cG.name;var cK=cG.piece;var cH=cG.target;if(!U.hasNodeAttributeWithValue(cI,p.CONTENT_TARGET_ATTR)||cI.wasContentTargetAttrReplaced){cI.wasContentTargetAttrReplaced=true;cH=p.toAbsoluteUrl(cC);U.setAnyAttribute(cI,p.CONTENT_TARGET_ATTR,cH)}var cD=cc(cC,"click",cE,cK,cH);p.setHrefAttribute(cI,cD);return true}return false}function au(cD){if(!cD||!cD.length){return}var cC;for(cC=0;cC<cD.length;cC++){bc(cD[cC])}}function aF(cC){return function(cD){if(!cC){return}var cG=p.findParentContentNode(cC);
var cH;if(cD){cH=cD.target||cD.srcElement}if(!cH){cH=cC}if(!aQ(cG,cH)){return}bM(bg);if(U.isLinkElement(cC)&&U.hasNodeAttributeWithValue(cC,"href")&&U.hasNodeAttributeWithValue(cC,p.CONTENT_TARGET_ATTR)){var cE=U.getAttributeValueFromNode(cC,"href");if(!aB(cE)&&cC.wasContentTargetAttrReplaced){U.setAnyAttribute(cC,p.CONTENT_TARGET_ATTR,"")}}var cL=cw(cC);if(ad&&cL&&cL.type){return cL.type}if(bc(cG)){return"href"}var cI=p.buildContentBlock(cG);if(!cI){return}var cF=cI.name;var cM=cI.piece;var cK=cI.target;var cJ=aw("click",cF,cM,cK);bd(cJ,bg);return cJ}}function bx(cE){if(!cE||!cE.length){return}var cC,cD;for(cC=0;cC<cE.length;cC++){cD=p.findTargetNode(cE[cC]);if(cD&&!cD.contentInteractionTrackingSetupDone){cD.contentInteractionTrackingSetupDone=true;aa(cD,"click",aF(cD))}}}function a7(cE,cF){if(!cE||!cE.length){return[]}var cC,cD;for(cC=0;cC<cE.length;cC++){if(aD(cE[cC])){cE.splice(cC,1);cC--}else{bG.push(cE[cC])}}if(!cE||!cE.length){return[]}au(cF);bx(cF);var cG=[];for(cC=0;cC<cE.length;
cC++){cD=bX(p.buildImpressionRequestParams(cE[cC].name,cE[cC].piece,cE[cC].target),undefined,"contentImpressions");if(cD){cG.push(cD)}}return cG}function b3(cD){var cC=p.collectContent(cD);return a7(cC,cD)}function aO(cD){if(!cD||!cD.length){return[]}var cC;for(cC=0;cC<cD.length;cC++){if(!p.isNodeVisible(cD[cC])){cD.splice(cC,1);cC--}}if(!cD||!cD.length){return[]}return b3(cD)}function ao(cE,cC,cD){var cF=p.buildImpressionRequestParams(cE,cC,cD);return bX(cF,null,"contentImpression")}function cx(cF,cD){if(!cF){return}var cC=p.findParentContentNode(cF);var cE=p.buildContentBlock(cC);if(!cE){return}if(!cD){cD="Unknown"}return aw(cD,cE.name,cE.piece,cE.target)}function ce(cD,cF,cC,cE){return"e_c="+n(cD)+"&e_a="+n(cF)+(B(cC)?"&e_n="+n(cC):"")+(B(cE)?"&e_v="+n(cE):"")}function ah(cE,cG,cC,cF,cH){if(String(cE).length===0||String(cG).length===0){return false}var cD=bX(ce(cE,cG,cC,cF),cH,"event");bd(cD,bg)}function bF(cC,cF,cD,cG){var cE=bX("search="+n(cC)+(cF?"&search_cat="+n(cF):"")+(B(cD)?"&search_count="+cD:""),cG,"sitesearch");
-bd(cE,bg)}function ci(cC,cF,cE){var cD=bX("idgoal="+cC+(cF?"&revenue="+cF:""),cE,"goal");bd(cD,bg)}function cp(cF,cC,cJ,cI,cE){var cH=cC+"="+n(by(cF));var cD=bZ(cE,"click",cF);if(cD){cH+="&"+cD}var cG=bX(cH,cJ,"link");bd(cG,(cI?0:bg),cI)}function bp(cD,cC){if(cD!==""){return cD+cC.charAt(0).toUpperCase()+cC.slice(1)}return cC}function bN(cH){var cG,cC,cF=["","webkit","ms","moz"],cE;if(!aT){for(cC=0;cC<cF.length;cC++){cE=cF[cC];if(Object.prototype.hasOwnProperty.call(y,bp(cE,"hidden"))){if(y[bp(cE,"visibilityState")]==="prerender"){cG=true}break}}}if(cG){aa(y,cE+"visibilitychange",function cD(){y.removeEventListener(cE+"visibilitychange",cD,false);cH()});return}cH()}function ar(cC){if(y.readyState==="complete"){cC()}else{if(L.addEventListener){L.addEventListener("load",cC)}else{if(L.attachEvent){L.attachEvent("onload",cC)}}}}function aR(cF){var cC=false;if(y.attachEvent){cC=y.readyState==="complete"}else{cC=y.readyState!=="loading"}if(cC){cF();return}var cE;if(y.addEventListener){aa(y,"DOMContentLoaded",function cD(){y.removeEventListener("DOMContentLoaded",cD,false);
+bd(cE,bg)}function ci(cC,cF,cE){var cD=bX("idgoal="+cC+(cF?"&revenue="+cF:""),cE,"goal");bd(cD,bg)}function cp(cF,cC,cJ,cI,cE){var cH=cC+"="+n(by(cF));var cD=bZ(cE,"click",cF);if(cD){cH+="&"+cD}var cG=bX(cH,cJ,"link");bd(cG,bg,cI)}function bp(cD,cC){if(cD!==""){return cD+cC.charAt(0).toUpperCase()+cC.slice(1)}return cC}function bN(cH){var cG,cC,cF=["","webkit","ms","moz"],cE;if(!aT){for(cC=0;cC<cF.length;cC++){cE=cF[cC];if(Object.prototype.hasOwnProperty.call(y,bp(cE,"hidden"))){if(y[bp(cE,"visibilityState")]==="prerender"){cG=true}break}}}if(cG){aa(y,cE+"visibilitychange",function cD(){y.removeEventListener(cE+"visibilitychange",cD,false);cH()});return}cH()}function ar(cC){if(y.readyState==="complete"){cC()}else{if(L.addEventListener){L.addEventListener("load",cC)}else{if(L.attachEvent){L.attachEvent("onload",cC)}}}}function aR(cF){var cC=false;if(y.attachEvent){cC=y.readyState==="complete"}else{cC=y.readyState!=="loading"}if(cC){cF();return}var cE;if(y.addEventListener){aa(y,"DOMContentLoaded",function cD(){y.removeEventListener("DOMContentLoaded",cD,false);
if(!cC){cC=true;cF()}})}else{if(y.attachEvent){y.attachEvent("onreadystatechange",function cD(){if(y.readyState==="complete"){y.detachEvent("onreadystatechange",cD);if(!cC){cC=true;cF()}}});if(y.documentElement.doScroll&&L===L.top){(function cD(){if(!cC){try{y.documentElement.doScroll("left")}catch(cG){setTimeout(cD,0);return}cC=true;cF()}}())}}}aa(L,"load",function(){if(!cC){cC=true;cF()}},false)}function b9(cC){var cD=cw(cC);if(cD&&cD.type){cD.href=k(cD.href);cp(cD.href,cD.type,undefined,null,cC)}}function b1(){return y.all&&!y.addEventListener}function ck(cC){var cE=cC.which;var cD=(typeof cC.button);if(!cE&&cD!=="undefined"){if(b1()){if(cC.button&1){cE=1}else{if(cC.button&2){cE=3}else{if(cC.button&4){cE=2}}}}else{if(cC.button===0||cC.button==="0"){cE=1}else{if(cC.button&1){cE=2}else{if(cC.button&2){cE=3}}}}}return cE}function bq(cC){switch(ck(cC)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aH(cC){return cC.target||cC.srcElement}function ak(cC){return function(cF){cF=cF||L.event;
var cE=bq(cF);var cG=aH(cF);if(cF.type==="click"){var cD=false;if(cC&&cE==="middle"){cD=true}if(cG&&!cD){b9(cG)}}else{if(cF.type==="mousedown"){if(cE==="middle"&&cG){ay=cE;ba=cG}else{ay=ba=null}}else{if(cF.type==="mouseup"){if(cE===ay&&cG===ba){b9(cG)}ay=ba=null}else{if(cF.type==="contextmenu"){b9(cG)}}}}}}function ae(cD,cC){aa(cD,"click",ak(cC),false);if(cC){aa(cD,"mouseup",ak(cC),false);aa(cD,"mousedown",ak(cC),false);aa(cD,"contextmenu",ak(cC),false)}}function bb(cD){if(!ad){ad=true;var cE,cC=aG(a9,"ignore"),cF=y.links;if(cF){for(cE=0;cE<cF.length;cE++){if(!cC.test(cF[cE].className)){ae(cF[cE],cD)}}}}}function az(cE,cG,cH){if(bL){return true}bL=true;var cI=false;var cF,cD;function cC(){cI=true}ar(function(){function cJ(cL){setTimeout(function(){if(!bL){return}cI=false;cH.trackVisibleContentImpressions();cJ(cL)},cL)}function cK(cL){setTimeout(function(){if(!bL){return}if(cI){cI=false;cH.trackVisibleContentImpressions()}cK(cL)},cL)}if(cE){cF=["scroll","resize"];for(cD=0;cD<cF.length;cD++){if(y.addEventListener){y.addEventListener(cF[cD],cC)
}else{L.attachEvent("on"+cF[cD],cC)}}cK(100)}if(cG&&cG>0){cG=parseInt(cG,10);cJ(cG)}})}function b7(){var cD,cF,cG={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(f.userAgent))){if(f.mimeTypes&&f.mimeTypes.length){for(cD in cG){if(Object.prototype.hasOwnProperty.call(cG,cD)){cF=f.mimeTypes[cG[cD]];ct[cD]=(cF&&cF.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&B(f.javaEnabled)&&f.javaEnabled()){ct.java="1"}if(t(L.GearsFactory)){ct.gears="1"}ct.cookie=bB()}var cE=parseInt(P.width,10);var cC=parseInt(P.height,10);ct.res=parseInt(cE,10)+"x"+parseInt(cC,10)}b7();aU();at();this.getVisitorId=function(){return aE().uuid};this.getVisitorInfo=function(){return cd()};this.getAttributionInfo=function(){return bj()};this.getAttributionCampaignName=function(){return bj()[0]
diff --git a/plugins/API/Controller.php b/plugins/API/Controller.php
index 5a15c6dbe7..e7ef5efd36 100644
--- a/plugins/API/Controller.php
+++ b/plugins/API/Controller.php
@@ -29,8 +29,11 @@ class Controller extends \Piwik\Plugin\Controller
// when calling the API through http, we limit the number of returned results
if (!isset($_GET['filter_limit'])) {
- $_GET['filter_limit'] = Config::getInstance()->General['API_datatable_default_limit'];
- $token .= '&api_datatable_default_limit=' . $_GET['filter_limit'];
+ if (isset($_POST['filter_limit'])) {
+ $_GET['filter_limit'] = $_POST['filter_limit'];
+ } else {
+ $_GET['filter_limit'] = Config::getInstance()->General['API_datatable_default_limit'];
+ }
}
$request = new Request($token);
diff --git a/plugins/Annotations/javascripts/annotations.js b/plugins/Annotations/javascripts/annotations.js
index f699b3aec9..b6d08e9856 100755
--- a/plugins/Annotations/javascripts/annotations.js
+++ b/plugins/Annotations/javascripts/annotations.js
@@ -17,7 +17,8 @@
action: 'getAnnotationManager',
idSite: idSite,
date: date,
- period: period
+ period: period,
+ filter_limit: '-1'
};
if (lastN) {
ajaxParams.lastN = lastN;
@@ -102,7 +103,8 @@
action: 'getEvolutionIcons',
idSite: idSite,
date: date,
- period: period
+ period: period,
+ filter_limit: '-1'
};
if (lastN) {
ajaxParams.lastN = lastN;
diff --git a/plugins/CoreAdminHome/angularjs/trackingcode/imagetrackingcode.controller.js b/plugins/CoreAdminHome/angularjs/trackingcode/imagetrackingcode.controller.js
index 18c97bab38..c19885ac7a 100644
--- a/plugins/CoreAdminHome/angularjs/trackingcode/imagetrackingcode.controller.js
+++ b/plugins/CoreAdminHome/angularjs/trackingcode/imagetrackingcode.controller.js
@@ -47,6 +47,7 @@
goalPromises[idSite] = piwikApi.fetch({
module: 'API',
method: 'Goals.getGoals',
+ filter_limit: '-1',
idSite: idSite
});
}
diff --git a/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js b/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js
index 4f222016c8..a7c8dbaeae 100644
--- a/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js
+++ b/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js
@@ -58,7 +58,8 @@
piwikApi.fetch({
module: 'API',
method: 'SitesManager.getSiteUrlsFromId',
- idSite: idSite
+ idSite: idSite,
+ filter_limit: '-1'
}).then(function (data) {
self.siteUrls[idSite] = data || [];
diff --git a/plugins/CoreConsole/Commands/GeneratePluginBase.php b/plugins/CoreConsole/Commands/GeneratePluginBase.php
index 9012839943..f5ca71a405 100644
--- a/plugins/CoreConsole/Commands/GeneratePluginBase.php
+++ b/plugins/CoreConsole/Commands/GeneratePluginBase.php
@@ -9,6 +9,7 @@
namespace Piwik\Plugins\CoreConsole\Commands;
+use Piwik\Common;
use Piwik\Development;
use Piwik\Filesystem;
use Piwik\Plugin\ConsoleCommand;
@@ -123,15 +124,51 @@ abstract class GeneratePluginBase extends ConsoleCommand
}
$piwikVersion = Version::VERSION;
- $newRequiredVersion = '>=' . $piwikVersion;
+ $nextMajorVersion = (int) $piwikVersion + 1;
+ $secondPartPiwikVersionRequire = ',<' . $nextMajorVersion . '.0.0-b1';
+ $newRequiredVersion = '>=' . $piwikVersion . $secondPartPiwikVersionRequire;
if (!empty($pluginJson['require']['piwik'])) {
- $requiredVersion = $pluginJson['require']['piwik'];
+ $requiredVersion = trim($pluginJson['require']['piwik']);
if ($requiredVersion === $newRequiredVersion) {
+ // there is nothing to updated
return;
}
+ // our generated versions look like ">=2.25.4,<3.0.0-b1".
+ // We only updated the Piwik version in the first part if the piwik version looks like that or if it has only
+ // one piwik version defined. In all other cases, eg user uses || etc we do not update it as user has customized
+ // the piwik version.
+
+ foreach (['<>','!=', '<=','==', '^'] as $comparison) {
+ if (strpos($requiredVersion, $comparison) === 0) {
+ // user is using custom piwik version require, we do not overwrite anything.
+ return;
+ }
+ }
+
+ if (strpos($requiredVersion, '||') !== false || strpos($requiredVersion, ' ') !== false) {
+ // user is using custom piwik version require, we do not overwrite anything.
+ return;
+ }
+
+ $requiredPiwikVersions = explode(',', (string) $requiredVersion);
+ $numRequiredPiwikVersions = count($requiredPiwikVersions);
+
+ if ($numRequiredPiwikVersions > 2) {
+ // user is using custom piwik version require, we do not overwrite anything.
+ return;
+ }
+
+ if ($numRequiredPiwikVersions === 2 &&
+ !Common::stringEndsWith($requiredVersion, $secondPartPiwikVersionRequire)) {
+ // user is using custom piwik version require, we do not overwrite anything
+ return;
+ }
+
+ // if only one piwik version is defined we update it to make sure it does now specify an upper version limit
+
$dependency = new Dependency();
$missingVersion = $dependency->getMissingVersions($piwikVersion, $requiredVersion);
diff --git a/plugins/CoreConsole/Commands/GenerateUpdate.php b/plugins/CoreConsole/Commands/GenerateUpdate.php
index 8fc91fd50c..826448de38 100644
--- a/plugins/CoreConsole/Commands/GenerateUpdate.php
+++ b/plugins/CoreConsole/Commands/GenerateUpdate.php
@@ -82,10 +82,6 @@ class GenerateUpdate extends GeneratePluginBase
$className = str_replace('Updates_xx', '', $className);
$className = trim($className, '\\');
- if ($component !== 'core') {
- $className .= '\Updates';
- }
-
return $className;
}
diff --git a/plugins/CoreHome/angularjs/common/services/report-metadata-model.js b/plugins/CoreHome/angularjs/common/services/report-metadata-model.js
index f158861423..fcf8e4690e 100644
--- a/plugins/CoreHome/angularjs/common/services/report-metadata-model.js
+++ b/plugins/CoreHome/angularjs/common/services/report-metadata-model.js
@@ -40,6 +40,7 @@
reportsPromise = piwikApi.fetch({
method: 'API.getReportMetadata',
idSites: piwik.idSite || piwik.broadcast.getValueFromUrl('idSite'),
+ filter_limit: '-1'
}).then(function (response) {
model.reports = response;
return response;
diff --git a/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js b/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js
index 1b1e406c95..1f0bbd91d7 100644
--- a/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js
+++ b/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js
@@ -46,7 +46,7 @@
function getAllPages()
{
if (!fetchAllPagesPromise) {
- fetchAllPagesPromise = piwikApi.fetch({method: 'API.getReportPagesMetadata'}).then(function (response) {
+ fetchAllPagesPromise = piwikApi.fetch({method: 'API.getReportPagesMetadata', filter_limit: '-1'}).then(function (response) {
model.pages = response;
return response;
});
diff --git a/plugins/CoreHome/images/applePinnedTab.svg b/plugins/CoreHome/images/applePinnedTab.svg
new file mode 100644
index 0000000000..8e024a6e6b
--- /dev/null
+++ b/plugins/CoreHome/images/applePinnedTab.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 16 16">
+
+<g transform="translate(0 500) scale(0.1 -0.1)" fill="#000000" stroke="none">
+
+<path d="M 32.8941 4997.94 c -4.32522 -0.632959 -7.8065 -2.46151 -10.7955 -5.59114 c -1.19559 -1.30108 -2.60217 -3.12963 -3.12963 -4.11424 c -2.14503 -4.00874 -2.03954 0.0703289 -2.03954 -69.0629 c 0 -53.5906 0.0703289 -63.4015 0.527466 -65.019 c 1.72306 -6.54058 7.41969 -12.0262 13.8899 -13.4328 c 2.81315 -0.597795 8.54495 -0.246151 10.9713 0.703288 c 4.53621 1.75822 8.2988 5.20433 10.3383 9.45923 c 1.72306 3.62194 1.89888 5.45048 1.89888 20.747 l 0 14.1361 l 19.6217 0 c 24.0173 0.0351644 27.0414 0.281316 35.2348 2.88348 c 16.5976 5.30983 30.3117 18.8481 35.8677 35.3754 c 2.21536 6.68124 2.60217 9.28341 2.60217 18.0042 c 0 7.45486 -0.0351644 8.15815 -0.984604 12.0966 c -1.23075 5.27466 -2.49667 8.75594 -4.99335 13.6086 c -2.74282 5.34499 -5.66147 9.35374 -10.1625 13.8548 c -9.52956 9.52956 -20.8173 14.7691 -35.0589 16.3163 c -3.90325 0.457138 -60.9048 0.457138 -63.7883 0.0351644 Z m 60.3421 -34.5666 c 6.3296 -1.89888 11.7098 -6.36476 14.3471 -11.8504 c 1.79339 -3.79776 2.32085 -6.08345 2.32085 -10.0219 c -0.0351644 -10.057 -7.24387 -19.1294 -17.1251 -21.4503 c -1.75822 -0.421973 -5.59114 -0.527466 -20.1844 -0.527466 l -18.0393 0 l 0 22.3646 l 0 22.3294 l 18.391 -0.140658 c 15.7537 -0.105493 18.6371 -0.210987 20.2899 -0.703288 Z" transform=""></path>
+</g>
+
+</svg>
diff --git a/plugins/CoreHome/javascripts/dataTable.js b/plugins/CoreHome/javascripts/dataTable.js
index 9340c64f31..b58df6fd2c 100644
--- a/plugins/CoreHome/javascripts/dataTable.js
+++ b/plugins/CoreHome/javascripts/dataTable.js
@@ -1671,7 +1671,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
$('th:has(.columnDocumentation)', domElem).each(function () {
var th = $(this);
var tooltip = th.find('.columnDocumentation');
-
+
tooltip.next().hover(function () {
var left = (-1 * tooltip.outerWidth() / 2) + th.width() / 2;
var top = -1 * tooltip.outerHeight();
diff --git a/plugins/CoreHome/stylesheets/dataTable/_entityTable.less b/plugins/CoreHome/stylesheets/dataTable/_entityTable.less
index 92957c2040..4326119505 100644
--- a/plugins/CoreHome/stylesheets/dataTable/_entityTable.less
+++ b/plugins/CoreHome/stylesheets/dataTable/_entityTable.less
@@ -70,6 +70,9 @@ table.entityTable {
background-color: @theme-color-background-base !important;
}
}
+.card tr:hover button.table-action {
+ background-color: @theme-color-background-tinyContrast !important;
+}
.table-action {
padding: 16px;
height: auto;
@@ -119,4 +122,4 @@ table.entityTable {
text-decoration: underline;
}
}
-} \ No newline at end of file
+}
diff --git a/plugins/CoreHome/templates/_applePinnedTabIcon.twig b/plugins/CoreHome/templates/_applePinnedTabIcon.twig
new file mode 100644
index 0000000000..55a72c7ef1
--- /dev/null
+++ b/plugins/CoreHome/templates/_applePinnedTabIcon.twig
@@ -0,0 +1,4 @@
+{% if isCustomLogo and customFavicon is defined and customFavicon %}
+{% else %}
+ <link rel="mask-icon" href="plugins/CoreHome/images/applePinnedTab.svg" color="#d4291f">
+{% endif %}
diff --git a/plugins/CoreUpdater/templates/layout.twig b/plugins/CoreUpdater/templates/layout.twig
index ff447676b7..1af26ed70b 100644
--- a/plugins/CoreUpdater/templates/layout.twig
+++ b/plugins/CoreUpdater/templates/layout.twig
@@ -13,6 +13,7 @@
<script type="text/javascript">{{ getJavascriptTranslations()|raw }}</script>
{% include "@CoreHome/_favicon.twig" %}
+ {% include "@CoreHome/_applePinnedTabIcon.twig" %}
</head>
<body id="simple" ng-app="app">
diff --git a/plugins/CustomVariables/angularjs/manage-custom-vars/manage-custom-vars.model.js b/plugins/CustomVariables/angularjs/manage-custom-vars/manage-custom-vars.model.js
index ceb6442a8f..21a3b44d46 100644
--- a/plugins/CustomVariables/angularjs/manage-custom-vars/manage-custom-vars.model.js
+++ b/plugins/CustomVariables/angularjs/manage-custom-vars/manage-custom-vars.model.js
@@ -35,7 +35,7 @@
model.isLoading = true;
fetchCustomVariables().then(function () {
- return piwikApi.fetch({method: 'CustomVariables.getUsagesOfSlots'});
+ return piwikApi.fetch({method: 'CustomVariables.getUsagesOfSlots', filter_limit: '-1'});
}).then(function (customVariables) {
model.customVariables = customVariables;
diff --git a/plugins/Dashboard/angularjs/common/services/dashboards-model.js b/plugins/Dashboard/angularjs/common/services/dashboards-model.js
index 8cdfbec772..df2e147fa1 100644
--- a/plugins/Dashboard/angularjs/common/services/dashboards-model.js
+++ b/plugins/Dashboard/angularjs/common/services/dashboards-model.js
@@ -55,7 +55,7 @@
function getAllDashboards()
{
if (!dashboardsPromise) {
- dashboardsPromise = piwikApi.fetch({method: 'Dashboard.getDashboards'}).then(function (response) {
+ dashboardsPromise = piwikApi.fetch({method: 'Dashboard.getDashboards', filter_limit: '-1'}).then(function (response) {
if (response) {
model.dashboards = response;
}
diff --git a/plugins/Dashboard/javascripts/dashboard.js b/plugins/Dashboard/javascripts/dashboard.js
index 48c3430824..27ef28dfa0 100644
--- a/plugins/Dashboard/javascripts/dashboard.js
+++ b/plugins/Dashboard/javascripts/dashboard.js
@@ -99,7 +99,8 @@ function copyDashboardToUser() {
ajaxRequest.addParams({
module: 'API',
method: 'UsersManager.getUsers',
- format: 'json'
+ format: 'json',
+ filter_limit: '-1'
}, 'get');
ajaxRequest.setCallback(
function (availableUsers) {
diff --git a/plugins/Dashboard/javascripts/dashboardObject.js b/plugins/Dashboard/javascripts/dashboardObject.js
index 13862ecd5b..4165bfcaec 100644
--- a/plugins/Dashboard/javascripts/dashboardObject.js
+++ b/plugins/Dashboard/javascripts/dashboardObject.js
@@ -585,7 +585,8 @@
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'Dashboard',
- action: 'getAllDashboards'
+ action: 'getAllDashboards',
+ filter_limit: '-1'
}, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(success);
diff --git a/plugins/Dashboard/javascripts/widgetMenu.js b/plugins/Dashboard/javascripts/widgetMenu.js
index 100674ce00..d3d96569eb 100644
--- a/plugins/Dashboard/javascripts/widgetMenu.js
+++ b/plugins/Dashboard/javascripts/widgetMenu.js
@@ -69,6 +69,7 @@ widgetsHelper.getAvailableWidgets = function (callback) {
ajaxRequest.addParams({
module: 'API',
method: 'API.getWidgetMetadata',
+ filter_limit: '-1',
format: 'JSON',
deep: '1',
idSite: piwik.idSite || broadcast.getValueFromUrl('idSite')
diff --git a/plugins/DevicesDetection/API.php b/plugins/DevicesDetection/API.php
index 69b3f80cdb..3cd5c13e80 100644
--- a/plugins/DevicesDetection/API.php
+++ b/plugins/DevicesDetection/API.php
@@ -56,7 +56,7 @@ class API extends \Piwik\Plugin\API
$mapping = DeviceParserAbstract::getAvailableDeviceTypeNames();
$dataTable->filter('AddSegmentByLabelMapping', array('deviceType', $mapping));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', __NAMESPACE__ . '\getDeviceTypeLogo'));
- $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getDeviceTypeLabel'));
+ $dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\getDeviceTypeLabel'));
return $dataTable;
}
@@ -94,7 +94,7 @@ class API extends \Piwik\Plugin\API
public function getBrand($idSite, $period, $date, $segment = false)
{
$dataTable = $this->getDataTable('DevicesDetection_brands', $idSite, $period, $date, $segment);
- $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getDeviceBrandLabel'));
+ $dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\getDeviceBrandLabel'));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', __NAMESPACE__ . '\getBrandLogo'));
$dataTable->filter('AddSegmentByLabel', array('deviceBrand'));
return $dataTable;
@@ -111,7 +111,7 @@ class API extends \Piwik\Plugin\API
public function getModel($idSite, $period, $date, $segment = false)
{
$dataTable = $this->getDataTable('DevicesDetection_models', $idSite, $period, $date, $segment);
- $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getModelName'));
+ $dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\getModelName'));
return $dataTable;
}
diff --git a/plugins/DevicesDetection/Archiver.php b/plugins/DevicesDetection/Archiver.php
index eac17db343..ea63485017 100644
--- a/plugins/DevicesDetection/Archiver.php
+++ b/plugins/DevicesDetection/Archiver.php
@@ -9,6 +9,7 @@
namespace Piwik\Plugins\DevicesDetection;
+use Piwik\Common;
use Piwik\Metrics;
class Archiver extends \Piwik\Plugin\Archiver
@@ -73,9 +74,30 @@ class Archiver extends \Piwik\Plugin\Archiver
private function aggregateByLabel($labelSQL, $recordName)
{
- $metrics = $this->getLogAggregator()->getMetricsFromVisitByDimension($labelSQL)->asDataTable();
- $report = $metrics->getSerialized($this->maximumRows, null, Metrics::INDEX_NB_VISITS);
+ $metrics = $this->getLogAggregator()->getMetricsFromVisitByDimension($labelSQL);
+
+ if (in_array($recordName, array(self::DEVICE_TYPE_RECORD_NAME, self::DEVICE_BRAND_RECORD_NAME, self::DEVICE_MODEL_RECORD_NAME))) {
+
+ $labelSQL = str_replace('log_visit.', 'log_conversion.', $labelSQL);
+
+ $query = $this->getLogAggregator()->queryConversionsByDimension(array($labelSQL));
+
+ if ($query === false) {
+ return;
+ }
+
+ while ($conversionRow = $query->fetch()) {
+
+ $metrics->sumMetricsGoals($conversionRow[$labelSQL], $conversionRow);
+ }
+ $metrics->enrichMetricsWithConversions();
+ }
+
+ $table = $metrics->asDataTable();
+ $report = $table->getSerialized($this->maximumRows, null, Metrics::INDEX_NB_VISITS);
+ Common::destroy($table);
$this->getProcessor()->insertBlobRecord($recordName, $report);
+ unset($table, $report);
}
}
diff --git a/plugins/DevicesDetection/Columns/DeviceBrand.php b/plugins/DevicesDetection/Columns/DeviceBrand.php
index f21d1ed15e..f10f5e5ca0 100644
--- a/plugins/DevicesDetection/Columns/DeviceBrand.php
+++ b/plugins/DevicesDetection/Columns/DeviceBrand.php
@@ -60,4 +60,15 @@ class DeviceBrand extends Base
return $parser->getBrand();
}
+
+ /**
+ * @param Request $request
+ * @param Visitor $visitor
+ * @param Action|null $action
+ * @return mixed
+ */
+ public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
+ {
+ return $visitor->getVisitorColumn('config_device_brand');
+ }
}
diff --git a/plugins/DevicesDetection/Columns/DeviceModel.php b/plugins/DevicesDetection/Columns/DeviceModel.php
index 488eeb615e..f28693e290 100644
--- a/plugins/DevicesDetection/Columns/DeviceModel.php
+++ b/plugins/DevicesDetection/Columns/DeviceModel.php
@@ -36,4 +36,15 @@ class DeviceModel extends Base
return $parser->getModel();
}
+
+ /**
+ * @param Request $request
+ * @param Visitor $visitor
+ * @param Action|null $action
+ * @return mixed
+ */
+ public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
+ {
+ return $visitor->getVisitorColumn('config_device_model');
+ }
}
diff --git a/plugins/DevicesDetection/Columns/DeviceType.php b/plugins/DevicesDetection/Columns/DeviceType.php
index 3c7320326b..3cdf5a6ae5 100644
--- a/plugins/DevicesDetection/Columns/DeviceType.php
+++ b/plugins/DevicesDetection/Columns/DeviceType.php
@@ -61,4 +61,15 @@ class DeviceType extends Base
return $parser->getDevice();
}
+
+ /**
+ * @param Request $request
+ * @param Visitor $visitor
+ * @param Action|null $action
+ * @return mixed
+ */
+ public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
+ {
+ return $visitor->getVisitorColumn('config_device_type');
+ }
} \ No newline at end of file
diff --git a/plugins/DevicesDetection/Reports/GetBrand.php b/plugins/DevicesDetection/Reports/GetBrand.php
index 41b9fd5366..1dc3f01c58 100644
--- a/plugins/DevicesDetection/Reports/GetBrand.php
+++ b/plugins/DevicesDetection/Reports/GetBrand.php
@@ -21,7 +21,7 @@ class GetBrand extends Base
$this->name = Piwik::translate('DevicesDetection_DeviceBrand');
$this->documentation = ''; // TODO
$this->order = 4;
-
+ $this->hasGoalMetrics = true;
$this->subcategoryId = 'DevicesDetection_Devices';
}
diff --git a/plugins/DevicesDetection/Reports/GetModel.php b/plugins/DevicesDetection/Reports/GetModel.php
index 154464691c..0490549f7a 100644
--- a/plugins/DevicesDetection/Reports/GetModel.php
+++ b/plugins/DevicesDetection/Reports/GetModel.php
@@ -21,7 +21,7 @@ class GetModel extends Base
$this->name = Piwik::translate('DevicesDetection_DeviceModel');
$this->documentation = ''; // TODO
$this->order = 2;
-
+ $this->hasGoalMetrics = true;
$this->subcategoryId = 'DevicesDetection_Devices';
}
diff --git a/plugins/DevicesDetection/Reports/GetType.php b/plugins/DevicesDetection/Reports/GetType.php
index b12f19f319..71abbd871c 100644
--- a/plugins/DevicesDetection/Reports/GetType.php
+++ b/plugins/DevicesDetection/Reports/GetType.php
@@ -22,7 +22,7 @@ class GetType extends Base
$this->name = Piwik::translate('DevicesDetection_DeviceType');
$this->documentation = ''; // TODO
$this->order = 0;
-
+ $this->hasGoalMetrics = true;
$this->subcategoryId = 'DevicesDetection_Devices';
}
diff --git a/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___API.getMetadata_day.xml b/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___API.getMetadata_day.xml
index 17b74553d8..cf3cc41002 100644
--- a/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___API.getMetadata_day.xml
+++ b/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___API.getMetadata_day.xml
@@ -27,8 +27,14 @@
<nb_actions_per_visit>Actions per Visit</nb_actions_per_visit>
<avg_time_on_site>Avg. Time on Website</avg_time_on_site>
<bounce_rate>Bounce Rate</bounce_rate>
- <conversion_rate>Conversion Rate</conversion_rate>
</processedMetrics>
+ <metricsGoal>
+ <nb_conversions>Conversions</nb_conversions>
+ <revenue>Revenue</revenue>
+ </metricsGoal>
+ <processedMetricsGoal>
+ <revenue_per_visit>Revenue per Visit</revenue_per_visit>
+ </processedMetricsGoal>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getType&amp;period=day&amp;date=2010-03-06</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getType&amp;period=day&amp;date=2010-02-05,2010-03-06</imageGraphEvolutionUrl>
<uniqueId>DevicesDetection_getType</uniqueId>
diff --git a/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___DevicesDetection.getBrowsers_day.xml b/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___DevicesDetection.getBrowsers_day.xml
index e2c2f35414..b04af03db4 100644
--- a/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___DevicesDetection.getBrowsers_day.xml
+++ b/plugins/DevicesDetection/tests/System/expected/test_UserSettingsBCTestUserSettings_UserSettings.getMobileVsDesktop___DevicesDetection.getBrowsers_day.xml
@@ -9,7 +9,15 @@
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>1</revenue>
<segment>deviceType==desktop</segment>
<logo>plugins/DevicesDetection/images/screens/normal.gif</logo>
</row>
@@ -73,4 +81,18 @@
<segment>deviceType==tv</segment>
<logo>plugins/DevicesDetection/images/screens/tv.png</logo>
</row>
+ <row>
+ <label>Unknown</label>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>42</revenue>
+ <nb_visits>0</nb_visits>
+ <logo>plugins/DevicesDetection/images/screens/unknown.gif</logo>
+ </row>
</result> \ No newline at end of file
diff --git a/plugins/Goals/lang/en.json b/plugins/Goals/lang/en.json
index 38e4ac7c43..4c886392b2 100644
--- a/plugins/Goals/lang/en.json
+++ b/plugins/Goals/lang/en.json
@@ -14,6 +14,7 @@
"CategoryTextGeneral_Visitors": "User location",
"CategoryTextReferrers_Referrers": "Referrers",
"CategoryTextVisitsSummary_VisitsSummary": "User attribute",
+ "CategoryTextDevicesDetection_DevicesDetection": "Devices",
"CategoryTextGeneral_Visit": "engagement",
"ChooseGoal": "Choose Goal",
"ClickOutlink": "Click on a Link to an external website",
diff --git a/plugins/Morpheus/templates/layout.twig b/plugins/Morpheus/templates/layout.twig
index bca60d1e95..29f2feefab 100644
--- a/plugins/Morpheus/templates/layout.twig
+++ b/plugins/Morpheus/templates/layout.twig
@@ -21,6 +21,7 @@
{% endblock %}
{% include "@CoreHome/_favicon.twig" %}
+ {% include "@CoreHome/_applePinnedTabIcon.twig" %}
{% include "_jsGlobalVariables.twig" %}
{% include "_jsCssIncludes.twig" %}
diff --git a/plugins/Overlay/templates/showErrorWrongDomain.twig b/plugins/Overlay/templates/showErrorWrongDomain.twig
index 8bc5e87393..9d42b3a79c 100644
--- a/plugins/Overlay/templates/showErrorWrongDomain.twig
+++ b/plugins/Overlay/templates/showErrorWrongDomain.twig
@@ -6,6 +6,7 @@
<title></title>
<meta name="generator" content="Piwik - free/libre analytics platform"/>
{% include "@CoreHome/_favicon.twig" %}
+ {% include "@CoreHome/_applePinnedTabIcon.twig" %}
<link rel="stylesheet" type="text/css" href="plugins/Overlay/stylesheets/showErrorWrongDomain.css" />
</head>
<body>
diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js
index c9901379b9..3ccb403e1f 100644
--- a/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js
+++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js
@@ -36,7 +36,7 @@
function fetchAvailableTypes()
{
if (!typesPromise) {
- typesPromise = piwikApi.fetch({method: 'API.getAvailableMeasurableTypes'}).then(function (types) {
+ typesPromise = piwikApi.fetch({method: 'API.getAvailableMeasurableTypes', filter_limit: '-1'}).then(function (types) {
angular.forEach(types, function (type) {
model.typesById[type.id] = type;
diff --git a/plugins/Transitions/javascripts/transitions.js b/plugins/Transitions/javascripts/transitions.js
index 0da9580cf0..789cee2915 100644
--- a/plugins/Transitions/javascripts/transitions.js
+++ b/plugins/Transitions/javascripts/transitions.js
@@ -1477,6 +1477,7 @@ Piwik_Transitions_Ajax.prototype.callApi = function (method, params, callback) {
params.format = 'JSON';
params.module = 'API';
params.method = method;
+ params.filter_limit = '-1';
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(params, 'get');
diff --git a/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js b/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js
index d44f145ad9..dd465557fa 100644
--- a/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js
+++ b/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js
@@ -79,7 +79,8 @@
piwikApi.fetch({
method: 'UsersManager.getUsersAccessFromSite',
userLogin: userLogin,
- idSite: idSites
+ idSite: idSites,
+ filter_limit: '-1'
}, requestOptions).then(function (users) {
var userLogins = [];
if (users) {
@@ -103,7 +104,7 @@
{
return piwikApi.fetch({
method: 'UsersManager.userExists',
- userLogin: usernameOrEmail,
+ userLogin: usernameOrEmail
}, requestOptions).then(function (response) {
return response;
@@ -117,7 +118,7 @@
{
return piwikApi.fetch({
method: 'UsersManager.getUserLoginFromUserEmail',
- userEmail: usernameOrEmail,
+ userEmail: usernameOrEmail
}, requestOptions).then(function (response) {
return response;
}, function () {
diff --git a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
index 79525cd28c..677272593d 100644
--- a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
+++ b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
@@ -119,6 +119,11 @@ class BackwardsCompatibility1XTest extends SystemTestCase
// did not exist in Piwik 1.X
'DevicesDetection.getBrowserEngines',
+ // now enriched with goal metrics
+ 'DevicesDetection.getType',
+ 'DevicesDetection.getBrand',
+ 'DevicesDetection.getModel',
+
// we test VisitFrequency explicitly
'VisitFrequency.get',
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
index 0adfc71aee..19c0f325af 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
@@ -7,9 +7,18 @@
<max_actions>3</max_actions>
<sum_visit_length>549</sum_visit_length>
<bounce_count>31</bounce_count>
- <nb_visits_converted>31</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>31</nb_conversions>
+ <nb_visits_converted>31</nb_visits_converted>
+ <revenue>155</revenue>
+ </row>
+ </goals>
+ <nb_conversions>31</nb_conversions>
+ <revenue>155</revenue>
<sum_daily_nb_uniq_visitors>33</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>2</sum_daily_nb_users>
+ <nb_visits_converted>0</nb_visits_converted>
<logo>plugins/DevicesDetection/images/brand/Unknown.ico</logo>
<segment>deviceBrand==Unknown</segment>
</row>
@@ -20,7 +29,15 @@
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>2</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>2</nb_conversions>
+ <nb_visits_converted>2</nb_visits_converted>
+ <revenue>10</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>10</revenue>
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<logo>plugins/DevicesDetection/images/brand/HTC.ico</logo>
@@ -33,7 +50,15 @@
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>1</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>5</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>5</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<logo>plugins/DevicesDetection/images/brand/Apple.ico</logo>
@@ -46,7 +71,15 @@
<max_actions>3</max_actions>
<sum_visit_length>2</sum_visit_length>
<bounce_count>0</bounce_count>
- <nb_visits_converted>1</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>5</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>5</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>1</sum_daily_nb_users>
<logo>plugins/DevicesDetection/images/brand/Samsung.ico</logo>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getModel_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getModel_month.xml
index 6a19338c7d..5b366a921e 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getModel_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getModel_month.xml
@@ -7,9 +7,18 @@
<max_actions>3</max_actions>
<sum_visit_length>549</sum_visit_length>
<bounce_count>31</bounce_count>
- <nb_visits_converted>31</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>31</nb_conversions>
+ <nb_visits_converted>31</nb_visits_converted>
+ <revenue>155</revenue>
+ </row>
+ </goals>
+ <nb_conversions>31</nb_conversions>
+ <revenue>155</revenue>
<sum_daily_nb_uniq_visitors>33</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>2</sum_daily_nb_users>
+ <nb_visits_converted>0</nb_visits_converted>
</row>
<row>
<label>HTC - Vision</label>
@@ -18,7 +27,15 @@
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>2</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>2</nb_conversions>
+ <nb_visits_converted>2</nb_visits_converted>
+ <revenue>10</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>10</revenue>
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
</row>
@@ -29,7 +46,15 @@
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>1</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>5</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>5</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
</row>
@@ -40,7 +65,15 @@
<max_actions>3</max_actions>
<sum_visit_length>2</sum_visit_length>
<bounce_count>0</bounce_count>
- <nb_visits_converted>1</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>5</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>5</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>1</sum_daily_nb_users>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml
index 9215886300..4f8796278f 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml
@@ -7,7 +7,15 @@
<max_actions>3</max_actions>
<sum_visit_length>549</sum_visit_length>
<bounce_count>27</bounce_count>
- <nb_visits_converted>30</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>30</nb_conversions>
+ <nb_visits_converted>30</nb_visits_converted>
+ <revenue>150</revenue>
+ </row>
+ </goals>
+ <nb_conversions>30</nb_conversions>
+ <revenue>150</revenue>
<sum_daily_nb_uniq_visitors>29</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>2</sum_daily_nb_users>
<segment>deviceType==desktop</segment>
@@ -20,7 +28,15 @@
<max_actions>3</max_actions>
<sum_visit_length>2</sum_visit_length>
<bounce_count>3</bounce_count>
- <nb_visits_converted>4</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>4</nb_conversions>
+ <nb_visits_converted>4</nb_visits_converted>
+ <revenue>20</revenue>
+ </row>
+ </goals>
+ <nb_conversions>4</nb_conversions>
+ <revenue>20</revenue>
<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>1</sum_daily_nb_users>
<segment>deviceType==smartphone</segment>
@@ -33,9 +49,18 @@
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>4</bounce_count>
- <nb_visits_converted>1</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>5</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>5</revenue>
<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
+ <nb_visits_converted>0</nb_visits_converted>
<logo>plugins/DevicesDetection/images/screens/unknown.gif</logo>
</row>
<row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml
index 4cf37854e3..13a8112681 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml
@@ -8,7 +8,20 @@
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>43</revenue>
<logo>plugins/DevicesDetection/images/brand/Unknown.ico</logo>
<segment>deviceBrand==Unknown</segment>
</row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml
index 050a4cc6c8..aa4fc41878 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml
@@ -8,6 +8,19 @@
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>43</revenue>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml
index 745f9c6095..643a67f1a7 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml
@@ -8,7 +8,15 @@
<max_actions>7</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>1</revenue>
<segment>deviceType==desktop</segment>
<logo>plugins/DevicesDetection/images/screens/normal.gif</logo>
</row>
@@ -72,4 +80,18 @@
<segment>deviceType==tv</segment>
<logo>plugins/DevicesDetection/images/screens/tv.png</logo>
</row>
+ <row>
+ <label>Unknown</label>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>42</revenue>
+ <nb_visits>0</nb_visits>
+ <logo>plugins/DevicesDetection/images/screens/unknown.gif</logo>
+ </row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
index a6ccba6e74..b2ee7881e0 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
@@ -9,7 +9,20 @@
<max_actions>8</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>43</revenue>
<logo>plugins/DevicesDetection/images/brand/Unknown.ico</logo>
<segment>deviceBrand==Unknown</segment>
</row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getModel_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getModel_day.xml
index 302503d00e..0e8f519c31 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getModel_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getModel_day.xml
@@ -9,6 +9,19 @@
<max_actions>8</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>43</revenue>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml
index 6b1fedb0c5..37691b2a89 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml
@@ -9,7 +9,15 @@
<max_actions>8</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
- <nb_visits_converted>2</nb_visits_converted>
+ <goals>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>1</revenue>
<segment>deviceType==desktop</segment>
<logo>plugins/DevicesDetection/images/screens/normal.gif</logo>
</row>
@@ -73,4 +81,18 @@
<segment>deviceType==tv</segment>
<logo>plugins/DevicesDetection/images/screens/tv.png</logo>
</row>
+ <row>
+ <label>Unknown</label>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>42</revenue>
+ <nb_visits>0</nb_visits>
+ <logo>plugins/DevicesDetection/images/screens/unknown.gif</logo>
+ </row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml b/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml
index 9ee74c6530..a8c4567b81 100644
--- a/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml
+++ b/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml
@@ -60,7 +60,6 @@
<nb_actions_per_visit>Actions per Visit</nb_actions_per_visit>
<avg_time_on_site>Avg. Time on Website</avg_time_on_site>
<bounce_rate>Bounce Rate</bounce_rate>
- <conversion_rate>Conversion Rate</conversion_rate>
</columns>
</metadata>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
index 137e38b598..e29c38ad88 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
@@ -14,17 +14,17 @@ Custom Variables
No data available
Device type
-label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-Unknown,8,40,0%,5,00:15:01,0%
-Desktop,3,3,0%,1,00:00:00,100%
+label,nb_visits,nb_actions,nb_actions_per_visit,avg_time_on_site,bounce_rate,revenue
+Unknown,8,40,5,00:15:01,0%,$ 0
+Desktop,3,3,1,00:00:00,100%,$ 0
Device model
-label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-Unknown,11,43,0%,3.9,00:10:55,27%
+label,nb_visits,nb_actions,nb_actions_per_visit,avg_time_on_site,bounce_rate,revenue
+Unknown,11,43,3.9,00:10:55,27%,$ 0
Device brand
-label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-Unknown,11,43,0%,3.9,00:10:55,27%
+label,nb_visits,nb_actions,nb_actions_per_visit,avg_time_on_site,bounce_rate,revenue
+Unknown,11,43,3.9,00:10:55,27%,$ 0
Screen Resolution
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
index dc8860833a..3d01673888 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
@@ -538,7 +538,7 @@
&nbsp;Bounce Rate&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
+ &nbsp;Revenue&nbsp;&nbsp;
</th>
</thead>
<tbody>
@@ -564,7 +564,7 @@
0%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
+ $ 0
</td>
</tr>
@@ -589,7 +589,7 @@
100%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
+ $ 0
</td>
</tr>
</tbody>
@@ -625,7 +625,7 @@
&nbsp;Bounce Rate&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
+ &nbsp;Revenue&nbsp;&nbsp;
</th>
</thead>
<tbody>
@@ -649,7 +649,7 @@
27%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
+ $ 0
</td>
</tr>
</tbody>
@@ -685,7 +685,7 @@
&nbsp;Bounce Rate&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
+ &nbsp;Revenue&nbsp;&nbsp;
</th>
</thead>
<tbody>
@@ -711,7 +711,7 @@
27%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 0%
+ $ 0
</td>
</tr>
</tbody>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
index 1129cf1caa..05747a4f62 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
@@ -196,8 +196,14 @@
<nb_actions_per_visit>Actions per Visit</nb_actions_per_visit>
<avg_time_on_site>Avg. Time on Website</avg_time_on_site>
<bounce_rate>Bounce Rate</bounce_rate>
- <conversion_rate>Conversion Rate</conversion_rate>
</processedMetrics>
+ <metricsGoal>
+ <nb_conversions>Conversions</nb_conversions>
+ <revenue>Revenue</revenue>
+ </metricsGoal>
+ <processedMetricsGoal>
+ <revenue_per_visit>Revenue per Visit</revenue_per_visit>
+ </processedMetricsGoal>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getType&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getType&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
<uniqueId>DevicesDetection_getType</uniqueId>
@@ -229,8 +235,14 @@
<nb_actions_per_visit>Actions per Visit</nb_actions_per_visit>
<avg_time_on_site>Avg. Time on Website</avg_time_on_site>
<bounce_rate>Bounce Rate</bounce_rate>
- <conversion_rate>Conversion Rate</conversion_rate>
</processedMetrics>
+ <metricsGoal>
+ <nb_conversions>Conversions</nb_conversions>
+ <revenue>Revenue</revenue>
+ </metricsGoal>
+ <processedMetricsGoal>
+ <revenue_per_visit>Revenue per Visit</revenue_per_visit>
+ </processedMetricsGoal>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getModel&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getModel&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
<uniqueId>DevicesDetection_getModel</uniqueId>
@@ -262,8 +274,14 @@
<nb_actions_per_visit>Actions per Visit</nb_actions_per_visit>
<avg_time_on_site>Avg. Time on Website</avg_time_on_site>
<bounce_rate>Bounce Rate</bounce_rate>
- <conversion_rate>Conversion Rate</conversion_rate>
</processedMetrics>
+ <metricsGoal>
+ <nb_conversions>Conversions</nb_conversions>
+ <revenue>Revenue</revenue>
+ </metricsGoal>
+ <processedMetricsGoal>
+ <revenue_per_visit>Revenue per Visit</revenue_per_visit>
+ </processedMetricsGoal>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getBrand&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=DevicesDetection&amp;apiAction=getBrand&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
<uniqueId>DevicesDetection_getBrand</uniqueId>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
index 188428ebdb..61fc256ebc 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
@@ -1538,6 +1538,90 @@
<isReport>1</isReport>
</row>
<row>
+ <name>Device type</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <order>201</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>1</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device model</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <order>202</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>1</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetModelforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device brand</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <order>203</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>1</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetBrandforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
<name>Country</name>
<category>
<id>Goals by User location</id>
@@ -1552,7 +1636,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCountry</action>
- <order>201</order>
+ <order>204</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -1580,7 +1664,7 @@
</subcategory>
<module>UserCountry</module>
<action>getContinent</action>
- <order>202</order>
+ <order>205</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -1608,7 +1692,7 @@
</subcategory>
<module>UserCountry</module>
<action>getRegion</action>
- <order>203</order>
+ <order>206</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -1636,7 +1720,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCity</action>
- <order>204</order>
+ <order>207</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2040,6 +2124,90 @@
<isReport>1</isReport>
</row>
<row>
+ <name>Device type</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <order>201</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>2</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device model</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <order>202</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>2</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetModelforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device brand</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <order>203</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>2</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetBrandforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
<name>Country</name>
<category>
<id>Goals by User location</id>
@@ -2054,7 +2222,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCountry</action>
- <order>201</order>
+ <order>204</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2082,7 +2250,7 @@
</subcategory>
<module>UserCountry</module>
<action>getContinent</action>
- <order>202</order>
+ <order>205</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2110,7 +2278,7 @@
</subcategory>
<module>UserCountry</module>
<action>getRegion</action>
- <order>203</order>
+ <order>206</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2138,7 +2306,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCity</action>
- <order>204</order>
+ <order>207</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2542,6 +2710,90 @@
<isReport>1</isReport>
</row>
<row>
+ <name>Device type</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <order>201</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>3</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device model</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <order>202</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>3</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetModelforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device brand</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <order>203</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>3</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetBrandforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
<name>Country</name>
<category>
<id>Goals by User location</id>
@@ -2556,7 +2808,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCountry</action>
- <order>201</order>
+ <order>204</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2584,7 +2836,7 @@
</subcategory>
<module>UserCountry</module>
<action>getContinent</action>
- <order>202</order>
+ <order>205</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2612,7 +2864,7 @@
</subcategory>
<module>UserCountry</module>
<action>getRegion</action>
- <order>203</order>
+ <order>206</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -2640,7 +2892,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCity</action>
- <order>204</order>
+ <order>207</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3097,6 +3349,90 @@
<isReport>1</isReport>
</row>
<row>
+ <name>Device type</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <order>201</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>0</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device model</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <order>202</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>0</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetModelforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device brand</name>
+ <category>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Goals by User location</id>
+ <name>Goals by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <order>203</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>0</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetBrandforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
<name>Country</name>
<category>
<id>Goals by User location</id>
@@ -3111,7 +3447,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCountry</action>
- <order>201</order>
+ <order>204</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3139,7 +3475,7 @@
</subcategory>
<module>UserCountry</module>
<action>getContinent</action>
- <order>202</order>
+ <order>205</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3167,7 +3503,7 @@
</subcategory>
<module>UserCountry</module>
<action>getRegion</action>
- <order>203</order>
+ <order>206</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3195,7 +3531,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCity</action>
- <order>204</order>
+ <order>207</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3768,6 +4104,90 @@
<isReport>1</isReport>
</row>
<row>
+ <name>Device type</name>
+ <category>
+ <id>Sales by User location</id>
+ <name>Sales by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Sales by User location</id>
+ <name>Sales by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <order>201</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getType</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>ecommerceOrder</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device model</name>
+ <category>
+ <id>Sales by User location</id>
+ <name>Sales by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Sales by User location</id>
+ <name>Sales by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <order>202</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getModel</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>ecommerceOrder</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetModelforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Device brand</name>
+ <category>
+ <id>Sales by User location</id>
+ <name>Sales by User location</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory>
+ <id>Sales by User location</id>
+ <name>Sales by User location</name>
+ <order>99</order>
+ </subcategory>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <order>203</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>tableGoals</viewDataTable>
+ <module>DevicesDetection</module>
+ <action>getBrand</action>
+ <documentationForGoalsPage>1</documentationForGoalsPage>
+ <idGoal>ecommerceOrder</idGoal>
+ </parameters>
+ <uniqueId>widgetDevicesDetectiongetBrandforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <viewDataTable>tableGoals</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
<name>Country</name>
<category>
<id>Sales by User location</id>
@@ -3782,7 +4202,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCountry</action>
- <order>201</order>
+ <order>204</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3810,7 +4230,7 @@
</subcategory>
<module>UserCountry</module>
<action>getContinent</action>
- <order>202</order>
+ <order>205</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3838,7 +4258,7 @@
</subcategory>
<module>UserCountry</module>
<action>getRegion</action>
- <order>203</order>
+ <order>206</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
@@ -3866,7 +4286,7 @@
</subcategory>
<module>UserCountry</module>
<action>getCity</action>
- <order>204</order>
+ <order>207</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
index b3855b3029..ad3603d5f9 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
@@ -17,16 +17,16 @@ VisitorType,5,16,$ 13361.11,3.2,00:22:49,20%
VisitorName,4,12,$ 13351.11,3,00:25:32,25%
Device type
-label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-Desktop,5,16,80%,3.2,00:22:49,20%
+label,nb_visits,nb_actions,revenue,nb_actions_per_visit,avg_time_on_site,bounce_rate
+Desktop,5,16,$ 250,3.2,00:22:49,20%
Device model
-label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-Unknown,5,16,80%,3.2,00:22:49,20%
+label,nb_visits,nb_actions,revenue,nb_actions_per_visit,avg_time_on_site,bounce_rate
+Unknown,5,16,$ 13361.11,3.2,00:22:49,20%
Device brand
-label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-Unknown,5,16,80%,3.2,00:22:49,20%
+label,nb_visits,nb_actions,revenue,nb_actions_per_visit,avg_time_on_site,bounce_rate
+Unknown,5,16,$ 13361.11,3.2,00:22:49,20%
Screen Resolution
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
index 5a7735b4d9..173df28cda 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
@@ -699,7 +699,7 @@
&nbsp;Bounce Rate&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
+ &nbsp;Revenue&nbsp;&nbsp;
</th>
</thead>
<tbody>
@@ -725,7 +725,7 @@
20%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 80%
+ $ 250
</td>
</tr>
</tbody>
@@ -761,7 +761,7 @@
&nbsp;Bounce Rate&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
+ &nbsp;Revenue&nbsp;&nbsp;
</th>
</thead>
<tbody>
@@ -785,7 +785,7 @@
20%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 80%
+ $ 13361.11
</td>
</tr>
</tbody>
@@ -821,7 +821,7 @@
&nbsp;Bounce Rate&nbsp;&nbsp;
</th>
<th style="font-weight: normal; font-size:10px; text-align:left; padding: 6px 0;">
- &nbsp;Conversion Rate&nbsp;&nbsp;
+ &nbsp;Revenue&nbsp;&nbsp;
</th>
</thead>
<tbody>
@@ -847,7 +847,7 @@
20%
</td>
<td style="font-size: 13px; border-left: 1px solid rgb(217,217,217); padding: 5px 0 5px 5px;">
- 80%
+ $ 13361.11
</td>
</tr>
</tbody>
diff --git a/tests/PHPUnit/Unit/API/ResponseBuilderTest.php b/tests/PHPUnit/Unit/API/ResponseBuilderTest.php
index 14409c1913..6746b48c1e 100644
--- a/tests/PHPUnit/Unit/API/ResponseBuilderTest.php
+++ b/tests/PHPUnit/Unit/API/ResponseBuilderTest.php
@@ -234,7 +234,7 @@ class ResponseBuilderTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expectedResponse, $response);
}
- public function test_getResponse_shouldNotApplyLimit_IfLimitIsDefaultFilterLimitValueAndSetBySystem()
+ public function test_getResponse_shouldAlwaysApplyDefaultFilterLimit_EvenWhenResponseIsAnArray()
{
$input = range(0, 200);
$limit = Config::getInstance()->General['API_datatable_default_limit'];
@@ -246,7 +246,7 @@ class ResponseBuilderTest extends \PHPUnit_Framework_TestCase
'filter_offset' => 0));
$response = $builder->getResponse($input);
- $this->assertEquals(range(0, 200), $response);
+ $this->assertEquals(range(0, 99), $response);
}
public function test_getResponse_shouldApplyLimit_IfLimitIsSetBySystemButDifferentToDefaultLimit()
@@ -272,10 +272,11 @@ class ResponseBuilderTest extends \PHPUnit_Framework_TestCase
$this->assertLimitedResponseEquals($expected, $input, $limit = 15, $offset = 30);
}
- public function test_getResponse_shouldNotApplyFilterOffsetOnIndexedArray_IfNoFilterLimitIsSetButOffset()
+ public function test_getResponse_shouldApplyFilterOffsetOnIndexedArray_IfNoFilterLimitIsSetButOffset()
{
$input = range(0, 100);
- $this->assertLimitedResponseEquals($input, $input, $limit = null, $offset = 30);
+ $expected = range(30, 100);
+ $this->assertLimitedResponseEquals($expected, $input, $limit = null, $offset = 30);
}
public function test_getResponse_shouldReturnEmptyArrayOnIndexedArray_IfFilterLimitIsZero()
@@ -284,10 +285,11 @@ class ResponseBuilderTest extends \PHPUnit_Framework_TestCase
$this->assertLimitedResponseEquals($expected = array(), $input, $limit = 0, $offset = 30);
}
- public function test_getResponse_shouldIgnoreFilterOffsetOnIndexedArray_IfFilterLimitIsMinusOne()
+ public function test_getResponse_shouldApplyFilterOffsetOnIndexedArray_IfFilterLimitIsMinusOne()
{
$input = range(0, 100);
- $this->assertLimitedResponseEquals($input, $input, $limit = -1, $offset = 30);
+ $expected = range(30, 100);
+ $this->assertLimitedResponseEquals($expected, $input, $limit = -1, $offset = 30);
}
public function test_getResponse_shouldReturnAllOnIndexedArray_IfFilterLimitIsMinusOne()
diff --git a/tests/UI/expected-ui-screenshots b/tests/UI/expected-ui-screenshots
-Subproject e9575899132b28d25de29fe5f054a2341868fe1
+Subproject dd1979738dc938b193d9ad0eb570707fce19ce2