From ba368176b8b3d820e7236e26ddbcf1fb0abe2e0f Mon Sep 17 00:00:00 2001 From: diosmosis <benaka@piwik.pro> Date: Mon, 20 Apr 2015 02:04:36 -0700 Subject: [PATCH] Refs #7632, when getting user info in UserCountry dimensions, set language using request object not visitor object, since the Country dimension will be triggered before the Lanuage one. Includes test. --- plugins/UserCountry/Columns/Base.php | 2 +- tests/PHPUnit/System/TrackerTest.php | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/plugins/UserCountry/Columns/Base.php b/plugins/UserCountry/Columns/Base.php index d0a3b58118..d599043aba 100644 --- a/plugins/UserCountry/Columns/Base.php +++ b/plugins/UserCountry/Columns/Base.php @@ -68,7 +68,7 @@ abstract class Base extends VisitDimension protected function getUserInfo(Request $request, Visitor $visitor) { $ipAddress = $this->getIpAddress($visitor->getVisitorColumn('location_ip'), $request); - $language = $visitor->getVisitorColumn('location_browser_lang'); + $language = $request->getBrowserLanguage(); $userInfo = array('lang' => $language, 'ip' => $ipAddress); diff --git a/tests/PHPUnit/System/TrackerTest.php b/tests/PHPUnit/System/TrackerTest.php index 48d3a4e54d..5d38c74d51 100644 --- a/tests/PHPUnit/System/TrackerTest.php +++ b/tests/PHPUnit/System/TrackerTest.php @@ -12,6 +12,7 @@ use Piwik\Common; use Piwik\Config; use Piwik\Db; use Piwik\Option; +use Piwik\Plugins\UserCountry\LocationProvider; use Piwik\Scheduler\Schedule\Schedule; use Piwik\Scheduler\Task; use Piwik\Scheduler\Timetable; @@ -147,6 +148,23 @@ class TrackerTest extends IntegrationTestCase $this->assertEquals(0, count($this->getConversionItems())); } + public function test_trackingWithLangParameter_ForwardsLangParameter_ToDefaultLocationProvider() + { + LocationProvider::setCurrentProvider(LocationProvider\DefaultProvider::ID); + + $urlToTest = "?idsite=1&rec=1&action_name=test&lang=fr-be"; + $response = $this->sendTrackingRequestByCurl($urlToTest); + Fixture::checkResponse($response); + + $logVisitTable = Common::prefixTable('log_visit'); + + $visitCount = Db::fetchOne("SELECT COUNT(*) FROM $logVisitTable"); + $this->assertEquals(1, $visitCount); + + $visitCountry = Db::fetchOne("SELECT location_country FROM $logVisitTable"); + $this->assertEquals('be', $visitCountry); + } + public function test_scheduledTasks_CanBeRunThroughTracker_WithoutIncludingOutputInTrackerOutput() { $this->setScheduledTasksToRunInTracker(); -- GitLab