/** * Sets the language for the user * * @param string $login * @param string $languageCode * @return bool */ public function setLanguageForUser($login, $languageCode) { Piwik::checkUserHasSuperUserAccessOrIsTheUser($login); Piwik::checkUserIsNotAnonymous(); if (!$this->isLanguageAvailable($languageCode)) { return false; } $this->getModel()->setLanguageForUser($login, $languageCode); return true; }
/** * Sets the language for the user * * @param string $login * @param string $languageCode * @return bool */ public function setLanguageForUser($login, $languageCode) { Piwik::checkUserHasSuperUserAccessOrIsTheUser($login); Piwik::checkUserIsNotAnonymous(); if (!$this->isLanguageAvailable($languageCode)) { return false; } $paramsBind = array($login, $languageCode, $languageCode); Db::query('INSERT INTO ' . Common::prefixTable('user_language') . ' (login, language) VALUES (?,?) ON DUPLICATE KEY UPDATE language=?', $paramsBind); return true; }
/** * Returns a stored segment by ID * * @param $idSegment * @throws Exception * @return bool */ public function get($idSegment) { Piwik::checkUserHasSomeViewAccess(); if (!is_numeric($idSegment)) { throw new Exception("idSegment should be numeric."); } $segment = Db::get()->fetchRow("SELECT * " . " FROM " . Common::prefixTable("segment") . " WHERE idsegment = ?", $idSegment); if (empty($segment)) { return false; } try { if (!$segment['enable_all_users']) { Piwik::checkUserHasSuperUserAccessOrIsTheUser($segment['login']); } } catch (Exception $e) { throw new Exception($this->getMessageCannotEditSegmentCreatedBySuperUser()); } if ($segment['deleted']) { throw new Exception("This segment is marked as deleted. "); } return $segment; }
/** * Deletes a specific report * * @param int $idReport */ public function deleteReport($idReport) { $APIScheduledReports = $this->getReports($idSite = false, $periodSearch = false, $idReport); $report = reset($APIScheduledReports); Piwik::checkUserHasSuperUserAccessOrIsTheUser($report['login']); Db::get()->update(Common::prefixTable('report'), array('deleted' => 1), "idreport = '{$idReport}'"); self::$cache = array(); }
/** * Returns whether the user uses 12 hour clock * * @param string $login * @param bool $use12HourClock * @return string */ public function set12HourClockForUser($login, $use12HourClock) { if ($login == 'anonymous') { return false; } Piwik::checkUserHasSuperUserAccessOrIsTheUser($login); $lang = $this->getModel()->set12HourClock($login, $use12HourClock); return $lang; }
/** * Updates a user in the database. * Only login and password are required (case when we update the password). * When the password changes, the key token for this user will change, which could break * its API calls. * * @see addUser() for all the parameters */ public function updateUser($userLogin, $password = false, $email = false, $alias = false, $_isPasswordHashed = false) { Piwik::checkUserHasSuperUserAccessOrIsTheUser($userLogin); $this->checkUserIsNotAnonymous($userLogin); $userInfo = $this->getUser($userLogin); $passwordHasBeenUpdated = false; if (empty($password)) { $password = $userInfo['password']; } else { $password = Common::unsanitizeInputValue($password); if (!$_isPasswordHashed) { UsersManager::checkPassword($password); $password = UsersManager::getPasswordHash($password); } $passwordHasBeenUpdated = true; } if (empty($alias)) { $alias = $userInfo['alias']; } if (empty($email)) { $email = $userInfo['email']; } if ($email != $userInfo['email']) { $this->checkEmail($email); } $alias = $this->getCleanAlias($alias, $userLogin); $token_auth = $this->getTokenAuth($userLogin, $password); $this->model->updateUser($userLogin, $password, $email, $alias, $token_auth); Cache::deleteTrackerCache(); /** * Triggered after an existing user has been updated. * Event notify about password change. * * @param string $userLogin The user's login handle. * @param boolean $passwordHasBeenUpdated Flag containing information about password change. */ Piwik::postEvent('UsersManager.updateUser.end', array($userLogin, $passwordHasBeenUpdated, $email, $password, $alias)); }
/** * Deletes a specific report * * @param int $idReport */ public function deleteReport($idReport) { $APIScheduledReports = $this->getReports($idSite = false, $periodSearch = false, $idReport); $report = reset($APIScheduledReports); Piwik::checkUserHasSuperUserAccessOrIsTheUser($report['login']); $this->getModel()->updateReport($idReport, array('deleted' => 1)); self::$cache = array(); }
/** * Returns a stored segment by ID * * @param $idSegment * @throws Exception * @return bool */ public function get($idSegment) { Piwik::checkUserHasSomeViewAccess(); if (!is_numeric($idSegment)) { throw new Exception("idSegment should be numeric."); } $segment = $this->getModel()->getSegment($idSegment); if (empty($segment)) { return false; } try { if (!$segment['enable_all_users']) { Piwik::checkUserHasSuperUserAccessOrIsTheUser($segment['login']); } } catch (Exception $e) { throw new Exception($this->getMessageCannotEditSegmentCreatedBySuperUser()); } if ($segment['deleted']) { throw new Exception("This segment is marked as deleted. "); } return $segment; }
/** * Records settings from the "User Settings" page * @throws Exception */ public function recordUserSettings() { $response = new ResponseBuilder(Common::getRequestVar('format')); try { $this->checkTokenInUrl(); $defaultReport = Common::getRequestVar('defaultReport'); $defaultDate = Common::getRequestVar('defaultDate'); $language = Common::getRequestVar('language'); $timeFormat = Common::getRequestVar('timeformat'); $userLogin = Piwik::getCurrentUserLogin(); Piwik::checkUserHasSuperUserAccessOrIsTheUser($userLogin); $this->processPasswordChange($userLogin); LanguagesManager::setLanguageForSession($language); APILanguagesManager::getInstance()->setLanguageForUser($userLogin, $language); APILanguagesManager::getInstance()->set12HourClockForUser($userLogin, $timeFormat); APIUsersManager::getInstance()->setUserPreference($userLogin, APIUsersManager::PREFERENCE_DEFAULT_REPORT, $defaultReport); APIUsersManager::getInstance()->setUserPreference($userLogin, APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE, $defaultDate); $toReturn = $response->getResponse(); } catch (Exception $e) { $toReturn = $response->getResponseException($e); } return $toReturn; }