Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Aubry <matt@piwik.org>2015-09-15 03:18:17 +0300
committerMatthieu Aubry <matt@piwik.org>2015-09-15 03:18:17 +0300
commit1d805fe626807fd648de68ad8d13cd78fd5dbc97 (patch)
treeddd4aa22a67faeba467d088f68e6c284efe44b9e /plugins/API
parent3a84a8aeb2612fa16926d65554c182b156844642 (diff)
parentca6b7e77f4d4b886db0d0660db1f0ae6980e3fe4 (diff)
Merge pull request #8754 from piwik/6031_cvar_unified_segment
Define four segments that search over all custom variable name/value columns instead of one per column
Diffstat (limited to 'plugins/API')
-rw-r--r--plugins/API/API.php45
1 files changed, 39 insertions, 6 deletions
diff --git a/plugins/API/API.php b/plugins/API/API.php
index dcdacf40b2..fb1e5ae669 100644
--- a/plugins/API/API.php
+++ b/plugins/API/API.php
@@ -189,6 +189,12 @@ class API extends \Piwik\Plugin\API
unset($segment['sqlFilter']);
unset($segment['sqlFilterValue']);
unset($segment['sqlSegment']);
+
+ if (isset($segment['suggestedValuesCallback'])
+ && !is_string($segment['suggestedValuesCallback'])
+ ) {
+ unset($segment['suggestedValuesCallback']);
+ }
}
}
@@ -487,8 +493,14 @@ class API extends \Piwik\Plugin\API
}
// if segment has suggested values callback then return result from it instead
+ $suggestedValuesCallbackRequiresTable = false;
if (isset($segmentFound['suggestedValuesCallback'])) {
- return call_user_func($segmentFound['suggestedValuesCallback'], $idSite, $maxSuggestionsToReturn);
+ $suggestedValuesCallbackRequiresTable = $this->doesSuggestedValuesCallbackNeedData(
+ $segmentFound['suggestedValuesCallback']);
+
+ if (!$suggestedValuesCallbackRequiresTable) {
+ return call_user_func($segmentFound['suggestedValuesCallback'], $idSite, $maxSuggestionsToReturn);
+ }
}
// if period=range is disabled, do not proceed
@@ -523,12 +535,16 @@ class API extends \Piwik\Plugin\API
throw new \Exception("There was no data to suggest for $segmentName");
}
- // Cleanup data to return the top suggested (non empty) labels for this segment
- $values = $table->getColumn($segmentName);
+ if ($suggestedValuesCallbackRequiresTable) {
+ $values = call_user_func($segmentFound['suggestedValuesCallback'], $idSite, $maxSuggestionsToReturn, $table);
+ } else {
+ // Cleanup data to return the top suggested (non empty) labels for this segment
+ $values = $table->getColumn($segmentName);
- // Select also flattened keys (custom variables "page" scope, page URLs for one visit, page titles for one visit)
- $valuesBis = $table->getColumnsStartingWith($segmentName . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP);
- $values = array_merge($values, $valuesBis);
+ // Select also flattened keys (custom variables "page" scope, page URLs for one visit, page titles for one visit)
+ $valuesBis = $table->getColumnsStartingWith($segmentName . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP);
+ $values = array_merge($values, $valuesBis);
+ }
$values = $this->getMostFrequentValues($values);
@@ -579,6 +595,23 @@ class API extends \Piwik\Plugin\API
$values = array_keys($values);
return $values;
}
+
+ private function doesSuggestedValuesCallbackNeedData($suggestedValuesCallback)
+ {
+ if (is_string($suggestedValuesCallback)
+ && strpos($suggestedValuesCallback, '::') !== false
+ ) {
+ $suggestedValuesCallback = explode('::', $suggestedValuesCallback);
+ }
+
+ if (is_array($suggestedValuesCallback)) {
+ $methodMetadata = new \ReflectionMethod($suggestedValuesCallback[0], $suggestedValuesCallback[1]);
+ } else {
+ $methodMetadata = new \ReflectionFunction($suggestedValuesCallback);
+ }
+
+ return $methodMetadata->getNumberOfParameters() >= 3;
+ }
}
/**