From 09f20ea7f7ae6084be4fac41e0baa8c115f73f02 Mon Sep 17 00:00:00 2001
From: mattpiwik <matthieu.aubry@gmail.com>
Date: Wed, 31 Oct 2012 20:09:54 +0000
Subject: [PATCH] Fixes #3502 Logic fix & tests

git-svn-id: http://dev.piwik.org/svn/trunk@7347 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 core/Tracker/Action.php                       | 50 +++++++++++--------
 tests/PHPUnit/Integration/SiteSearchTest.php  |  2 +-
 ...tes__Actions.getSiteSearchKeywords_day.xml | 18 +++++--
 ...s__Actions.getSiteSearchKeywords_month.xml | 18 +++++--
 ...ions.getSiteSearchNoResultKeywords_day.xml | 11 ++++
 ...ns.getSiteSearchNoResultKeywords_month.xml | 11 ++++
 ...t_SiteSearch_AllSites__Actions.get_day.xml |  4 +-
 ...SiteSearch_AllSites__Actions.get_month.xml |  4 +-
 ...CustomVariables.getCustomVariables_day.xml | 14 +++++-
 ...stomVariables.getCustomVariables_month.xml | 14 +++++-
 10 files changed, 109 insertions(+), 37 deletions(-)

diff --git a/core/Tracker/Action.php b/core/Tracker/Action.php
index 454e29c209..a4ef478f62 100644
--- a/core/Tracker/Action.php
+++ b/core/Tracker/Action.php
@@ -842,34 +842,37 @@ class Piwik_Tracker_Action implements Piwik_Tracker_Action_Interface
 		$doTrackUrlForSiteSearch = !empty(Piwik_Config::getInstance()->Tracker['action_sitesearch_record_url']);
 
 		$originalUrl = self::cleanupUrl($originalUrl);
-		$parsedUrl = @parse_url($originalUrl);
 
-		// Detect Site Search from URL query parameters
-		if(!empty($parsedUrl['query']) || !empty($parsedUrl['fragment']))
+
+		// Detect Site search from Tracking API parameters rather than URL
+		$searchKwd = Piwik_Common::getRequestVar( self::PARAMETER_NAME_SEARCH_KEYWORD, '', 'string', $this->request);
+		if(!empty($searchKwd))
 		{
-			// array($url, $actionName, $categoryName, $count);
-			$searchInfo = $this->detectSiteSearchFromUrl($website, $parsedUrl);
-			if(!empty($searchInfo)) {
-				list ($url, $actionName, $categoryName, $count) = $searchInfo;
+			$actionName = $searchKwd;
+			if($doTrackUrlForSiteSearch) {
+				$url = $originalUrl;
+			}
+			$isCategoryName = Piwik_Common::getRequestVar( self::PARAMETER_NAME_SEARCH_CATEGORY, false, 'string', $this->request);
+			if(!empty($isCategoryName)) {
+				$categoryName = $isCategoryName;
+			}
+			$isCount = Piwik_Common::getRequestVar( self::PARAMETER_NAME_SEARCH_COUNT, -1, 'int', $this->request);
+			if($this->isValidSearchCount($isCount)) {
+				$count = $isCount;
 			}
 		}
 
-		// Detect Site search from Tracking API parameters rather than URL
-		if(empty($actionName)) {
-			$searchKwd = Piwik_Common::getRequestVar( self::PARAMETER_NAME_SEARCH_KEYWORD, '', 'string', $this->request);
-			if(!empty($searchKwd))
+		if(empty($actionName))
+		{
+			$parsedUrl = @parse_url($originalUrl);
+
+			// Detect Site Search from URL query parameters
+			if(!empty($parsedUrl['query']) || !empty($parsedUrl['fragment']))
 			{
-				$actionName = $searchKwd;
-				if($doTrackUrlForSiteSearch) {
-					$url = $originalUrl;
-				}
-				$isCategoryName = Piwik_Common::getRequestVar( self::PARAMETER_NAME_SEARCH_CATEGORY, false, 'string', $this->request);
-				if(!empty($isCategoryName)) {
-					$categoryName = $isCategoryName;
-				}
-				$isCount = Piwik_Common::getRequestVar( self::PARAMETER_NAME_SEARCH_COUNT, -1, 'int', $this->request);
-				if($this->isValidSearchCount($isCount)) {
-					$count = $isCount;
+				// array($url, $actionName, $categoryName, $count);
+				$searchInfo = $this->detectSiteSearchFromUrl($website, $parsedUrl);
+				if(!empty($searchInfo)) {
+					list ($url, $actionName, $categoryName, $count) = $searchInfo;
 				}
 			}
 		}
@@ -972,6 +975,9 @@ class Piwik_Tracker_Action implements Piwik_Tracker_Action_Interface
 		}
 		$url = Piwik_Common::getParseUrlReverse($parsedUrl);
 		$actionName = trim(urldecode($actionName));
+		if(empty($actionName)) {
+			return false;
+		}
 		$categoryName = trim(urldecode($categoryName));
 		return array($url, $actionName, $categoryName, $count);
 	}
diff --git a/tests/PHPUnit/Integration/SiteSearchTest.php b/tests/PHPUnit/Integration/SiteSearchTest.php
index 88dc822f08..12c1814063 100755
--- a/tests/PHPUnit/Integration/SiteSearchTest.php
+++ b/tests/PHPUnit/Integration/SiteSearchTest.php
@@ -251,7 +251,7 @@ class Test_Piwik_Integration_SiteSearch extends IntegrationTestCase
 		self::checkResponse($visitor->doTrackPageView('Site Search with 1 result'));
 
 		$visitor->setForceVisitDateTime(Piwik_Date::factory(self::$dateTime)->addHour(0.5)->getDatetime());
-		self::checkResponse($visitor->doTrackSiteSearch("No Result Keyword!", "Bad No Result Category :(", $count = 0));
+		self::checkResponse($visitor->doTrackSiteSearch("No Result Keyword!", "Bad No Result Category bis :(", $count = 0));
 		return array($defaultInit, $visitor);
 	}
 }
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_day.xml
index b8c3766f2e..807b530ba4 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_day.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_day.xml
@@ -75,6 +75,17 @@
 	</result>
 	<result idSite="2">
 		<result date="2010-01-03">
