Elgg  Version 7.1
Settings.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Elgg\Users;
4 
8 use Elgg\Request;
9 
15 class Settings {
16 
26  public static function setPassword(\Elgg\Event $event) {
27 
29  if (!$actor instanceof \ElggUser) {
30  return;
31  }
32 
33  $user = $event->getUserParam();
34  $request = $event->getParam('request');
35 
36  if (!$user instanceof \ElggUser || !$request instanceof Request) {
37  return;
38  }
39 
40  $password = (string) $request->getParam('password', null, false);
41  $password2 = (string) $request->getParam('password2', null, false);
42 
43  if (!$password) {
44  return;
45  }
46 
47  if (!$actor->isAdmin() || $user->guid === $actor->guid) {
48  // let admin user change anyone's password without knowing it except his own.
49 
50  $current_password = (string) $request->getParam('current_password', null, false);
51 
52  try {
53  _elgg_services()->accounts->assertCurrentPassword($user, $current_password);
54  } catch (RegistrationException $e) {
55  $request->validation()->fail('password', '', elgg_echo('LoginException:ChangePasswordFailure'));
56 
57  return false;
58  }
59  }
60 
61  try {
62  _elgg_services()->accounts->assertValidPassword([$password, $password2]);
63  } catch (RegistrationException $e) {
64  $request->validation()->fail('password', '', $e->getMessage());
65 
66  return false;
67  }
68 
69  _elgg_services()->accounts->changePassword($user, $password);
70 
71  if (elgg_get_config('security_notify_user_password')) {
72  // notify the user that their password has changed
73  $user->notify('password_change', $user);
74  }
75 
76  $request->validation()->pass('password', '', elgg_echo('user:password:success'));
77  }
78 
88  public static function setName(\Elgg\Event $event) {
89 
90  $user = $event->getUserParam();
91 
92  /* @var $request \Elgg\Request */
93  $request = $event->getParam('request');
94 
95  $name = $request->getParam('name');
96  if (!isset($name)) {
97  return;
98  }
99 
100  $name = strip_tags($name);
101  if (empty($name)) {
102  $request->validation()->fail('name', $request->getParam('name'), elgg_echo('user:name:fail'));
103 
104  return false;
105  }
106 
107  if ($name === $user->name) {
108  return;
109  }
110 
111  $request->validation()->pass('name', $name, elgg_echo('user:name:success'));
112 
113  $user->name = $name;
114  }
115 
125  public static function setUsername(\Elgg\Event $event) {
126 
127  $user = $event->getUserParam();
128  $request = $event->getParam('request');
129 
130  if (!$user instanceof \ElggUser || !$request instanceof Request) {
131  return;
132  }
133 
134  $username = $request->getParam('username');
135  if (!isset($username)) {
136  return;
137  }
138 
139  if (!elgg_is_admin_logged_in() && !elgg_get_config('can_change_username')) {
140  return;
141  }
142 
143  if (!$user->canEdit()) {
144  return;
145  }
146 
147  if ($user->username === $username) {
148  return;
149  }
150 
151  // check if username is valid and does not exist
152  try {
153  _elgg_services()->accounts->assertValidUsername($username, true);
154  } catch (RegistrationException $ex) {
155  $request->validation()->fail('username', $username, $ex->getMessage());
156 
157  return false;
158  }
159 
160  $user->username = $username;
161 
162  $request->validation()->pass('username', $username, elgg_echo('user:username:success'));
163 
164  // correctly forward after after a username change
165  elgg_register_event_handler('response', 'action:usersettings/save', function (\Elgg\Event $event) use ($username) {
166  $response = $event->getValue();
167  if (!$response instanceof ResponseBuilder) {
168  return;
169  }
170 
171  if ($response->getForwardURL() === REFERRER) {
172  $response->setForwardURL(elgg_generate_url('settings:account', [
173  'username' => $username,
174  ]));
175  }
176 
177  return $response;
178  });
179  }
180 
188  public static function setLanguage(\Elgg\Event $event) {
189 
190  $user = $event->getUserParam();
191  $request = $event->getParam('request');
192 
193  if (!$user instanceof \ElggUser || !$request instanceof Request) {
194  return;
195  }
196 
197  $language = $request->getParam('language');
198  if (!isset($language)) {
199  return;
200  }
201 
202  if ($language === $user->language) {
203  return;
204  }
205 
206  $who_can_change_language = elgg_get_config('who_can_change_language');
207  if ($who_can_change_language === 'nobody') {
208  return;
209  } elseif ($who_can_change_language === 'admin_only' && !elgg_is_admin_logged_in()) {
210  return;
211  }
212 
213  if (!in_array($language, _elgg_services()->translator->getAllowedLanguages())) {
214  return;
215  }
216 
217  $user->language = $language;
218 
219  $request->validation()->pass('language', $language, elgg_echo('user:language:success'));
220  }
221 
231  public static function setEmail(\Elgg\Event $event) {
232 
234  if (!$actor instanceof \ElggUser) {
235  return;
236  }
237 
238  $user = $event->getUserParam();
239  $request = $event->getParam('request');
240 
241  if (!$user instanceof \ElggUser || !$request instanceof Request) {
242  return;
243  }
244 
245  $email = $request->getParam('email');
246  if (!isset($email)) {
247  return;
248  }
249 
250  if (strcmp($email, $user->email) === 0) {
251  // no change
252  return;
253  }
254 
255  try {
256  $assert_unregistered = true;
257  if ($actor->isAdmin() && $user->guid !== $actor->guid) {
258  // admins changing another users email address are allowed to set it to a duplicate email address
259  $assert_unregistered = false;
260  }
261 
262  _elgg_services()->accounts->assertValidEmail($email, $assert_unregistered);
263  } catch (RegistrationException $ex) {
264  $request->validation()->fail('email', $email, $ex->getMessage());
265 
266  return false;
267  }
268 
269  if (_elgg_services()->config->security_email_require_password && $user->guid === $actor->guid) {
270  try {
271  // validate password
272  _elgg_services()->accounts->assertCurrentPassword($user, (string) $request->getParam('email_password'));
273  } catch (RegistrationException $e) {
274  $request->validation()->fail('email', $email, elgg_echo('email:save:fail:password'));
275  return false;
276  }
277  }
278 
279  $params = $event->getParams();
280  $params['email'] = $email;
281 
282  if (!elgg_trigger_event_results('change:email', 'user', $params, true)) {
283  return;
284  }
285 
286  if (_elgg_services()->config->security_email_require_confirmation && (!$actor->isAdmin() || $user->guid === $actor->guid)) {
287  // validate the new email address
288  try {
289  _elgg_services()->accounts->requestNewEmailValidation($user, $email);
290 
291  $request->validation()->pass('email', $email, elgg_echo('account:email:request:success', [$email]));
292  return true;
293  } catch (InvalidArgumentException $e) {
294  $request->validation()->fail('email', $email, elgg_echo('email:save:fail:password'));
295  return false;
296  }
297  }
298 
299  $user->email = $email;
300  $request->validation()->pass('email', $email, elgg_echo('email:save:success'));
301  }
302 
310  public static function setDefaultAccess(\Elgg\Event $event) {
311 
312  if (!_elgg_services()->config->allow_user_default_access) {
313  return;
314  }
315 
316  $user = $event->getUserParam();
317  $request = $event->getParam('request');
318 
319  if (!$user instanceof \ElggUser || !$request instanceof Request) {
320  return;
321  }
322 
323  $default_access = $request->getParam('default_access');
324  if (!isset($default_access)) {
325  return;
326  }
327 
328  if ($default_access === $user->elgg_default_access) {
329  return;
330  }
331 
332  $user->elgg_default_access = $default_access;
333 
334  $request->validation()->pass('default_access', $default_access, elgg_echo('user:default_access:success'));
335  }
336 
344  public static function setColorScheme(\Elgg\Event $event) {
345 
346  if (!_elgg_services()->config->color_schemes_enabled) {
347  return;
348  }
349 
350  $user = $event->getUserParam();
351  $request = $event->getParam('request');
352 
353  if (!$user instanceof \ElggUser || !$request instanceof Request) {
354  return;
355  }
356 
357  $color_scheme = $request->getParam('color_scheme');
358  if (!isset($color_scheme)) {
359  return;
360  }
361 
362  if ($color_scheme === $user->elgg_color_scheme) {
363  return;
364  }
365 
366  $user->elgg_color_scheme = $color_scheme;
367 
368  $request->validation()->pass('color_scheme', $color_scheme, elgg_echo('user:color_scheme:success'));
369  }
370 }
$email
Definition: change_email.php:7
$username
Definition: delete.php:23
if(! $user||! $user->canDelete()) $name
Definition: delete.php:22
$params
Saves global plugin settings.
Definition: save.php:13
$password2
Definition: register.php:14
$language
Definition: useradd.php:17
$user
Definition: ban.php:7
Models an event passed to event handlers.
Definition: Event.php:11
Could not register a new user for whatever reason.
Exception thrown if an argument is not of the expected type.
Request container.
Definition: Request.php:12
Event handlers for user settings.
Definition: Settings.php:15
static setEmail(\Elgg\Event $event)
Set a user's email address.
Definition: Settings.php:231
static setColorScheme(\Elgg\Event $event)
Set a user's color scheme preference.
Definition: Settings.php:344
static setUsername(\Elgg\Event $event)
Set a user's username.
Definition: Settings.php:125
static setName(\Elgg\Event $event)
Set a user's display name.
Definition: Settings.php:88
static setPassword(\Elgg\Event $event)
Set a user's password.
Definition: Settings.php:26
static setDefaultAccess(\Elgg\Event $event)
Set a user's default access level.
Definition: Settings.php:310
static setLanguage(\Elgg\Event $event)
Set a user's language.
Definition: Settings.php:188
elgg_get_config(string $name, $default=null)
Get an Elgg configuration value.
const REFERRER
Used in calls to forward() to specify the browser should be redirected to the referring page.
Definition: constants.php:37
if(! $user instanceof \ElggUser) $who_can_change_language
Definition: language.php:13
if($item instanceof \ElggEntity) elseif($item instanceof \ElggRiverItem) elseif($item instanceof \ElggRelationship) elseif(is_callable([ $item, 'getType']))
Definition: item.php:48
_elgg_services()
Get the global service provider.
Definition: elgglib.php:347
HTTP response builder interface.
elgg_echo(string $message_key, array $args=[], string $language='')
Elgg language module Functions to manage language and translations.
Definition: languages.php:17
elgg_register_event_handler(string $event, string $type, callable|string $callback, int $priority=500)
Helper functions for event handling.
Definition: events.php:48
elgg_trigger_event_results(string $event, string $type, array $params=[], $returnvalue=null)
Triggers an event where it is expected that the mixed return value could be manipulated by event call...
Definition: events.php:117
$request
Definition: livesearch.php:12
if(! $user||! $user->canEdit()) $password
elgg_is_admin_logged_in()
Returns whether or not the viewer is currently logged in and an admin user.
Definition: sessions.php:52
elgg_get_logged_in_user_entity()
Return the current logged in user, or null if no user is logged in.
Definition: sessions.php:24
$response
Definition: content.php:10