From c775c64ec484ac52ce10773948ce28bcb2467c42 Mon Sep 17 00:00:00 2001
From: benakamoorthi <benaka.moorthi@gmail.com>
Date: Thu, 15 Nov 2012 10:39:18 +0000
Subject: [PATCH] Fixes #3511, store lat/long in archived table metadata
 instead of label.

git-svn-id: http://dev.piwik.org/svn/trunk@7478 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 plugins/UserCountry/API.php                          |  6 ++++--
 plugins/UserCountry/UserCountry.php                  |  6 +++---
 .../Integration/ManyVisitorsOneWebsiteTest.php       | 12 +++++++-----
 ...torsOneWebsiteTest__UserCountry.getCity_month.xml | 10 ++++++----
 ...eTest_segment_city__UserCountry.getCity_month.xml |  2 ++
 ...t_segment_lat_long__UserCountry.getCity_month.xml |  4 ++--
 ...est_segment_region__UserCountry.getCity_month.xml |  2 ++
 7 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/plugins/UserCountry/API.php b/plugins/UserCountry/API.php
index 0309dc01d8..b684ebdb41 100644
--- a/plugins/UserCountry/API.php
+++ b/plugins/UserCountry/API.php
@@ -130,10 +130,12 @@ class Piwik_UserCountry_API
 			array('label', 'region', 'Piwik_UserCountry_getElementFromStringArray', array($separator, 1, $unk)));
 		$dataTable->filter('ColumnCallbackAddMetadata',
 			array('label', 'country', 'Piwik_UserCountry_getElementFromStringArray', array($separator, 2, $unk)));
+		
+		// backwards compatibility: for reports that have lat|long in label
 		$dataTable->filter('ColumnCallbackAddMetadata',
-			array('label', 'lat', 'Piwik_UserCountry_getElementFromStringArray', array($separator, 3)));
+			array('label', 'lat', 'Piwik_UserCountry_getElementFromStringArray', array($separator, 3, false)));
 		$dataTable->filter('ColumnCallbackAddMetadata',
-			array('label', 'long', 'Piwik_UserCountry_getElementFromStringArray', array($separator, 4)));
+			array('label', 'long', 'Piwik_UserCountry_getElementFromStringArray', array($separator, 4, false)));
 		
 		// add country name & region name metadata
 		$dataTable->filter('MetadataCallbackAddMetadata',
diff --git a/plugins/UserCountry/UserCountry.php b/plugins/UserCountry/UserCountry.php
index 5cf51e690f..91e6feaf05 100644
--- a/plugins/UserCountry/UserCountry.php
+++ b/plugins/UserCountry/UserCountry.php
@@ -512,9 +512,9 @@ class Piwik_UserCountry extends Piwik_Plugin
 				$lat = round($lat, Piwik_UserCountry_LocationProvider::GEOGRAPHIC_COORD_PRECISION);
 				$long = round($long, Piwik_UserCountry_LocationProvider::GEOGRAPHIC_COORD_PRECISION);
 				
-				// append latitude + longitude to label
-				$newLabel = $label.self::LOCATION_SEPARATOR.$lat.self::LOCATION_SEPARATOR.$long;
-				$row->setColumn('label', $newLabel);
+				// set latitude + longitude metadata
+				$row->setMetadata('lat', $lat);
+				$row->setMetadata('long', $long);
 			}
 		}
 	}
