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