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>2014-12-16 05:53:38 +0300
committerMatthieu Aubry <matt@piwik.org>2014-12-16 05:53:38 +0300
commit0d55fb656ece0d793cd9374c0aff818823d82bed (patch)
tree27959fbdda79225adeffca18f1f23faaebe40ff7 /plugins
parent3fe19974b4a9a24583f41852fcba42c386d900f3 (diff)
parent0ab6b13eed19a12ee0c52a8b459b8ee8fb3a2afe (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.php29
-rw-r--r--plugins/UsersManager/UserPreferences.php24
-rw-r--r--plugins/UsersManager/tests/Integration/APITest.php39
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);
+ }
+
}