diff options
author | Matthieu Aubry <matt@piwik.org> | 2014-12-16 05:53:38 +0300 |
---|---|---|
committer | Matthieu Aubry <matt@piwik.org> | 2014-12-16 05:53:38 +0300 |
commit | 0d55fb656ece0d793cd9374c0aff818823d82bed (patch) | |
tree | 27959fbdda79225adeffca18f1f23faaebe40ff7 /plugins | |
parent | 3fe19974b4a9a24583f41852fcba42c386d900f3 (diff) | |
parent | 0ab6b13eed19a12ee0c52a8b459b8ee8fb3a2afe (diff) |
Merge pull request #6856 from piwik/6672_preprocess_ranges2.10.0-b7
during core:archive console command, preprocess any custom date ranges that were selected in any User's Preferences
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/UsersManager/API.php | 29 | ||||
-rw-r--r-- | plugins/UsersManager/UserPreferences.php | 24 | ||||
-rw-r--r-- | plugins/UsersManager/tests/Integration/APITest.php | 39 |
3 files changed, 82 insertions, 10 deletions
diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index 1e651eef13..75d9190cd1 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -32,6 +32,8 @@ use Piwik\Tracker\Cache; */ class API extends \Piwik\Plugin\API { + const OPTION_NAME_PREFERENCE_SEPARATOR = '_'; + /** * @var Model */ @@ -107,9 +109,34 @@ class API extends \Piwik\Plugin\API return $this->getDefaultUserPreference($preferenceName, $userLogin); } + /** + * Returns an array of Preferences + * @param $preferenceNames array of preference names + * @return array + * @ignore + */ + public function getAllUsersPreferences(array $preferenceNames) + { + Piwik::checkUserHasSuperUserAccess(); + + $userPreferences = array(); + foreach($preferenceNames as $preferenceName) { + $optionNameMatchAllUsers = $this->getPreferenceId('%', $preferenceName); + $preferences = Option::getLike($optionNameMatchAllUsers); + + foreach($preferences as $optionName => $optionValue) { + $optionName = explode(self::OPTION_NAME_PREFERENCE_SEPARATOR, $optionName); + $userName = $optionName[0]; + $preference = $optionName[1]; + $userPreferences[$userName][$preference] = $optionValue; + } + } + return $userPreferences; + } + private function getPreferenceId($login, $preference) { - return $login . '_' . $preference; + return $login . self::OPTION_NAME_PREFERENCE_SEPARATOR . $preference; } private function getDefaultUserPreference($preferenceName, $login) diff --git a/plugins/UsersManager/UserPreferences.php b/plugins/UsersManager/UserPreferences.php index 430d2b8b65..b1d70f4fcc 100644 --- a/plugins/UsersManager/UserPreferences.php +++ b/plugins/UsersManager/UserPreferences.php @@ -39,6 +39,7 @@ class UserPreferences return false; } + /** * Returns default site ID that Piwik should load. * @@ -91,27 +92,32 @@ class UserPreferences /** * Returns default period type for Piwik reports. * + * @param $defaultDate string the default date string from which the default period will be guessed * @return string `'day'`, `'week'`, `'month'`, `'year'` or `'range'` * @api */ - public function getDefaultPeriod() + public function getDefaultPeriod($defaultDate) { - $userSettingsDate = APIUsersManager::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE); - - if ($userSettingsDate === false) { - return Config::getInstance()->General['default_period']; + $defaultPeriod = Config::getInstance()->General['default_period']; + if ($defaultDate === false) { + return $defaultPeriod; } - if (in_array($userSettingsDate, array('today', 'yesterday'))) { + if (in_array($defaultDate, array('today', 'yesterday'))) { return 'day'; } - if (strpos($userSettingsDate, 'last') === 0 - || strpos($userSettingsDate, 'previous') === 0 + if (strpos($defaultDate, 'last') === 0 + || strpos($defaultDate, 'previous') === 0 ) { return 'range'; } - return $userSettingsDate; + return $defaultPeriod; + } + + public function getAllUsersPreferences() + { + } }
\ No newline at end of file diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php index 1cf2cf71bb..67a6e9f12e 100644 --- a/plugins/UsersManager/tests/Integration/APITest.php +++ b/plugins/UsersManager/tests/Integration/APITest.php @@ -69,4 +69,43 @@ class APITest extends IntegrationTestCase $this->assertFalse($eventTriggered, 'UsersManager.removeSiteAccess event was triggered but should not'); } + public function test_getAllUsersPreferences_isEmpty_whenNoPreference() + { + $preferences = $this->api->getAllUsersPreferences(array('preferenceName')); + $this->assertEmpty($preferences); + } + + public function test_getAllUsersPreferences_isEmpty_whenNoPreferenceAndMultipleRequested() + { + $preferences = $this->api->getAllUsersPreferences(array('preferenceName', 'otherOne')); + $this->assertEmpty($preferences); + } + + public function test_getAllUsersPreferences_shouldGetMultiplePreferences() + { + $user2 = 'userLogin2'; + $user3 = 'userLogin3'; + $this->api->addUser($user2, 'password', 'userlogin2@password.de'); + $this->api->setUserPreference($user2, 'myPreferenceName', 'valueForUser2'); + $this->api->setUserPreference($user2, 'Random_NOT_REQUESTED', 'Random_NOT_REQUESTED'); + + $this->api->addUser($user3, 'password', 'userlogin3@password.de'); + $this->api->setUserPreference($user3, 'myPreferenceName', 'valueForUser3'); + $this->api->setUserPreference($user3, 'otherPreferenceHere', 'otherPreferenceVALUE'); + $this->api->setUserPreference($user3, 'Random_NOT_REQUESTED', 'Random_NOT_REQUESTED'); + + $expected = array( + $user2 => array( + 'myPreferenceName' => 'valueForUser2' + ), + $user3 => array( + 'myPreferenceName' => 'valueForUser3', + 'otherPreferenceHere' => 'otherPreferenceVALUE', + ), + ); + $result = $this->api->getAllUsersPreferences(array('myPreferenceName', 'otherPreferenceHere', 'randomDoesNotExist')); + + $this->assertSame($expected, $result); + } + } |