public function SetTimezoneController::updateTimezone in Timezone Detect 8
Update the users timezone.
1 string reference to 'SetTimezoneController::updateTimezone'
File
- src/
Controller/ SetTimezoneController.php, line 72
Class
Namespace
Drupal\timezone_detect\ControllerCode
public function updateTimezone() {
$response = new AjaxResponse();
// If they are logged in, set some data.
if ($this->account
->isAuthenticated()) {
// Check for $_POST data.
// Timezone should be an IANA/Olson timezone id provided via $_POST.
$timezone = Html::escape($this->request->request
->get('timezone'));
if (!isset($timezone)) {
$this->logger
->error('Attempting to set timezone for user @uid, but no timezone found in $_POST data; aborting.', [
'@uid' => $this->account
->id(),
]);
unset($_SESSION['timezone_detect']['update_timezone']);
return $response;
}
// Make sure we have a valid session token to prevent cross-site request
// forgery.
$token = $this->request->request
->get('token');
if (!isset($token) || !$this->tokenGenerator
->validate($token)) {
$this->logger
->error('Attempting to set timezone for user @uid, but session token in $_POST data is empty or invalid; aborting.', [
'@uid' => $this->account
->ui(),
]);
unset($_SESSION['timezone_detect']['update_timezone']);
return $response;
}
// Keep track of the last submitted timezone in case it's not valid so
// that we don't keep POSTing it on every request.
$_SESSION['timezone_detect']['current_timezone'] = $timezone;
// Check valid timezone id.
$zone_list = timezone_identifiers_list();
if (!in_array($timezone, $zone_list)) {
$this->logger
->error('Attempting to set timezone for user @uid to @timezone, but that does not appear to be a valid timezone id; aborting.', [
'@uid' => $this->account
->id(),
'@timezone' => $timezone,
]);
unset($_SESSION['timezone_detect']['update_timezone']);
return $response;
}
// Save timezone to account.
User::load($this->account
->id())
->set('timezone', $timezone)
->save();
if ($this->configFactory
->get('timezone_detect.settings')
->get('watchdog')) {
$this->logger
->notice('Set timezone for user @uid to @timezone.', [
'@uid' => $this->account
->id(),
'@timezone' => $timezone,
]);
}
}
// Unset session flag regarldess of whether they are logged in or not to
// avoid repeated attempts at this process that are likely to fail.
unset($_SESSION['timezone_detect']['update_timezone']);
return $response;
}