Register > Phone Optional * @copyright Tamaranga */ class PhoneOptional extends AuthForm { /** @var string */ public $title = ''; public function init() { parent::init(); $this->setTemplate('register/phone.optional', 'users'); } public function data() { $data = parent::data(); $data['profile_url'] = Users::url('account.settings'); $data['title'] = _t('users', 'You are almost registered'); return $data; } public function validate($data = []) { $data = $this->validateUsingRules($data, [ 'name' => [ TYPE_NOTAGS, 'limit' => $this->config('users.contacts.name.limit', 50, TYPE_UINT), 'required' => _t('users', 'Enter your name'), function (&$name) { $name = $this->validateName($name); return true; }, ], 'email' => [ TYPE_NOTAGS, 'limit' => 100, 'optional', function (&$email) { if (! $this->validateEmail($email)) { return false; } return true; }, ], ]); if (! empty($data['email'])) { if ($this->isEmailExists($data['email'], $this->request->user()->id())) { $this->errors->set(_t('users', 'A user with this email address is already registered'), 'email'); } } else { # Email is optional unset($data['email']); } # Blocks validation return $this->validateBlocks($data); } public function submit() { do { # Authenticated user only $user = $this->request->user(); if (! $user) { $this->errors->reloadPage(); break; } # Validate $data = $this->validate(); if ($this->errors->any()) { break; } # Send notification to Email for confirmation if (! empty($data['email'])) { if (Users::sendEmailChangeConfirmation($user->id(), $data['email'])) { $this->respond('msg', _t('users', 'To be able to receive messages to this email in the future, follow the link from the letter.')); } else { $this->errors->reloadPage(); break; } $this->respond('redirect', Users::url('account.settings')); $this->respond('redirect_timeout', 3); } # Update user account $user->update($data); # Finish $this->respond('redirect', $this->registrationUrl('finished')); } while (false); return parent::submit(); } }