diff --git a/core/ViewDataTable/Manager.php b/core/ViewDataTable/Manager.php index 75d4e303ad50d2cda45f713b84562837e3f4c38b..858b2087429dd612fb2e27541a84e09c3fd15b51 100644 --- a/core/ViewDataTable/Manager.php +++ b/core/ViewDataTable/Manager.php @@ -277,6 +277,11 @@ class Manager Option::deleteLike('viewDataTableParameters_%'); } + public static function clearUserViewDataTableParameters($userLogin) + { + Option::deleteLike('viewDataTableParameters_' . $userLogin . '_%'); + } + public static function getViewDataTableParameters($login, $controllerAction) { $paramsKey = self::buildViewDataTableParametersOptionKey($login, $controllerAction); diff --git a/plugins/CoreVisualizations/CoreVisualizations.php b/plugins/CoreVisualizations/CoreVisualizations.php index db3b3f15b6441b07b92c21b488c33e61fb3ce3c7..f5a83c0f518947a3338c8dbe5d75bc544c12e14b 100644 --- a/plugins/CoreVisualizations/CoreVisualizations.php +++ b/plugins/CoreVisualizations/CoreVisualizations.php @@ -9,6 +9,8 @@ namespace Piwik\Plugins\CoreVisualizations; +use Piwik\ViewDataTable\Manager as ViewDataTableManager; + require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/JqplotDataGenerator.php'; require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/Visualizations/Cloud.php'; require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/Visualizations/HtmlTable.php'; @@ -29,10 +31,16 @@ class CoreVisualizations extends \Piwik\Plugin 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', 'AssetManager.getJavaScriptFiles' => 'getJsFiles', 'ViewDataTable.addViewDataTable' => 'getAvailableDataTableVisualizations', - 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys' + 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', + 'UsersManager.deleteUser' => 'deleteUser' ); } + public function deleteUser($userLogin) + { + ViewDataTableManager::clearUserViewDataTableParameters($userLogin); + } + public function getAvailableDataTableVisualizations(&$visualizations) { $visualizations[] = 'Piwik\\Plugins\\CoreVisualizations\\Visualizations\\Sparkline'; diff --git a/tests/PHPUnit/Integration/Core/ViewDataTable/ManagerTest.php b/tests/PHPUnit/Integration/Core/ViewDataTable/ManagerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..4e374fe9e1153673a78da4a4842dfe10a95e304c --- /dev/null +++ b/tests/PHPUnit/Integration/Core/ViewDataTable/ManagerTest.php @@ -0,0 +1,106 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +use Piwik\Access; +use Piwik\ViewDataTable\Manager as ViewDataTableManager; + +/** + * Class Core_Plugin_SettingsTest + * @group Core + * @group ViewDataTable + */ +class Core_Plugin_ViewDataTable_ManagerTest extends DatabaseTestCase +{ + + public function setUp() + { + parent::setUp(); + Access::setSingletonInstance(null); + } + + public function test_getViewDataTableParameters_shouldReturnEmptyArray_IfNothingPersisted() + { + $login = 'mylogin'; + $method = 'API.get'; + $storedParams = ViewDataTableManager::getViewDataTableParameters($login, $method); + + $this->assertEquals(array(), $storedParams); + } + + public function test_getViewDataTableParameters_shouldOnlyReturnParams_IfLoginAndActionMatches() + { + $params = $this->addParameters(); + + $storedParams = ViewDataTableManager::getViewDataTableParameters('WroNgLogIn', $params['method']); + $this->assertEquals(array(), $storedParams); + + $storedParams = ViewDataTableManager::getViewDataTableParameters($params['login'], 'API.wRoNg'); + $this->assertEquals(array(), $storedParams); + + $storedParams = ViewDataTableManager::getViewDataTableParameters($params['login'], $params['method']); + $this->assertEquals($params['params'], $storedParams); + } + + public function test_clearAllViewDataTableParameters_shouldRemoveAllPersistedParameters() + { + ViewDataTableManager::saveViewDataTableParameters('mylogin1', 'API.get1', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin1', 'API.get2', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin2', 'API.get3', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin1', 'API.get4', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin3', 'API.get5', array('flat' => 1)); + + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get1')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get2')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin2', 'API.get3')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get4')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin3', 'API.get5')); + + ViewDataTableManager::clearAllViewDataTableParameters(); + + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get1')); + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get2')); + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin2', 'API.get3')); + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get4')); + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin3', 'API.get5')); + } + + + public function test_clearUserViewDataTableParameters_shouldOnlyRemoveAUsersParameters() + { + ViewDataTableManager::saveViewDataTableParameters('mylogin1', 'API.get1', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin1', 'API.get2', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin2', 'API.get3', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin1', 'API.get4', array('flat' => 1)); + ViewDataTableManager::saveViewDataTableParameters('mylogin3', 'API.get5', array('flat' => 1)); + + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get1')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get2')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin2', 'API.get3')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get4')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin3', 'API.get5')); + + ViewDataTableManager::clearUserViewDataTableParameters('mylogin1'); + + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get1')); + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get2')); + $this->assertEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin1', 'API.get4')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin2', 'API.get3')); + $this->assertNotEmpty(ViewDataTableManager::getViewDataTableParameters('mylogin3', 'API.get5')); + } + + private function addParameters() + { + $login = 'mylogin'; + $method = 'API.get'; + $params = array('flat' => '0', 'expanded' => 1, 'viewDataTable' => 'tableAllColumns'); + + ViewDataTableManager::saveViewDataTableParameters($login, $method, $params); + + return array('login' => $login, 'method' => $method, 'params' => $params); + } +} \ No newline at end of file