+			<row>
+				<label>No Result Keyword!</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<nb_pages_per_search>1</nb_pages_per_search>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+			</row>
 			<row>
 				<label>SHOULD be a Search with no result!</label>
 				<nb_visits>1</nb_visits>
@@ -88,13 +99,12 @@
 			<row>
 				<label>You can use Piwik in: አማርኛ, العربية, Беларуская, Български, Català, Česky, Dansk, Deutsch, Ελληνικά, English, Español, Eesti keel, Euskara, فارسی, Suomi, Français, Galego, עברית, Magyar, Bahasa Indonesia, Íslenska, Italiano, 日本語, ქართული, 한국어, Lietuvių, Latviešu, Norsk (bokmål), Nederlands, Norsk (nynorsk), Polski, Português brasileiro, Português, Română, Русский, Slovensky%</label>
 				<nb_visits>1</nb_visits>
-				<nb_hits>2</nb_hits>
+				<nb_hits>1</nb_hits>
 				<sum_time_spent>180</sum_time_spent>
-				<exit_nb_visits>1</exit_nb_visits>
-				<nb_pages_per_search>2</nb_pages_per_search>
+				<nb_pages_per_search>1</nb_pages_per_search>
 				<avg_time_on_page>180</avg_time_on_page>
 				<bounce_rate>0%</bounce_rate>
-				<exit_rate>100%</exit_rate>
+				<exit_rate>0%</exit_rate>
 			</row>
 		</result>
 		<result date="2010-01-04" />
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_month.xml
index a9c76805e5..3d60272474 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchKeywords_month.xml
@@ -64,6 +64,17 @@
 	</result>
 	<result idSite="2">
 		<result date="2010-01">
+			<row>
+				<label>No Result Keyword!</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<nb_pages_per_search>1</nb_pages_per_search>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+			</row>
 			<row>
 				<label>SHOULD be a Search with no result!</label>
 				<nb_visits>1</nb_visits>
@@ -77,13 +88,12 @@
 			<row>
 				<label>You can use Piwik in: አማርኛ, العربية, Беларуская, Български, Català, Česky, Dansk, Deutsch, Ελληνικά, English, Español, Eesti keel, Euskara, فارسی, Suomi, Français, Galego, עברית, Magyar, Bahasa Indonesia, Íslenska, Italiano, 日本語, ქართული, 한국어, Lietuvių, Latviešu, Norsk (bokmål), Nederlands, Norsk (nynorsk), Polski, Português brasileiro, Português, Română, Русский, Slovensky%</label>
 				<nb_visits>1</nb_visits>
