From afb5c3fd4100f1427f133edc42b95ad26c1ff18a Mon Sep 17 00:00:00 2001
From: Matthieu Aubry <matt@piwik.org>
Date: Thu, 13 Nov 2014 14:08:05 +1300
Subject: [PATCH]  Do not store Accept-language full string, only store one
 detected language fixes #5365

---
 plugins/UserSettings/Columns/Language.php | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/plugins/UserSettings/Columns/Language.php b/plugins/UserSettings/Columns/Language.php
index f61154c7c4..776505d773 100644
--- a/plugins/UserSettings/Columns/Language.php
+++ b/plugins/UserSettings/Columns/Language.php
@@ -8,6 +8,7 @@
  */
 namespace Piwik\Plugins\UserSettings\Columns;
 
+use Piwik\Common;
 use Piwik\Piwik;
 use Piwik\Plugin\Dimension\VisitDimension;
 use Piwik\Tracker\Action;
@@ -32,12 +33,23 @@ class Language extends VisitDimension
      */
     public function onNewVisit(Request $request, Visitor $visitor, $action)
     {
-        $language = $request->getBrowserLanguage();
+        return $this->getSingleLanguageFromAcceptedLanguages($request->getBrowserLanguage());
+    }
 
-        if (empty($language)) {
+    /**
+     * For better privacy we store only the main language code, instead of the whole browser language string.
+     * 
+     * @param $acceptLanguagesString
+     * @return string
+     */
+    protected function getSingleLanguageFromAcceptedLanguages($acceptLanguagesString)
+    {
+        if (empty($acceptLanguagesString)) {
             return '';
         }
 
-        return substr($language, 0, 20);
+        $allLanguageCodes = array_keys(Common::getLanguagesList());
+        $languageCode = Common::extractLanguageCodeFromBrowserLanguage($acceptLanguagesString, $allLanguageCodes);
+        return $languageCode;
     }
-}
\ No newline at end of file
+}
-- 
GitLab