Prevented removal of last admin

Fixes #687.
This commit is contained in:
TimZ99 2019-10-10 00:03:56 +02:00
parent e47e0fca80
commit 030b2b3c2f
No known key found for this signature in database
GPG Key ID: 4D8268DC68E8339D
3 changed files with 18 additions and 7 deletions

View File

@ -133,6 +133,7 @@ $sm_lang = array(
'error_user_no_match' => 'The user could not be found in the database.',
'error_user_password_invalid' => 'The entered password is invalid.',
'error_user_password_no_match' => 'The entered passwords do not match.',
'error_user_admin_cant_be_deleted' => 'You can\'t remove the last administrator.',
),
'log' => array(
'title' => 'Log entries',

View File

@ -130,6 +130,7 @@ $sm_lang = array(
'error_user_no_match' => 'De gebruiker kon niet worden toegevoegd aan de database.',
'error_user_password_invalid' => 'Het ingevulde wachtwoord is ongeldig.',
'error_user_password_no_match' => 'De ingevulde wachtwoorden komen niet overeen.',
'error_user_admin_cant_be_deleted' => 'Je kan de laatste administrator niet verwijderen.',
),
'log' => array(
'title' => 'Log entries',

View File

@ -239,6 +239,11 @@ class UserController extends AbstractController {
$user_validator->username($clean['user_name'], $user_id);
$user_validator->email($clean['email']);
$user_validator->level($clean['level']);
if(count($this->db->select(PSM_DB_PREFIX.'users', array('level' => PSM_USER_ADMIN))) == 1 &&
$this->getUser()->getUserLevel() == PSM_USER_ADMIN) {
$this->addMessage(psm_get_lang('users', 'error_user_admin_cant_be_deleted'), 'warning');
$clean['level'] = PSM_USER_ADMIN;
}
// always validate password for new users,
// but only validate it for existing users when they change it.
@ -309,15 +314,19 @@ class UserController extends AbstractController {
try {
$this->container->get('util.user.validator')->userId($id);
$this->db->delete(PSM_DB_PREFIX.'users', array('user_id' => $id,));
$this->db->delete(PSM_DB_PREFIX.'users_servers', array('user_id' => $id));
if(count($this->db->select(PSM_DB_PREFIX.'users', array('level' => PSM_USER_ADMIN))) == 1) {
$this->addMessage(psm_get_lang('users', 'error_user_admin_cant_be_deleted'), 'error');
} else {
$this->db->delete(PSM_DB_PREFIX.'users', array('user_id' => $id,));
$this->db->delete(PSM_DB_PREFIX.'users_servers', array('user_id' => $id));
$this->container->get('event')->dispatch(
\psm\Module\User\UserEvents::USER_DELETE,
new \psm\Module\User\Event\UserEvent($id, $this->getUser()->getUserId())
);
$this->container->get('event')->dispatch(
\psm\Module\User\UserEvents::USER_DELETE,
new \psm\Module\User\Event\UserEvent($id, $this->getUser()->getUserId())
);
$this->addMessage(psm_get_lang('users', 'deleted'), 'success');
$this->addMessage(psm_get_lang('users', 'deleted'), 'success');
}
} catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_'.$e->getMessage()), 'error');
}