-				<nb_hits>2</nb_hits>
+				<nb_hits>1</nb_hits>
 				<sum_time_spent>180</sum_time_spent>
-				<exit_nb_visits>1</exit_nb_visits>
-				<nb_pages_per_search>2</nb_pages_per_search>
+				<nb_pages_per_search>1</nb_pages_per_search>
 				<avg_time_on_page>180</avg_time_on_page>
 				<bounce_rate>0%</bounce_rate>
-				<exit_rate>100%</exit_rate>
+				<exit_rate>0%</exit_rate>
 			</row>
 		</result>
 		<result date="2010-02" />
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_day.xml
index 642212d4ce..b30ddb01d7 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_day.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_day.xml
@@ -33,6 +33,17 @@
 	</result>
 	<result idSite="2">
 		<result date="2010-01-03">
+			<row>
+				<label>No Result Keyword!</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<nb_pages_per_search>1</nb_pages_per_search>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+			</row>
 			<row>
 				<label>SHOULD be a Search with no result!</label>
 				<nb_visits>1</nb_visits>
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_month.xml
index e8b15cf40d..4f8b06fb5b 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.getSiteSearchNoResultKeywords_month.xml
@@ -22,6 +22,17 @@
 	</result>
 	<result idSite="2">
 		<result date="2010-01">
+			<row>
+				<label>No Result Keyword!</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<nb_pages_per_search>1</nb_pages_per_search>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+			</row>
 			<row>
 				<label>SHOULD be a Search with no result!</label>
 				<nb_visits>1</nb_visits>
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml
index 60a3e6ec0a..f82b97b135 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml
@@ -19,9 +19,9 @@
 	</result>
 	<result idSite="2">
 		<result date="2010-01-03">
-			<nb_keywords>2</nb_keywords>
+			<nb_keywords>3</nb_keywords>
 			<nb_pageviews>2</nb_pageviews>
-			<nb_searches>2</nb_searches>
+			<nb_searches>3</nb_searches>
 			<nb_uniq_pageviews>2</nb_uniq_pageviews>
 		</result>
 		<result date="2010-01-04" />
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml
index dff9ffe1ed..bd1427d676 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml
@@ -16,9 +16,9 @@
 	</result>
 	<result idSite="2">
 		<result date="2010-01">
-			<nb_keywords>2</nb_keywords>
+			<nb_keywords>3</nb_keywords>
 			<nb_pageviews>2</nb_pageviews>
-			<nb_searches>2</nb_searches>
+			<nb_searches>3</nb_searches>
 			<nb_uniq_pageviews>2</nb_uniq_pageviews>
 		</result>
 		<result date="2010-02" />
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_day.xml
index 55484c1242..f3b77be3d0 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_day.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_day.xml
@@ -87,12 +87,24 @@
 		<result date="2010-01-03">
 			<row>
 				<label>_pk_scount</label>
-				<nb_actions>1</nb_actions>
+				<nb_actions>2</nb_actions>
 				<subtable>
 					<row>
 						<label>0</label>
 						<nb_uniq_visitors>1</nb_uniq_visitors>
 						<nb_visits>1</nb_visits>
+						<nb_actions>2</nb_actions>
+					</row>
+				</subtable>
+			</row>
+			<row>
+				<label>_pk_scat</label>
+				<nb_actions>1</nb_actions>
+				<subtable>
+					<row>
+						<label>Bad No Result Category bis :(</label>
+						<nb_uniq_visitors>1</nb_uniq_visitors>
+						<nb_visits>1</nb_visits>
 						<nb_actions>1</nb_actions>
 					</row>
 				</subtable>
diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_month.xml
index 41a9e85fc3..4ff57b66ad 100644
--- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_month.xml
+++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__CustomVariables.getCustomVariables_month.xml
@@ -62,11 +62,23 @@
 		<result date="2010-01">
 			<row>
 				<label>_pk_scount</label>
-				<nb_actions>1</nb_actions>
+				<nb_actions>2</nb_actions>
 				<subtable>
 					<row>
 						<label>0</label>
 						<nb_visits>1</nb_visits>
+						<nb_actions>2</nb_actions>
+						<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+					</row>
+				</subtable>
+			</row>
+			<row>
+				<label>_pk_scat</label>
+				<nb_actions>1</nb_actions>
+				<subtable>
+					<row>
+						<label>Bad No Result Category bis :(</label>
+						<nb_visits>1</nb_visits>
 						<nb_actions>1</nb_actions>
 						<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
 					</row>
-- 
GitLab