From 3a796d1e1533febc63a2719816815b47f2065e82 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Tue, 9 Feb 2016 17:16:43 +0100
Subject: [PATCH] Consolidate getQuota and setQuota methods in User instance

---
 apps/files_trashbin/lib/trashbin.php    |  5 +---
 apps/files_versions/lib/storage.php     |  6 ++--
 apps/provisioning_api/lib/users.php     |  2 +-
 apps/user_ldap/lib/user/user.php        |  2 +-
 lib/private/server.php                  |  4 +--
 lib/private/user/user.php               | 39 ++++++++++++++++++++++---
 lib/private/util.php                    |  6 +---
 lib/public/iuser.php                    | 17 +++++++++++
 settings/ajax/setquota.php              |  2 +-
 settings/controller/userscontroller.php |  2 +-
 10 files changed, 62 insertions(+), 23 deletions(-)

diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index ca3a8b178a2..c91cfe082fd 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 88a4126dabd..47acec1d763 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 efb10a50865..c609c7bd849 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 3bc790a6c10..8b70c9e2374 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 0d1bed4e7d2..9dfae860090 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 516c1d443c6..0f230d468fd 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 28541eff773..6e15d742bed 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 454d45eae76..2d2a2710bf8 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 dbdfb98bc8c..94fd7bd1e2b 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 17629fe924f..3e5455751ab 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(),
-- 
GitLab