kpmpgsmkii/kanga.world/site/controllers/user.php
2021-12-29 16:46:27 -06:00

146 lines
No EOL
3.3 KiB
PHP

<?php
return function ($kirby, $page) {
if(!$kirby->user()) {
go('/');
}
$error = null;
$alert = null;
// CHECK ACCOUNT ACTIVATION
if(option('user.email.activation', false) === true && $kirby->user()->emailActivation()->toString() === '' || $kirby->user()->emailActivation() != true) {
$alert['error'] = 'Please check your emails to activate the account.';
}
// UPDATE USER
if($kirby->request()->is('post') && get('update')) {
$data = [
'email' => esc(get('email')),
'password' => esc(get('password'))
];
$rules = [
'email' => ['email'],
'password' => ['minLength' => 8]
];
$messages = [
'email' => 'Please enter a valid email adress',
'password' => 'Please enter an eight character password'
];
// INVALID DATA
if($invalid = invalid($data, $rules, $messages)) {
$alert = $invalid;
$error = true;
// VALID DATA
} else {
// EMAIL
if (V::email($data['email']) && !get('password')) {
try {
$kirby->user()->changeEmail($data['email']);
$success = 'Your email has been changed!';
// TOKEN FOR ACCOUNT RE-ACTIVATION
$token = Str::random(16);
$kirby->user()->update([
'emailActivation' => false,
'emailActivationToken' => $token
]);
// ACTIVATE ACCOUNT BY EMAIL IF ENABLED
if (option('user.email.activation', false) === true) {
$link = $kirby->site()->url() . "/user/activate/" . $token;
$email = $kirby->email([
'to' => $data['email'],
'from' => option('user.email.activation.sender'),
'subject' => option('user.email.activation.sender', 'Account Activation Link'),
'template' => 'account-activation',
'data' => [
'link' => $link,
]
]);
}
} catch(Exception $e) {
if(option('debug')) {
$alert['error'] = 'The user email could not be changed: ' . $e->getMessage();
}
else {
$alert['error'] = 'The user email could not be changed!';
}
}
}
// PASSWORD
if ($data['password']) {
try {
$kirby->user()->changePassword($data['password']);
$success = 'Your password has been changed!';
} catch(Exception $e) {
if(option('debug')) {
$alert['error'] = 'The user password could not be changed: ' . $e->getMessage();
}
else {
$alert['error'] = 'The user password could not be changed!';
}
}
}
// SUCCESSFUL
if (empty($alert) === true) {
$error = null;
}
}
}
// DELETE USER
if($kirby->request()->is('post') && get('delete')) {
try {
$kirby->user()->delete();
go('/');
} catch(Exception $e) {
if(option('debug')) {
$alert['error'] = 'The user could not be deleted: ' . $e->getMessage();
}
else {
$alert['error'] = 'The user could not be deleted!';
}
}
}
return [
'error' => $error,
'alert' => $alert,
'data' => $data ?? false,
'success' => $success ?? false
];
};