diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php index e714ecded7b02a6ea8bd5247a003d488ad2b214e..b6f316304652830a49b280e196ba5c0e361376c9 100644 --- a/core/Tracker/Request.php +++ b/core/Tracker/Request.php @@ -407,6 +407,10 @@ class Request { $this->params[$name] = $value; unset($this->paramsCache[$name]); + + if ($name === 'cdt') { + $this->cdtCache = null; + } } private function hasParam($name) diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644 --- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml @@ -14,8 +14,8 @@ <pageId>1</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> @@ -117,8 +117,8 @@ <pageId>13</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644 --- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml +++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml @@ -14,8 +14,8 @@ <pageId>1</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> @@ -117,8 +117,8 @@ <pageId>13</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644 --- a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml @@ -14,8 +14,8 @@ <pageId>1</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> @@ -117,8 +117,8 @@ <pageId>13</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644 --- a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml @@ -14,8 +14,8 @@ <pageId>1</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> @@ -117,8 +117,8 @@ <pageId>13</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> diff --git a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644 --- a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml @@ -14,8 +14,8 @@ <pageId>1</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> @@ -117,8 +117,8 @@ <pageId>13</pageId> <generationTime>0.33s</generationTime> - <timeSpent>270</timeSpent> - <timeSpentPretty>4 min 30s</timeSpentPretty> + <timeSpent>271</timeSpent> + <timeSpentPretty>4 min 31s</timeSpentPretty> <icon /> </row> diff --git a/plugins/CoreHome/Columns/VisitLastActionTime.php b/plugins/CoreHome/Columns/VisitLastActionTime.php index 15e6ea88674346a686f056bce41f79a0c545228f..4ba0761c2a5fb3c90e6adf995583a1bc5d4f7aef 100644 --- a/plugins/CoreHome/Columns/VisitLastActionTime.php +++ b/plugins/CoreHome/Columns/VisitLastActionTime.php @@ -51,6 +51,10 @@ class VisitLastActionTime extends VisitDimension */ public function onExistingVisit(Request $request, Visitor $visitor, $action) { + if ($request->getParam('ping') == 1) { + return false; + } + return $this->onNewVisit($request, $visitor, $action); } } \ No newline at end of file diff --git a/plugins/Live/Visitor.php b/plugins/Live/Visitor.php index 1525bfa5cff006cd8d4a702b16c416eb2f9ee379..4d15d5d3f6ed057ef96ed9e6c01e206a5fcc5025 100644 --- a/plugins/Live/Visitor.php +++ b/plugins/Live/Visitor.php @@ -359,6 +359,8 @@ class Visitor implements VisitorInterface $ecommerceConversion['itemDetails'] = $itemsDetails; } + $actionDetails = array_values($actionDetails); + // Enrich with time spent per action foreach($actionDetails as $actionIdx => &$actionDetail) { @@ -367,22 +369,24 @@ class Visitor implements VisitorInterface if ($nextActionFound) { $actionDetail['timeSpent'] = $actionDetails[$actionIdx + 1]['timeSpentRef']; } else { + // Last action of a visit. // By default, Piwik does not know how long the user stayed on the page // If enableHeartBeatTimer() is used in piwik.js then we can find the accurate time on page for the last pageview - $timeOfLastActionOrPingInVisitRow = $visitorDetailsArray['lastActionTimestamp']; - + $visitTotalTime = $visitorDetailsArray['visitDuration']; $timeOfLastAction = Date::factory($actionDetail['serverTimePretty'])->getTimestamp(); - $timeSpentOnPage = $timeOfLastActionOrPingInVisitRow - $timeOfLastAction; + $timeSpentOnAllActionsApartFromLastOne = ($timeOfLastAction - $visitorDetailsArray['firstActionTimestamp']); + $timeSpentOnPage = $visitTotalTime - $timeSpentOnAllActionsApartFromLastOne; // Safe net, we assume the time is correct when it's more than 10 seconds - if($timeSpentOnPage > 10) { + if ($timeSpentOnPage > 10) { $actionDetail['timeSpent'] = $timeSpentOnPage; } + } - if(isset($actionDetail['timeSpent'])) { + if (isset($actionDetail['timeSpent'])) { $actionDetail['timeSpentPretty'] = $formatter->getPrettyTimeFromSeconds($actionDetail['timeSpent'], true); } diff --git a/tests/PHPUnit/Integration/Tracker/PingRequestTest.php b/tests/PHPUnit/Integration/Tracker/PingRequestTest.php index 75e8c10c1a8b5a57c01f538fa4f799472a87a700..586283d9bf2d37ac7ad852eb8fc4b51fa525278c 100644 --- a/tests/PHPUnit/Integration/Tracker/PingRequestTest.php +++ b/tests/PHPUnit/Integration/Tracker/PingRequestTest.php @@ -47,7 +47,7 @@ class PingRequestTest extends IntegrationTestCase $pingTime = '2012-01-05 00:20:00'; $this->doPingRequest($tracker, $pingTime, $setNewDimensionValues = false); - $this->assertInitialVisitIsExtended($pingTime, self::FIRST_VISIT_TIME, $checkModifiedDimensions = false); + $this->assertInitialVisitIsNotExtended(self::FIRST_VISIT_TIME, $checkModifiedDimensions = false, 1201); } public function test_PingWithinThirtyMinutes_AndChangedDimensionValues_ExtendsExistingVisit_AndChangesAppropriateDimensions() @@ -63,7 +63,7 @@ class PingRequestTest extends IntegrationTestCase $pingTime = '2012-01-05 00:20:00'; $this->doPingRequest($tracker, $pingTime, $setNewDimensionValues = true); - $this->assertInitialVisitIsExtended($pingTime, self::FIRST_VISIT_TIME, $checkModifiedDimensions = true); + $this->assertInitialVisitIsNotExtended(self::FIRST_VISIT_TIME, $checkModifiedDimensions = true, 1201); } public function test_PingWithinThirtyMinutes_DoesNotTriggerGoalConversion() @@ -82,7 +82,7 @@ class PingRequestTest extends IntegrationTestCase $tracker->setDebugStringAppend('&idgoal=1'); $this->doPingRequest($tracker, $pingTime, $setNewDimensionValues = true); - $this->assertInitialVisitIsExtended($pingTime, self::FIRST_VISIT_TIME, $checkModifiedDimensions = true); + $this->assertInitialVisitIsNotExtended(self::FIRST_VISIT_TIME, $checkModifiedDimensions = true, 1201); $this->assertGoalConversionCount(1); } @@ -163,11 +163,17 @@ class PingRequestTest extends IntegrationTestCase return Db::fetchOne("SELECT MAX(server_time) FROM " . Common::prefixTable('log_link_visit_action') . " WHERE idvisit = ?", array($idVisit)); } + private function getVisitTotalTime($idVisit) + { + return Db::fetchOne("SELECT MAX(visit_total_time) FROM " . Common::prefixTable('log_visit') . " WHERE idvisit = ?", array($idVisit)); + } + private function assertInitialVisitIsCorrect() { $this->assertVisitCount(1); $this->assertActionCount(1); $this->assertGoalConversionCount(1); + $this->assertEquals(0, $this->getVisitTotalTime($idVisit= 1)); $this->assertVisitPropertiesAreUnchanged($idVisit = 1); } @@ -192,17 +198,20 @@ class PingRequestTest extends IntegrationTestCase return $response; } - private function assertInitialVisitIsExtended($newEndTime, $lastActionTime, $checkPropertiesModified) + private function assertInitialVisitIsNotExtended($firstActionTime, $checkPropertiesModified, $expectedTotalTime) { $this->assertVisitCount(1); $this->assertActionCount(1); $this->assertGoalConversionCount(1); $visitEndTime = $this->getVisitLastActionTime($idVisit = 1); - $this->assertEquals($newEndTime, $visitEndTime); + $this->assertEquals($firstActionTime, $visitEndTime); $actionTime = $this->getLatestActionTime($idVisit = 1); - $this->assertEquals($lastActionTime, $actionTime); + $this->assertEquals($firstActionTime, $actionTime); + + $visitTotalTime = $this->getVisitTotalTime($idVisit = 1); + $this->assertEquals($expectedTotalTime, $visitTotalTime); if ($checkPropertiesModified) { $this->assertVisitPropertiesAreChanged($idVisit = 1, $checkUnchangeable = false); diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml index e00992d683a09fa362817af837d4a5e567390dda..8d118edb9a1c5c75f5a99da879c1c400d1bc3d0f 100644 --- a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml @@ -113,8 +113,8 @@ <pageIdAction>2</pageIdAction> <pageId>1</pageId> - <timeSpent>1080</timeSpent> - <timeSpentPretty>18 min 0s</timeSpentPretty> + <timeSpent>1084</timeSpent> + <timeSpentPretty>18 min 4s</timeSpentPretty> <icon /> </row> diff --git a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml index b83a3d071dca1b71f038f9c788871ca8b02fa37a..ed2500e1255dbe39c177bbdd72f87cefa446e9ed 100644 --- a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml @@ -154,8 +154,8 @@ <pageIdAction>10</pageIdAction> <serverTimePretty>Mar 6, 2010 16:28:33</serverTimePretty> <pageId>9</pageId> - <timeSpent>720</timeSpent> - <timeSpentPretty>12 min 0s</timeSpentPretty> + <timeSpent>721</timeSpent> + <timeSpentPretty>12 min 1s</timeSpentPretty> <icon /> <timestamp>1267892913</timestamp> </row> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml index f6d30fd9ba7e6569086ad54d19737a96f77ca637..5b19eea90fa7b84bede6e944afb9142585238a2a 100755 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml @@ -226,8 +226,8 @@ <customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5> </row> </customVariables> - <timeSpent>360</timeSpent> - <timeSpentPretty>6 min 0s</timeSpentPretty> + <timeSpent>361</timeSpent> + <timeSpentPretty>6 min 1s</timeSpentPretty> <icon /> </row> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml index 730c0fc1a4449bd9c4c1e6183aa2279002611a65..d391947a564fc13c240d83463cbed1993c706b6c 100755 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml @@ -87,8 +87,8 @@ <customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5> </row> </customVariables> - <timeSpent>360</timeSpent> - <timeSpentPretty>6 min 0s</timeSpentPretty> + <timeSpent>361</timeSpent> + <timeSpentPretty>6 min 1s</timeSpentPretty> <icon /> </row> @@ -430,8 +430,8 @@ <customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5> </row> </customVariables> - <timeSpent>360</timeSpent> - <timeSpentPretty>6 min 0s</timeSpentPretty> + <timeSpent>361</timeSpent> + <timeSpentPretty>6 min 1s</timeSpentPretty> <icon /> </row>