diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index f95e519f..00f75410 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -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', diff --git a/src/lang/nl_NL.lang.php b/src/lang/nl_NL.lang.php index e87d420f..09101ef9 100644 --- a/src/lang/nl_NL.lang.php +++ b/src/lang/nl_NL.lang.php @@ -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', diff --git a/src/psm/Module/User/Controller/UserController.php b/src/psm/Module/User/Controller/UserController.php index 75de8fe2..2fdd788e 100644 --- a/src/psm/Module/User/Controller/UserController.php +++ b/src/psm/Module/User/Controller/UserController.php @@ -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'); }