diff --git a/tests/PHPUnit/Integration/ManyVisitorsOneWebsiteTest.php b/tests/PHPUnit/Integration/ManyVisitorsOneWebsiteTest.php
index fd4e07d025..a72427b302 100755
--- a/tests/PHPUnit/Integration/ManyVisitorsOneWebsiteTest.php
+++ b/tests/PHPUnit/Integration/ManyVisitorsOneWebsiteTest.php
@@ -178,13 +178,13 @@ class Test_Piwik_Integration_ManyVisitorsOneWebsiteTest extends IntegrationTestC
 		Piwik_UserCountry_LocationProvider::$providers = null;
 		Piwik_UserCountry_LocationProvider::setCurrentProvider('mock_provider');
 		Piwik_UserCountry_LocationProvider::getCurrentProvider()->setLocations(array(
-			self::makeLocation('Stratford-upon-Avon', 'P3', 'gb'), // template location
+			self::makeLocation('Stratford-upon-Avon', 'P3', 'gb', 123.456, 21.321), // template location
 			
 			// same region, different city, same country
 			self::makeLocation('Nuneaton and Bedworth', 'P3', 'gb'),
 			
-			// same region, city & country
-			self::makeLocation('Stratford-upon-Avon', 'P3', 'gb'),
+			// same region, city & country (different lat/long)
+			self::makeLocation('Stratford-upon-Avon', 'P3', 'gb', 124.456, 22.231),
 			
 			// same country, different region & city
 			self::makeLocation('London', 'H9', 'gb'),
@@ -211,10 +211,12 @@ class Test_Piwik_Integration_ManyVisitorsOneWebsiteTest extends IntegrationTestC
 		Piwik_UserCountry_LocationProvider::setCurrentProvider('default');
 	}
 	
-	public static function makeLocation( $city, $region, $country )
+	public static function makeLocation( $city, $region, $country, $lat = null, $long = null )
 	{
 		return array(Piwik_UserCountry_LocationProvider::CITY_NAME_KEY => $city,
 					  Piwik_UserCountry_LocationProvider::REGION_CODE_KEY => $region,
-					  Piwik_UserCountry_LocationProvider::COUNTRY_CODE_KEY => $country);
+					  Piwik_UserCountry_LocationProvider::COUNTRY_CODE_KEY => $country,
+					  Piwik_UserCountry_LocationProvider::LATITUDE_KEY => $lat,
+					  Piwik_UserCountry_LocationProvider::LONGITUDE_KEY => $long);
 	}
 }
diff --git a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
index 91ab989032..690e22f3f7 100755
--- a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
@@ -41,11 +41,11 @@
 		<nb_conversions>6</nb_conversions>
 		<revenue>30</revenue>
 		<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
+		<lat>49.25</lat>
+		<long>-123.133</long>
 		<city_name>Vancouver</city_name>
 		<region>BC</region>
 		<country>ca</country>
-		<lat>49.25</lat>
-		<long>-123.133</long>
 		<country_name>Canada</country_name>
 		<region_name>British Columbia</region_name>
 		<logo>plugins/UserCountry/flags/ca.png</logo>
@@ -67,6 +67,8 @@
 		<nb_conversions>4</nb_conversions>
 		<revenue>20</revenue>
 		<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+		<lat>124.456</lat>
+		<long>22.231</long>
 		<city_name>Stratford-upon-Avon</city_name>
 		<region>P3</region>
 		<country>gb</country>
@@ -91,11 +93,11 @@
 		<nb_conversions>2</nb_conversions>
 		<revenue>10</revenue>
 		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<lat>47.249</lat>
+		<long>6.018</long>
 		<city_name>Besançon</city_name>
 		<region>A6</region>
 		<country>fr</country>
-		<lat>47.249</lat>
-		<long>6.018</long>
 		<country_name>France</country_name>
 		<region_name>Franche-Comte</region_name>
 		<logo>plugins/UserCountry/flags/fr.png</logo>
diff --git a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml
index 125b9def81..7604777d1d 100755
--- a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml
@@ -17,6 +17,8 @@
 		<nb_conversions>4</nb_conversions>
 		<revenue>20</revenue>
 		<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+		<lat>124.456</lat>
+		<long>22.231</long>
 		<city_name>Stratford-upon-Avon</city_name>
 		<region>P3</region>
 		<country>gb</country>
diff --git a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml
index 13bcaaae32..82aae84260 100755
--- a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml
@@ -17,11 +17,11 @@
 		<nb_conversions>6</nb_conversions>
 		<revenue>30</revenue>
 		<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
+		<lat>49.25</lat>
+		<long>-123.133</long>
 		<city_name>Vancouver</city_name>
 		<region>BC</region>
 		<country>ca</country>
-		<lat>49.25</lat>
-		<long>-123.133</long>
 		<country_name>Canada</country_name>
 		<region_name>British Columbia</region_name>
 		<logo>plugins/UserCountry/flags/ca.png</logo>
diff --git a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml
index 8e7f059ac7..724be9b9c5 100755
--- a/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml
@@ -17,6 +17,8 @@
 		<nb_conversions>4</nb_conversions>
 		<revenue>20</revenue>
 		<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+		<lat>124.456</lat>
+		<long>22.231</long>
 		<city_name>Stratford-upon-Avon</city_name>
 		<region>P3</region>
 		<country>gb</country>
-- 
GitLab