From 0e35cd6d9e667fcf9b79ca9437c93f83f9d176d2 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Mon, 8 Apr 2013 02:20:11 +0000 Subject: Fixes #3781, make sure getUserPreference returns valid default value when option is not set in the DB. --- plugins/UsersManager/API.php | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'plugins/UsersManager') diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index 340fb97961..7a0b992b64 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -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 -- cgit v1.2.3