Skip to content
Extraits de code Groupes Projets
Valider 1196447c rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

return min amount of available custom variables across tables instead of maximum

parent 96ae06bd
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -216,7 +216,7 @@ class GoalManager ...@@ -216,7 +216,7 @@ class GoalManager
// Copy Custom Variables from Visit row to the Goal conversion // Copy Custom Variables from Visit row to the Goal conversion
// Otherwise, set the Custom Variables found in the cookie sent with this request // Otherwise, set the Custom Variables found in the cookie sent with this request
$goal += $visitCustomVariables; $goal += $visitCustomVariables;
$maxCustomVariables = CustomVariables::getMaxCustomVariables(); $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
for ($i = 1; $i <= $maxCustomVariables; $i++) { for ($i = 1; $i <= $maxCustomVariables; $i++) {
if (isset($visitorInformation['custom_var_k' . $i]) if (isset($visitorInformation['custom_var_k' . $i])
......
...@@ -540,7 +540,7 @@ class Request ...@@ -540,7 +540,7 @@ class Request
} }
$customVariables = array(); $customVariables = array();
$maxCustomVars = CustomVariables::getMaxCustomVariables(); $maxCustomVars = CustomVariables::getNumUsableCustomVariables();
foreach ($customVar as $id => $keyValue) { foreach ($customVar as $id => $keyValue) {
$id = (int)$id; $id = (int)$id;
......
...@@ -63,7 +63,7 @@ class TrackerCodeGenerator ...@@ -63,7 +63,7 @@ class TrackerCodeGenerator
if ($mergeSubdomains || $mergeAliasUrls) { if ($mergeSubdomains || $mergeAliasUrls) {
$options .= $this->getJavascriptTagOptions($idSite, $mergeSubdomains, $mergeAliasUrls); $options .= $this->getJavascriptTagOptions($idSite, $mergeSubdomains, $mergeAliasUrls);
} }
$maxCustomVars = CustomVariables::getMaxCustomVariables(); $maxCustomVars = CustomVariables::getNumUsableCustomVariables();
if ($visitorCustomVariables && count($visitorCustomVariables) > 0) { if ($visitorCustomVariables && count($visitorCustomVariables) > 0) {
$options .= ' // you can set up to ' . $maxCustomVars . ' custom variables for each visitor' . PHP_EOL; $options .= ' // you can set up to ' . $maxCustomVars . ' custom variables for each visitor' . PHP_EOL;
......
...@@ -256,7 +256,7 @@ class VisitorRecognizer ...@@ -256,7 +256,7 @@ class VisitorRecognizer
array_unshift($fields, 'visit_first_action_time'); array_unshift($fields, 'visit_first_action_time');
array_unshift($fields, 'visit_last_action_time'); array_unshift($fields, 'visit_last_action_time');
for ($index = 1; $index <= CustomVariables::getMaxCustomVariables(); $index++) { for ($index = 1; $index <= CustomVariables::getNumUsableCustomVariables(); $index++) {
$fields[] = 'custom_var_k' . $index; $fields[] = 'custom_var_k' . $index;
$fields[] = 'custom_var_v' . $index; $fields[] = 'custom_var_v' . $index;
} }
......
...@@ -292,7 +292,7 @@ class Controller extends ControllerAdmin ...@@ -292,7 +292,7 @@ class Controller extends ControllerAdmin
$view->defaultReportSiteName = Site::getNameFor($view->idSite); $view->defaultReportSiteName = Site::getNameFor($view->idSite);
$view->defaultSiteRevenue = \Piwik\Metrics\Formatter::getCurrencySymbol($view->idSite); $view->defaultSiteRevenue = \Piwik\Metrics\Formatter::getCurrencySymbol($view->idSite);
$view->maxCustomVariables = CustomVariables::getMaxCustomVariables(); $view->maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
$allUrls = APISitesManager::getInstance()->getSiteUrlsFromId($view->idSite); $allUrls = APISitesManager::getInstance()->getSiteUrlsFromId($view->idSite);
if (isset($allUrls[1])) { if (isset($allUrls[1])) {
......
...@@ -66,7 +66,7 @@ class Archiver extends \Piwik\Plugin\Archiver ...@@ -66,7 +66,7 @@ class Archiver extends \Piwik\Plugin\Archiver
{ {
$this->dataArray = new DataArray(); $this->dataArray = new DataArray();
$maxCustomVariables = CustomVariables::getMaxCustomVariables(); $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
for ($i = 1; $i <= $maxCustomVariables; $i++) { for ($i = 1; $i <= $maxCustomVariables; $i++) {
$this->aggregateCustomVariable($i); $this->aggregateCustomVariable($i);
} }
......
...@@ -28,7 +28,7 @@ class Info extends ConsoleCommand ...@@ -28,7 +28,7 @@ class Info extends ConsoleCommand
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$maxVars = CustomVariables::getMaxCustomVariables(); $maxVars = CustomVariables::getNumUsableCustomVariables();
if ($this->hasEverywhereSameAmountOfVariables()) { if ($this->hasEverywhereSameAmountOfVariables()) {
$this->writeSuccessMessage($output, array( $this->writeSuccessMessage($output, array(
......
...@@ -40,7 +40,7 @@ class CustomVariables extends \Piwik\Plugin ...@@ -40,7 +40,7 @@ class CustomVariables extends \Piwik\Plugin
{ {
$customVariables = array(); $customVariables = array();
$maxCustomVariables = self::getMaxCustomVariables(); $maxCustomVariables = self::getNumUsableCustomVariables();
for ($i = 1; $i <= $maxCustomVariables; $i++) { for ($i = 1; $i <= $maxCustomVariables; $i++) {
if (!empty($details['custom_var_k' . $i])) { if (!empty($details['custom_var_k' . $i])) {
...@@ -63,25 +63,41 @@ class CustomVariables extends \Piwik\Plugin ...@@ -63,25 +63,41 @@ class CustomVariables extends \Piwik\Plugin
return 200; return 200;
} }
public static function getMaxCustomVariables() /**
* Returns the number of available custom variables that can be used.
*
* "Can be used" is identifed by the minimum number of available custom variables across all relevant tables. Eg
* if there are 6 custom variables installed in log_visit but only 5 in log_conversion, we consider only 5 custom
* variables as usable.
* @return int
*/
public static function getNumUsableCustomVariables()
{ {
$cache = Cache::getCacheGeneral(); $cache = Cache::getCacheGeneral();
$cacheKey = 'CustomVariables.MaxNumCustomVariables'; $cacheKey = 'CustomVariables.NumUsableCustomVariables';
if (!array_key_exists($cacheKey, $cache)) { if (!array_key_exists($cacheKey, $cache)) {
$maxCustomVar = 0; $minCustomVar = null;
foreach (Model::getScopes() as $scope) { foreach (Model::getScopes() as $scope) {
$model = new Model($scope); $model = new Model($scope);
$highestIndex = $model->getHighestCustomVarIndex(); $highestIndex = $model->getHighestCustomVarIndex();
if ($highestIndex > $maxCustomVar) { if (!isset($minCustomVar)) {
$maxCustomVar = $highestIndex; $minCustomVar = $highestIndex;
} }
if ($highestIndex < $minCustomVar) {
$minCustomVar = $highestIndex;
}
}
if (!isset($minCustomVar)) {
$minCustomVar = 0;
} }
$cache[$cacheKey] = $maxCustomVar; $cache[$cacheKey] = $minCustomVar;
Cache::setCacheGeneral($cache); Cache::setCacheGeneral($cache);
} }
...@@ -90,7 +106,7 @@ class CustomVariables extends \Piwik\Plugin ...@@ -90,7 +106,7 @@ class CustomVariables extends \Piwik\Plugin
public function getSegmentsMetadata(&$segments) public function getSegmentsMetadata(&$segments)
{ {
$maxCustomVariables = self::getMaxCustomVariables(); $maxCustomVariables = self::getNumUsableCustomVariables();
for ($i = 1; $i <= $maxCustomVariables; $i++) { for ($i = 1; $i <= $maxCustomVariables; $i++) {
$segments[] = array( $segments[] = array(
......
...@@ -65,7 +65,7 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase ...@@ -65,7 +65,7 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase
public function testExecute_ShouldAddMaxCustomVars_IfNumberIsHigherThanActual() public function testExecute_ShouldAddMaxCustomVars_IfNumberIsHigherThanActual()
{ {
$this->assertEquals(5, CustomVariables::getMaxCustomVariables()); $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
$result = $this->executeCommand(6); $result = $this->executeCommand(6);
...@@ -77,13 +77,13 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase ...@@ -77,13 +77,13 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase
$this->assertContains('Added a variable in scope "Conversion" having the index 6', $result); $this->assertContains('Added a variable in scope "Conversion" having the index 6', $result);
$this->assertContains('Your Piwik is now configured for 6 custom variables.', $result); $this->assertContains('Your Piwik is now configured for 6 custom variables.', $result);
$this->assertEquals(6, CustomVariables::getMaxCustomVariables()); $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
} }
public function testExecute_ShouldRemoveMaxCustomVars_IfNumberIsLessThanActual() public function testExecute_ShouldRemoveMaxCustomVars_IfNumberIsLessThanActual()
{ {
$this->executeCommand(6, true); $this->executeCommand(6, true);
$this->assertEquals(6, CustomVariables::getMaxCustomVariables()); $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
$result = $this->executeCommand(5); $result = $this->executeCommand(5);
...@@ -95,18 +95,18 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase ...@@ -95,18 +95,18 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase
$this->assertContains('Removed a variable in scope "Conversion" having the index 6', $result); $this->assertContains('Removed a variable in scope "Conversion" having the index 6', $result);
$this->assertContains('Your Piwik is now configured for 5 custom variables.', $result); $this->assertContains('Your Piwik is now configured for 5 custom variables.', $result);
$this->assertEquals(5, CustomVariables::getMaxCustomVariables()); $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
} }
public function testExecute_AddMultiple_RemoveMultiple() public function testExecute_AddMultiple_RemoveMultiple()
{ {
$this->assertEquals(5, CustomVariables::getMaxCustomVariables()); $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
$this->executeCommand(9); $this->executeCommand(9);
$this->assertEquals(9, CustomVariables::getMaxCustomVariables()); $this->assertEquals(9, CustomVariables::getNumUsableCustomVariables());
$this->executeCommand(6); $this->executeCommand(6);
$this->assertEquals(6, CustomVariables::getMaxCustomVariables()); $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
} }
/** /**
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
namespace Piwik\Plugins\CustomVariables\tests; namespace Piwik\Plugins\CustomVariables\tests;
use Piwik\Plugins\CustomVariables\CustomVariables; use Piwik\Plugins\CustomVariables\CustomVariables;
use Piwik\Plugins\CustomVariables\Model;
use Piwik\Tracker\Cache; use Piwik\Tracker\Cache;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase; use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
...@@ -18,27 +19,85 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase; ...@@ -18,27 +19,85 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
*/ */
class CustomVariablesTest extends IntegrationTestCase class CustomVariablesTest extends IntegrationTestCase
{ {
public function testGetMaxCustomVariables_ShouldDetectCorrectNumberOfVariables() public function test_getNumUsableCustomVariables_ShouldDetectCorrectNumberOfVariables()
{ {
Cache::clearCacheGeneral(); Cache::clearCacheGeneral();
$this->assertSame(5, CustomVariables::getMaxCustomVariables()); $this->assertSame(5, CustomVariables::getNumUsableCustomVariables());
} }
public function testGetMaxCustomVariables_ShouldCacheTheResult() public function test_getNumUsableCustomVariables_ShouldCacheTheResult()
{ {
CustomVariables::getMaxCustomVariables(); CustomVariables::getNumUsableCustomVariables();
$cache = Cache::getCacheGeneral(); $cache = Cache::getCacheGeneral();
$this->assertSame(5, $cache['CustomVariables.MaxNumCustomVariables']); $this->assertSame(5, $cache['CustomVariables.NumUsableCustomVariables']);
} }
public function testGetMaxCustomVariables_ShouldReadFromCacheIfPossible() public function test_getNumUsableCustomVariables_ShouldReadFromCacheIfPossible()
{ {
$cache = Cache::getCacheGeneral(); $cache = Cache::getCacheGeneral();
$cache['CustomVariables.MaxNumCustomVariables'] = 10; $cache['CustomVariables.NumUsableCustomVariables'] = 10;
Cache::setCacheGeneral($cache); Cache::setCacheGeneral($cache);
$this->assertSame(10, CustomVariables::getMaxCustomVariables()); $this->assertSame(10, CustomVariables::getNumUsableCustomVariables());
} }
public function test_getNumUsableCustomVariables_ShouldReturnMinVariables_IfOneTableHasLessEntriesThanOthers()
{
$this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
$scopes = Model::getScopes();
// removing custom vars step by step... as soon as one custom var is removed,
// it should return the min count of available variables
for ($i = 4; $i != -1; $i--) {
foreach ($scopes as $scope) {
$this->dropCustomVar($scope);
$this->assertSame($i, CustomVariables::getNumUsableCustomVariables());
}
}
$this->assertEquals(0, CustomVariables::getNumUsableCustomVariables());
// add custom var, only once all custom vars are written it should write return a higher custom var number
for ($i = 1; $i != 7; $i++) {
foreach ($scopes as $index => $scope) {
$isLastIndex = $index === (count($scopes) - 1);
$this->addCustomVar($scope);
if ($isLastIndex) {
$this->assertSame($i, CustomVariables::getNumUsableCustomVariables());
// all scopes have been added, it should consider all custom var counts
} else {
$this->assertSame($i - 1, CustomVariables::getNumUsableCustomVariables());
// at least one scope is not added and should therefore return the old custom var count until all
// tables have been updated
}
}
}
$this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
}
private function dropCustomVar($scope)
{
$this->clearCache();
$model = new Model($scope);
$model->removeCustomVariable();
}
private function addCustomVar($scope)
{
$this->clearCache();
$model = new Model($scope);
$model->addCustomVariable();
}
private function clearCache()
{
Cache::clearCacheGeneral();
}
} }
...@@ -33,7 +33,7 @@ class Model ...@@ -33,7 +33,7 @@ class Model
*/ */
public function queryActionsForVisit($idVisit, $actionsLimit) public function queryActionsForVisit($idVisit, $actionsLimit)
{ {
$maxCustomVariables = CustomVariables::getMaxCustomVariables(); $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
$sqlCustomVariables = ''; $sqlCustomVariables = '';
for ($i = 1; $i <= $maxCustomVariables; $i++) { for ($i = 1; $i <= $maxCustomVariables; $i++) {
......
...@@ -250,7 +250,7 @@ class Visitor implements VisitorInterface ...@@ -250,7 +250,7 @@ class Visitor implements VisitorInterface
$actionDetails = $model->queryActionsForVisit($idVisit, $actionsLimit); $actionDetails = $model->queryActionsForVisit($idVisit, $actionsLimit);
$formatter = new Formatter(); $formatter = new Formatter();
$maxCustomVariables = CustomVariables::getMaxCustomVariables(); $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
foreach ($actionDetails as $actionIdx => &$actionDetail) { foreach ($actionDetails as $actionIdx => &$actionDetail) {
$actionDetail =& $actionDetails[$actionIdx]; $actionDetail =& $actionDetails[$actionIdx];
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter