Blame view

sources/lib/private/user/user.php 5.38 KB
31b7f2792   Kload   Upgrade to ownclo...
1
2
3
4
5
6
7
8
9
10
11
12
  <?php
  
  /**
   * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   * See the COPYING-README file.
   */
  
  namespace OC\User;
  
  use OC\Hooks\Emitter;
6d9380f96   Cédric Dupont   Update sources OC...
13
  use OCP\IUser;
31b7f2792   Kload   Upgrade to ownclo...
14

6d9380f96   Cédric Dupont   Update sources OC...
15
  class User implements IUser {
31b7f2792   Kload   Upgrade to ownclo...
16
17
18
19
20
21
22
23
24
25
26
  	/**
  	 * @var string $uid
  	 */
  	private $uid;
  
  	/**
  	 * @var string $displayName
  	 */
  	private $displayName;
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
27
  	 * @var \OC_User_Interface $backend
31b7f2792   Kload   Upgrade to ownclo...
28
29
30
31
32
33
34
35
36
  	 */
  	private $backend;
  
  	/**
  	 * @var bool $enabled
  	 */
  	private $enabled;
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
37
  	 * @var Emitter|Manager $emitter
31b7f2792   Kload   Upgrade to ownclo...
38
39
40
41
  	 */
  	private $emitter;
  
  	/**
a293d369c   Kload   Update sources to...
42
43
44
45
46
  	 * @var string $home
  	 */
  	private $home;
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
47
48
49
50
51
  	 * @var int $lastLogin
  	 */
  	private $lastLogin;
  
  	/**
a293d369c   Kload   Update sources to...
52
53
54
55
56
  	 * @var \OC\AllConfig $config
  	 */
  	private $config;
  
  	/**
31b7f2792   Kload   Upgrade to ownclo...
57
  	 * @param string $uid
6d9380f96   Cédric Dupont   Update sources OC...
58
  	 * @param \OC_User_Interface $backend
a293d369c   Kload   Update sources to...
59
60
  	 * @param \OC\Hooks\Emitter $emitter
  	 * @param \OC\AllConfig $config
31b7f2792   Kload   Upgrade to ownclo...
61
  	 */
a293d369c   Kload   Update sources to...
62
  	public function __construct($uid, $backend, $emitter = null, $config = null) {
31b7f2792   Kload   Upgrade to ownclo...
63
  		$this->uid = $uid;
31b7f2792   Kload   Upgrade to ownclo...
64
65
  		$this->backend = $backend;
  		$this->emitter = $emitter;
a293d369c   Kload   Update sources to...
66
67
68
69
70
71
72
  		$this->config = $config;
  		if ($this->config) {
  			$enabled = $this->config->getUserValue($uid, 'core', 'enabled', 'true');
  			$this->enabled = ($enabled === 'true');
  		} else {
  			$this->enabled = true;
  		}
6d9380f96   Cédric Dupont   Update sources OC...
73
  		$this->lastLogin = \OC_Preferences::getValue($uid, 'login', 'lastLogin', 0);
31b7f2792   Kload   Upgrade to ownclo...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  	}
  
  	/**
  	 * get the user id
  	 *
  	 * @return string
  	 */
  	public function getUID() {
  		return $this->uid;
  	}
  
  	/**
  	 * get the displayname for the user, if no specific displayname is set it will fallback to the user id
  	 *
  	 * @return string
  	 */
  	public function getDisplayName() {
6d9380f96   Cédric Dupont   Update sources OC...
91
92
93
94
95
96
97
  		if (!isset($this->displayName)) {
  			if ($this->backend and $this->backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
  				$this->displayName = $this->backend->getDisplayName($this->uid);
  			} else {
  				$this->displayName = $this->uid;
  			}
  		}
31b7f2792   Kload   Upgrade to ownclo...
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  		return $this->displayName;
  	}
  
  	/**
  	 * set the displayname for the user
  	 *
  	 * @param string $displayName
  	 * @return bool
  	 */
  	public function setDisplayName($displayName) {
  		if ($this->canChangeDisplayName()) {
  			$this->displayName = $displayName;
  			$result = $this->backend->setDisplayName($this->uid, $displayName);
  			return $result !== false;
  		} else {
  			return false;
  		}
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  	 * returns the timestamp of the user's last login or 0 if the user did never
  	 * login
  	 *
  	 * @return int
  	 */
  	public function getLastLogin() {
  		return $this->lastLogin;
  	}
  
  	/**
  	 * updates the timestamp of the most recent login of this user
  	 */
  	public function updateLastLoginTimestamp() {
  		$this->lastLogin = time();
  		\OC_Preferences::setValue(
  			$this->uid, 'login', 'lastLogin', $this->lastLogin);
  	}
  
  	/**
31b7f2792   Kload   Upgrade to ownclo...
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
  	 * Delete the user
  	 *
  	 * @return bool
  	 */
  	public function delete() {
  		if ($this->emitter) {
  			$this->emitter->emit('\OC\User', 'preDelete', array($this));
  		}
  		$result = $this->backend->deleteUser($this->uid);
  		if ($this->emitter) {
  			$this->emitter->emit('\OC\User', 'postDelete', array($this));
  		}
  		return !($result === false);
  	}
  
  	/**
  	 * Set the password of the user
  	 *
  	 * @param string $password
  	 * @param string $recoveryPassword for the encryption app to reset encryption keys
  	 * @return bool
  	 */
6d9380f96   Cédric Dupont   Update sources OC...
159
  	public function setPassword($password, $recoveryPassword = null) {
31b7f2792   Kload   Upgrade to ownclo...
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
  		if ($this->emitter) {
  			$this->emitter->emit('\OC\User', 'preSetPassword', array($this, $password, $recoveryPassword));
  		}
  		if ($this->backend->implementsActions(\OC_USER_BACKEND_SET_PASSWORD)) {
  			$result = $this->backend->setPassword($this->uid, $password);
  			if ($this->emitter) {
  				$this->emitter->emit('\OC\User', 'postSetPassword', array($this, $password, $recoveryPassword));
  			}
  			return !($result === false);
  		} else {
  			return false;
  		}
  	}
  
  	/**
  	 * get the users home folder to mount
  	 *
  	 * @return string
  	 */
  	public function getHome() {
a293d369c   Kload   Update sources to...
180
181
182
183
184
185
186
187
  		if (!$this->home) {
  			if ($this->backend->implementsActions(\OC_USER_BACKEND_GET_HOME) and $home = $this->backend->getHome($this->uid)) {
  				$this->home = $home;
  			} elseif ($this->config) {
  				$this->home = $this->config->getSystemValue('datadirectory') . '/' . $this->uid;
  			} else {
  				$this->home = \OC::$SERVERROOT . '/data/' . $this->uid;
  			}
31b7f2792   Kload   Upgrade to ownclo...
188
  		}
a293d369c   Kload   Update sources to...
189
  		return $this->home;
31b7f2792   Kload   Upgrade to ownclo...
190
191
192
193
194
195
196
197
  	}
  
  	/**
  	 * check if the backend allows the user to change his avatar on Personal page
  	 *
  	 * @return bool
  	 */
  	public function canChangeAvatar() {
a293d369c   Kload   Update sources to...
198
  		if ($this->backend->implementsActions(\OC_USER_BACKEND_PROVIDE_AVATAR)) {
31b7f2792   Kload   Upgrade to ownclo...
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
  			return $this->backend->canChangeAvatar($this->uid);
  		}
  		return true;
  	}
  
  	/**
  	 * check if the backend supports changing passwords
  	 *
  	 * @return bool
  	 */
  	public function canChangePassword() {
  		return $this->backend->implementsActions(\OC_USER_BACKEND_SET_PASSWORD);
  	}
  
  	/**
  	 * check if the backend supports changing display names
  	 *
  	 * @return bool
  	 */
  	public function canChangeDisplayName() {
a293d369c   Kload   Update sources to...
219
220
221
222
223
  		if ($this->config and $this->config->getSystemValue('allow_user_to_change_display_name') === false) {
  			return false;
  		} else {
  			return $this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME);
  		}
31b7f2792   Kload   Upgrade to ownclo...
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
  	}
  
  	/**
  	 * check if the user is enabled
  	 *
  	 * @return bool
  	 */
  	public function isEnabled() {
  		return $this->enabled;
  	}
  
  	/**
  	 * set the enabled status for the user
  	 *
  	 * @param bool $enabled
  	 */
  	public function setEnabled($enabled) {
  		$this->enabled = $enabled;
a293d369c   Kload   Update sources to...
242
243
244
245
  		if ($this->config) {
  			$enabled = ($enabled) ? 'true' : 'false';
  			$this->config->setUserValue($this->uid, 'core', 'enabled', $enabled);
  		}
31b7f2792   Kload   Upgrade to ownclo...
246
247
  	}
  }