Skip to content
Extraits de code Groupes Projets
Valider 0e35cd6d rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Fixes #3781, make sure getUserPreference returns valid default value when...

Fixes #3781, make sure getUserPreference returns valid default value when option is not set in the DB.
parent b8a603b6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -147,14 +147,14 @@ class Piwik_Access
// we join with site in case there are rows in access for an idsite that doesn't exist anymore
// (backward compatibility ; before we deleted the site without deleting rows in _access table)
$accessRaw = self::getRawSitesWithSomeViewAccess($this->login);
$accessRaw = $this->getRawSitesWithSomeViewAccess($this->login);
foreach ($accessRaw as $access) {
$this->idsitesByAccess[$access['access']][] = $access['idsite'];
}
return true;
}
public static function getRawSitesWithSomeViewAccess($login)
public function getRawSitesWithSomeViewAccess($login)
{
return Piwik_FetchAll(self::getSqlAccessSite("access, t2.idsite"), $login);
}
......
......@@ -302,11 +302,13 @@ class Piwik_SitesManager_API
public function getSitesIdWithAtLeastViewAccess($_restrictSitesToLogin = false)
{
if (!empty($_restrictSitesToLogin)
// Very important here to make sure we only proceed when in a scheduled task
// Otherwise anyone could get all websites for a given user
&& Piwik_TaskScheduler::isTaskBeingExecuted()
// Only super user or logged in user can see viewable sites for a specific login,
// but during scheduled task execution, we sometimes want to restrict sites to
// a different login than the superuser.
&& (Piwik::isUserIsSuperUserOrTheUser($_restrictSitesToLogin)
|| Piwik_TaskScheduler::isTaskBeingExecuted())
) {
$accessRaw = Piwik_Access::getRawSitesWithSomeViewAccess($_restrictSitesToLogin);
$accessRaw = Zend_Registry::get('access')->getRawSitesWithSomeViewAccess($_restrictSitesToLogin);
$sitesId = array();
foreach ($accessRaw as $access) {
$sitesId[] = $access['idsite'];
......
......@@ -24,6 +24,9 @@
*/
class Piwik_UsersManager_API
{
const PREFERENCE_DEFAULT_REPORT = 'defaultReport';
const PREFERENCE_DEFAULT_REPORT_DATE = 'defaultReportDate';
static private $instance = null;
/**
......@@ -52,9 +55,6 @@ class Piwik_UsersManager_API
return self::$instance;
}
const PREFERENCE_DEFAULT_REPORT = 'defaultReport';
const PREFERENCE_DEFAULT_REPORT_DATE = 'defaultReportDate';
/**
* Sets a user preference
* @param string $userLogin
......@@ -77,13 +77,31 @@ class Piwik_UsersManager_API
public function getUserPreference($userLogin, $preferenceName)
{
Piwik::checkUserIsSuperUserOrTheUser($userLogin);
return Piwik_GetOption($this->getPreferenceId($userLogin, $preferenceName));
$optionValue = Piwik_GetOption($this->getPreferenceId($userLogin, $preferenceName));
if ($optionValue === false) {
return $this->getDefaultUserPreference($userLogin, $preferenceName);
}
return $optionValue;
}
private function getPreferenceId($login, $preference)
{
return $login . '_' . $preference;
}
private function getDefaultUserPreference($login, $preferenceName)
{
switch ($preferenceName) {
case self::PREFERENCE_DEFAULT_REPORT:
$viewableSiteIds = Piwik_SitesManager_API::getInstance()->getSitesIdWithAtLeastViewAccess($login);
return reset($viewableSiteIds);
case self::PREFERENCE_DEFAULT_REPORT_DATE:
return 'yesterday';
default:
return false;
}
}
/**
* Returns the list of all the users
......
......@@ -146,4 +146,13 @@ class FakeAccess
}
return array_merge(self::$idSitesView, self::$idSitesAdmin);
}
public function getRawSitesWithSomeViewAccess($login)
{
$result = array();
foreach (array_merge(self::$idSitesView, self::$idSitesAdmin) as $idSite) {
$result[] = array('idsite' => $idSite);
}
return $result;
}
}
......@@ -1025,5 +1025,19 @@ class UsersManagerTest extends DatabaseTestCase
$this->assertEquals($user['email'], $userByMail['email']);
$this->assertEquals($user['alias'], $userByMail['alias']);
}
/**
* @group Plugins
* @group UsersManager
*/
public function testGetUserPreferenceDefault()
{
$defaultReportPref = Piwik_UsersManager_API::PREFERENCE_DEFAULT_REPORT;
$defaultReportDatePref = Piwik_UsersManager_API::PREFERENCE_DEFAULT_REPORT_DATE;
$this->assertEquals(1,
Piwik_UsersManager_API::getInstance()->getUserPreference('someUser', $defaultReportPref));
$this->assertEquals('yesterday',
Piwik_UsersManager_API::getInstance()->getUserPreference('someUser', $defaultReportDatePref));
}
}
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