diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php index ca3a8b178a..c91cfe082f 100644 --- a/apps/files_trashbin/lib/trashbin.php +++ b/apps/files_trashbin/lib/trashbin.php @@ -564,11 +564,8 @@ class Trashbin { $config = \OC::$server->getConfig(); $softQuota = true; - $quota = $config->getUserValue($user, 'files', 'quota', null); + $quota = \OC::$server->getUserManager()->get($user)->getQuota(); $view = new \OC\Files\View('/' . $user); - if ($quota === null || $quota === 'default') { - $quota = $config->getAppValue('files', 'default_quota', null); - } if ($quota === null || $quota === 'none') { $quota = \OC\Files\Filesystem::free_space('/'); $softQuota = false; diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php index 88a4126dab..47acec1d76 100644 --- a/apps/files_versions/lib/storage.php +++ b/apps/files_versions/lib/storage.php @@ -653,11 +653,9 @@ class Storage { $versionsFileview = new \OC\Files\View('/'.$uid.'/files_versions'); // get available disk space for user + $user = \OC::$server->getUserManager()->get($uid); $softQuota = true; - $quota = $config->getUserValue($uid, 'files', 'quota', null); - if ( $quota === null || $quota === 'default') { - $quota = $config->getAppValue('files', 'default_quota', null); - } + $quota = $user->getQuota(); if ( $quota === null || $quota === 'none' ) { $quota = \OC\Files\Filesystem::free_space('/'); $softQuota = false; diff --git a/apps/provisioning_api/lib/users.php b/apps/provisioning_api/lib/users.php index efb10a5086..c609c7bd84 100644 --- a/apps/provisioning_api/lib/users.php +++ b/apps/provisioning_api/lib/users.php @@ -278,7 +278,7 @@ class Users { $quota = \OCP\Util::humanFileSize($quota); } } - $this->config->setUserValue($targetUserId, 'files', 'quota', $quota); + $targetUser->setQuota($quota); break; case 'password': $targetUser->setPassword($parameters['_put']['value']); diff --git a/apps/user_ldap/lib/user/user.php b/apps/user_ldap/lib/user/user.php index 3bc790a6c1..8b70c9e237 100644 --- a/apps/user_ldap/lib/user/user.php +++ b/apps/user_ldap/lib/user/user.php @@ -456,7 +456,7 @@ class User { } } if(!is_null($quota)) { - $this->config->setUserValue($this->uid, 'files', 'quota', $quota); + $user = $this->userManager->get($this->uid)->setQuota($quota); } } diff --git a/lib/private/server.php b/lib/private/server.php index 0d1bed4e7d..9dfae86009 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -244,9 +244,9 @@ class Server extends ServerContainer implements IServerContainer { $userSession->listen('\OC\User', 'logout', function () { \OC_Hook::emit('OC_User', 'logout', array()); }); - $userSession->listen('\OC\User', 'changeUser', function ($user) { + $userSession->listen('\OC\User', 'changeUser', function ($user, $feature) { /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user)); + \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature)); }); return $userSession; }); diff --git a/lib/private/user/user.php b/lib/private/user/user.php index 516c1d443c..0f230d468f 100644 --- a/lib/private/user/user.php +++ b/lib/private/user/user.php @@ -30,6 +30,7 @@ namespace OC\User; use OC\Hooks\Emitter; +use OC_Helper; use OCP\IAvatarManager; use OCP\IImage; use OCP\IURLGenerator; @@ -140,7 +141,7 @@ class User implements IUser { $result = $this->backend->setDisplayName($this->uid, $displayName); if ($result) { $this->displayName = $displayName; - $this->triggerChange(); + $this->triggerChange('displayName'); } return $result !== false; } else { @@ -161,7 +162,7 @@ class User implements IUser { } else { $this->config->setUserValue($this->uid, 'settings', 'email', $mailAddress); } - $this->triggerChange(); + $this->triggerChange('eMailAddress'); } /** @@ -338,6 +339,36 @@ class User implements IUser { return $this->config->getUserValue($this->uid, 'settings', 'email', null); } + /** + * get the users' quota + * + * @return string + * @since 9.0.0 + */ + public function getQuota() { + $quota = $this->config->getUserValue($this->uid, 'files', 'quota', 'default'); + if($quota === 'default') { + $quota = $this->config->getAppValue('files', 'default_quota', 'none'); + } + return $quota; + } + + /** + * set the users' quota + * + * @param string $quota + * @return void + * @since 9.0.0 + */ + public function setQuota($quota) { + if($quota !== 'none' and $quota !== 'default') { + $quota= OC_Helper::computerFileSize($quota); + $quota=OC_Helper::humanFileSize($quota); + } + $this->config->setUserValue($this->uid, 'files', 'quota', $quota); + $this->triggerChange('quota'); + } + /** * get the avatar image if it exists * @@ -386,9 +417,9 @@ class User implements IUser { return $url; } - public function triggerChange() { + public function triggerChange($feature) { if ($this->emitter) { - $this->emitter->emit('\OC\User', 'changeUser', array($this)); + $this->emitter->emit('\OC\User', 'changeUser', array($this, $feature)); } } diff --git a/lib/private/util.php b/lib/private/util.php index 28541eff77..6e15d742be 100644 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -285,11 +285,7 @@ class OC_Util { * @return int Quota bytes */ public static function getUserQuota($user) { - $config = \OC::$server->getConfig(); - $userQuota = $config->getUserValue($user, 'files', 'quota', 'default'); - if ($userQuota === 'default') { - $userQuota = $config->getAppValue('files', 'default_quota', 'none'); - } + $userQuota = \OC::$server->getUserManager()->get($user)->getQuota(); if($userQuota === 'none') { return \OCP\Files\FileInfo::SPACE_UNLIMITED; }else{ diff --git a/lib/public/iuser.php b/lib/public/iuser.php index 454d45eae7..2d2a2710bf 100644 --- a/lib/public/iuser.php +++ b/lib/public/iuser.php @@ -178,4 +178,21 @@ interface IUser { * @since 9.0.0 */ public function setEMailAddress($mailAddress); + + /** + * get the users' quota + * + * @return string + * @since 9.0.0 + */ + public function getQuota(); + + /** + * set the users' quota + * + * @param string $quota + * @return void + * @since 9.0.0 + */ + public function setQuota($quota); } diff --git a/settings/ajax/setquota.php b/settings/ajax/setquota.php index dbdfb98bc8..94fd7bd1e2 100644 --- a/settings/ajax/setquota.php +++ b/settings/ajax/setquota.php @@ -56,7 +56,7 @@ if($quota !== 'none' and $quota !== 'default') { // Return Success story if($username) { - \OC::$server->getConfig()->setUserValue($username, 'files', 'quota', $quota); + $targetUserObject->setQuota($quota); }else{//set the default quota when no username is specified if($quota === 'default') {//'default' as default quota makes no sense $quota='none'; diff --git a/settings/controller/userscontroller.php b/settings/controller/userscontroller.php index 17629fe924..3e5455751a 100644 --- a/settings/controller/userscontroller.php +++ b/settings/controller/userscontroller.php @@ -184,7 +184,7 @@ class UsersController extends Controller { 'displayname' => $user->getDisplayName(), 'groups' => (empty($userGroups)) ? $this->groupManager->getUserGroupIds($user) : $userGroups, 'subadmin' => $subAdminGroups, - 'quota' => $this->config->getUserValue($user->getUID(), 'files', 'quota', 'default'), + 'quota' => $user->getQuota(), 'storageLocation' => $user->getHome(), 'lastLogin' => $user->getLastLogin() * 1000, 'backend' => $user->getBackendClassName(),